AWS Cloud9

Hands-On

Demo

Create environment

webapp-dev-environment
Development environment for web application demo

New EC2 instance

Network settings

Create 

Successfully created webapp-dev-environment

mkdir webapp-project
cd webapp-project
mkdir css js images
git init
git config --global user.name "Deepak Dubey"
git config -global user.email "gituserforprojects@gmail.com"
gituserforprojects@gmail.com
node --version
aws --version
python3 --version
aws sts get-caller-identity
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AWS Cloud9 Demo App</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div class="container">
        <h1>AWS Cloud9 Development Demo</h1>
        <p>This application was built using AWS Cloud9 IDE</p>
        
        <div class="feature-section">
            <h2>AWS Integration Features</h2>
            <button id="listBuckets">List S3 Buckets</button>
            <button id="getCurrentRegion">Get Current Region</button>
            <div id="results"></div>
        </div>
        
        <div class="info-section">
            <h3>Environment Information</h3>
            <p id="timestamp"></p>
            <p>Developed in: <span id="environment">AWS Cloud9</span></p>
        </div>
    </div>
    
    <script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.24.min.js"></script>
    <script src="js/app.js"></script>
</body>
</html>
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Arial', sans-serif;
    line-height: 1.6;
    margin: 0;
    padding: 20px;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    min-height: 100vh;
}

.container {
    max-width: 800px;
    margin: 0 auto;
    background: white;
    padding: 30px;
    border-radius: 10px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.3);
}

h1 {
    color: #333;
    text-align: center;
    margin-bottom: 20px;
    border-bottom: 3px solid #FF9900;
    padding-bottom: 10px;
}

.feature-section, .info-section {
    margin: 30px 0;
    padding: 20px;
    background: #f8f9fa;
    border-radius: 5px;
}

button {
    background: #FF9900;
    color: white;
    border: none;
    padding: 10px 20px;
    margin: 10px 5px;
    border-radius: 5px;
    cursor: pointer;
    transition: background 0.3s;
}

button:hover {
    background: #e68900;
}

#results {
    margin-top: 20px;
    padding: 15px;
    background: white;
    border-radius: 5px;
    border-left: 4px solid #FF9900;
}
// Update timestamp
document.getElementById('timestamp').textContent = 
    'Last updated: ' + new Date().toLocaleString();

// List S3 Buckets using backend API
document.getElementById('listBuckets').addEventListener('click', function() {
    const resultsDiv = document.getElementById('results');
    
    resultsDiv.innerHTML = '<p>Loading S3 buckets...</p>';
    
    fetch('/api/buckets')
        .then(response => response.json())
        .then(data => {
            if (data.error) {
                resultsDiv.innerHTML = `<p style="color: red;">Error: ${data.error}</p>`;
            } else if (data.buckets && data.buckets.length > 0) {
                let bucketList = '<h4>Your S3 Buckets:</h4><ul>';
                data.buckets.forEach(function(bucket) {
                    const creationDate = new Date(bucket.CreationDate).toLocaleDateString();
                    bucketList += `<li><strong>${bucket.Name}</strong> (Created: ${creationDate})</li>`;
                });
                bucketList += '</ul>';
                resultsDiv.innerHTML = bucketList;
            } else {
                resultsDiv.innerHTML = '<p>No S3 buckets found in this account.</p>';
            }
        })
        .catch(err => {
            resultsDiv.innerHTML = `<p style="color: red;">Error fetching buckets: ${err.message}</p>`;
        });
});

// Get current region using backend API
document.getElementById('getCurrentRegion').addEventListener('click', function() {
    const resultsDiv = document.getElementById('results');
    
    fetch('/api/region')
        .then(response => response.json())
        .then(data => {
            if (data.error) {
                resultsDiv.innerHTML = `<p style="color: red;">Error: ${data.error}</p>`;
            } else {
                resultsDiv.innerHTML = `
                    <p><strong>Current AWS Region:</strong> ${data.region}</p>
                    <p style="color: green;">✓ Successfully retrieved from backend</p>`;
            }
        })
        .catch(err => {
            resultsDiv.innerHTML = `<p style="color: red;">Error: ${err.message}</p>`;
        });
});
#!/usr/bin/env python3
import http.server
import socketserver
import json
import boto3
from urllib.parse import urlparse, parse_qs
import os

class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        parsed_path = urlparse(self.path)
        
        if parsed_path.path == '/api/buckets':
            self.handle_list_buckets()
        elif parsed_path.path == '/api/region':
            self.handle_get_region()
        else:
            # Serve static files
            super().do_GET()
    
    def handle_list_buckets(self):
        try:
            s3 = boto3.client('s3')
            response = s3.list_buckets()
            
            buckets = []
            for bucket in response['Buckets']:
                buckets.append({
                    'Name': bucket['Name'],
                    'CreationDate': bucket['CreationDate'].isoformat()
                })
            
            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            self.send_header('Access-Control-Allow-Origin', '*')
            self.end_headers()
            self.wfile.write(json.dumps({'buckets': buckets}).encode())
            
        except Exception as e:
            self.send_response(500)
            self.send_header('Content-type', 'application/json')
            self.send_header('Access-Control-Allow-Origin', '*')
            self.end_headers()
            self.wfile.write(json.dumps({'error': str(e)}).encode())
    
    def handle_get_region(self):
        try:
            # Get region from EC2 metadata or boto3 session
            session = boto3.Session()
            region = session.region_name or 'us-east-1'
            
            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            self.send_header('Access-Control-Allow-Origin', '*')
            self.end_headers()
            self.wfile.write(json.dumps({'region': region}).encode())
            
        except Exception as e:
            self.send_response(500)
            self.send_header('Content-type', 'application/json')
            self.send_header('Access-Control-Allow-Origin', '*')
            self.end_headers()
            self.wfile.write(json.dumps({'error': str(e)}).encode())

if __name__ == "__main__":
    PORT = 8080
    with socketserver.TCPServer(("", PORT), MyHTTPRequestHandler) as httpd:
        print(f"Server running at http://localhost:{PORT}")
        httpd.serve_forever()

server.py

AWSCloud9SSMAccessRole

Add S3 Read Only Access to Cloud9 Role

permissions policies

AmazonS3ReadOnlyAccess

AWSCloud9SSMAccessRole

Start Server

pip3 install boto3

pip3 install boto3

Test

Create Test Bucket 

test-2398681279

Clean Up

Delete Bucket

Delete bucket

test-2398681279

Delete Environment 

Delete

Verify EC2 Termination

🙏

Thanks

for

Watching

AWS Cloud9 - Hands-On Demo

By Deepak Dubey

AWS Cloud9 - Hands-On Demo

AWS Cloud9 - Hands-On Demo

  • 47