<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Amulya Gupta on Medium]]></title>
        <description><![CDATA[Stories by Amulya Gupta on Medium]]></description>
        <link>https://medium.com/@vamulya.gupta?source=rss-a00de9efc950------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*mXrDRdxfBL-CrCw5EC7R1A.jpeg</url>
            <title>Stories by Amulya Gupta on Medium</title>
            <link>https://medium.com/@vamulya.gupta?source=rss-a00de9efc950------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 20 May 2026 13:47:08 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@vamulya.gupta/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[EC2 Random Name Generator for Shared AWS Environments]]></title>
            <link>https://medium.com/@vamulya.gupta/ec2-random-name-generator-for-shared-aws-environments-072e215c698e?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/072e215c698e</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Fri, 06 Feb 2026 17:15:15 GMT</pubDate>
            <atom:updated>2026-02-06T17:15:15.658Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e6UazdEXYzmKylraU9NkAw.png" /></figure><p>In a shared AWS environment, it is important to clearly identify EC2 instances and their owning teams. This project implements a Python-based EC2 Random Name Generator that creates unique, standardized EC2 instance names to improve visibility and organization across departments.</p><p>The script allows users to specify how many EC2 instance names they need and to provide their department name, which is included as part of the EC2 naming convention. Each name also contains a randomly generated combination of letters and numbers to ensure uniqueness.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I6rKDDCxhMEnRQl9w37yEg.png" /></figure><p>As an advanced feature, the script below restricts usage to approved departments only: Marketing, Accounting, and FinOps. User input is handled in a case-insensitive manner so variations such as “accounting” or “Accounting” are treated the same. The trailing spaces are also taken care of using strip(). If a user enters an unapproved department, the script displays a message indicating that they should try it again.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nlEFArU_SKgA6jmClhNcEA.png" /></figure><p>For added structure and reusability, the logic is encapsulated within a function, which is executed to verify correct behavior.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_72mMuRAtfXONx_VH9VkvQ.png" /></figure><p>The completed code is pushed to GitHub using GitHub desktop and commiting the changed files.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bX9dovDT1iNNj2GghU0Elw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cwsSswGAGD2ms2X1xJgiDQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=072e215c698e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[DynamoDB Movie Releases: Secure EC2 Read-Only Access]]></title>
            <link>https://medium.com/@vamulya.gupta/dynamodb-movie-releases-secure-ec2-read-only-access-880e9e543bca?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/880e9e543bca</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[dynamodb]]></category>
            <category><![CDATA[iam-roles]]></category>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Fri, 16 Jan 2026 21:29:43 GMT</pubDate>
            <atom:updated>2026-01-16T21:29:43.817Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wozp58jtwHazPXKG0GFqjg.png" /></figure><p>Media Inc. implemented a secure AWS solution to manage its “MediaCatalog” DynamoDB table, which stores metadata for its latest movie releases. To ensure data integrity, the company deployed a t3.micro EC2 instance configured with a specific IAM role that follows the principle of least privilege, granting only read-only access. By using the AWS CLI on the instance without long-term access keys, authorized users can efficiently scan the catalog for performance analysis while the system automatically blocks unauthorized write attempts. This architecture validates that the security permissions are correctly configured, protecting the media database from tampering while providing necessary visibility for business decisions.</p><p><strong>SOLUTION</strong></p><p>I created a DynamoDB table and added data to it. Next, I launched an EC2 instance with an IAM policy granting read access to DynamoDB and tested the setup. For every step, I provided instructions for performing the tasks using both the AWS Console and the CLI.</p><p><strong>STEP 1: CREATE DynamoDB TABLE</strong></p><p>Search for DynamoDB-&gt; Create table.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WvBRz-viaBrZdMeGjCZUfQ.png" /></figure><p>Give a name and partition key. The partition key is like the primary key in SQL. It is a unique identifier. The rest of the options to default -&gt; Create table.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FWd_PVXEy4hOgfD_hDwZ-g.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*njyXns72lGpRni-Sf-75pw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9zXiAId6vsujSMCxhS2HwA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h1lqzFvmo0dMX6rGz_ZWZw.png" /></figure><p>In CLI, table is created using create-table and verified using describe-table command.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GBZuPdJorENqgEVNXaUrPw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JIwRK5sOuFfXuaUVYA0n6A.png" /></figure><p><strong>STEP 2 : INSERT DATA INTO THE TABLE</strong></p><p>To populate the table, click on the table -&gt; Explore table items -&gt; Under table -&gt; Create item.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I406O_85WFqFeZ54UugqeA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kByczXbi_5cw1n4pXEzTng.png" /></figure><p>The attributes need to be created. Choose Add new attribute -&gt; give name of attribute and choose datatype. Add relevant values.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*guRkDRT-yujwKGhFK42n0Q.png" /></figure><p>Values can also be added in JSON format once the JSON view button is selected. This makes it easier to make multiple entries by just editing the values.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1nIKcnkupIetdMh5W8c-UA.png" /></figure><p>Similarly, I created 10 entries for the table.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-ClRm9Dt5UAGv5nVk87U8w.png" /></figure><p>In CLI, I created a .json file using nano and wrote all the 10 entries in json format while referencing the table. Once created, I used the batch-write-item command to write all the entries in the file to the table. The put command only adds one entry at a time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6Gqk7r8t0jg-vAd6aOtDsg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6jVgitj49jnJK-B4Q97QTQ.png" /></figure><p><strong>STEP 3: CREATE AN EC2 INSTANCE WITH DYNAMODB READ ACCESS</strong></p><p>Search for EC2 -&gt; Launch instances.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YzdolGkkju8WSMo8bMvOoA.png" /></figure><p>Give a name, choose AMI and instance type. I also created a key-pair (An already existing key-pair can also be used).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jasn6LzS9QwZVU2xiJWLIg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*d1djzDoZ4r92zsPhpV2Bkg.png" /></figure><p>An IAM profile needs to be created to give DynamoDB read access privileges to the EC2 instance.</p><p>Advanced details -&gt; IAM instance profile -&gt; Create new IAM profile.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kmaopxUFe4kmRfAa8yq2hA.png" /></figure><p>Roles -&gt; Create role.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QmFIzrtoOnuxB75evHd9CQ.png" /></figure><p>Select the entity type as AWS service and use case as EC2 -&gt; Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4HXskQQJIlr6Bm7klZdWrQ.png" /></figure><p>Search for DynamoDBReadOnlyAccess -&gt; Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Gf8ra3qHREZQWfEwZAVXQQ.png" /></figure><p>Give a name to the role -&gt; Create.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Nvd5wdwwdAeXuPZa8MFvug.png" /></figure><p>Go back to the EC2 instance and refresh beside the IAM instance profile -&gt; select the new role -&gt; Launch instance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*R3USi63XiYJD_yAo1lL3eA.png" /></figure><p>The EC2 instance on the console can be connected by EC2 connect and on the CLI using SSH.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wv9K2Dkn0t21TVAJ0NjHQw.png" /></figure><p>In CLI, we need to create an instance profile and attach the role to the profile. Create a key-value pair if needed for the EC2 instance, create a security group for the instance and launch an instance using them. I used the default security group and already created key pair.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LqIHx0Z2Mix5b_M5E2eLwA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*stmCYPD7O1pTwd9liE825A.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*axT4TJPL7-KgcRqzHJBhUA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*CVaKfyfKKtwzxltDPnHaPg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*BKyD11efcrad5xk-a_Ajfg.png" /></figure><p><strong>STEP 4: TEST</strong></p><p>Scan command is run to verify entries. Put-item command is run to add an entry to the table which fails proving that the role provided works!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*voYRPd60TnmZv8wJCyS_cw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AQG_hAdDTHyS-sKH-iFz-Q.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=880e9e543bca" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AWS VPC Setup with Joomla Web Application Deployment]]></title>
            <link>https://medium.com/@vamulya.gupta/aws-vpc-setup-with-joomla-web-application-deployment-952952716c84?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/952952716c84</guid>
            <category><![CDATA[joomla]]></category>
            <category><![CDATA[vpc]]></category>
            <category><![CDATA[aws]]></category>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Sun, 11 Jan 2026 20:04:16 GMT</pubDate>
            <atom:updated>2026-01-11T20:04:16.760Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1006/1*t0o0UtDbrS4lMBCA4mM5kw.png" /></figure><p>Adventure Works, a global travel agency specializing in adventure tours and luxury packages, plans to launch a <strong>new Joomla website</strong> to serve as a central hub for all travel services. The site is designed using a <strong>two-tier architecture</strong>, with <strong>EC2 hosting the Joomla web server</strong> and <strong>RDS managing the MySQL database</strong>, ensuring scalability, security, and high availability. Joomla is chosen for its flexibility, ease of use, and rich support for extensions, allowing Adventure Works to efficiently manage content, engage users, and integrate additional features like booking systems and e-commerce.</p><p><strong>STEP 1: Create a VPC</strong></p><p>Search for VPC -&gt; Your VPCs -&gt; Create VPC</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*F6YBWZIoJTpVSNiYgfhFzA.png" /></figure><p>Give a name and CIDR block for the VPC.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*j8DHhWHxaLDRmxMxlNyezw.png" /></figure><p>Keep the rest of the options to default -&gt; Create VPC .</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*oO6AMSvxgEt13MMf8Mo_mg.png" /></figure><p><strong>STEP 2: Create Subnets</strong></p><p>VPC -&gt; Subnets-&gt; Create subnet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*YfxQBg8whW7V6VmMTOpzDQ.png" /></figure><p>Choose newly created VPC, give subnet name, availability zone, subnet CIDR block and Create Subnet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*MGHpbbiZD5di8ftxS7TXpg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*dunxJD-dJHvnbtR_808a8Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*alDVpxG5_TPkSFgt4spyEA.png" /></figure><p>Similarly create one more public and 2 more private subnets. Auto assign public IPs for all subnets.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*WHGImO8MR89WoGoymbtZPw.png" /></figure><p><strong>STEP 3: Create Internet Gateway</strong></p><p>The public subnets need to be attached to an internet gateway.</p><p>VPC -&gt; Internet Gateway-&gt; Create internet gateway.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*7NOEoTNuEvOD2wb_8wmcPQ.png" /></figure><p>Give a name -&gt; Create internet gateway.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*KfIDZNQgn_5pj1MUJRzK7w.png" /></figure><p>Actions -&gt; Attach to a VPC.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*l6w_6kaUSrAZXtgdB7doUw.png" /></figure><p>Choose VPC -&gt; Attach internet gateway.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*3CVAn5cq9Rai6YEOZ0Jc_A.png" /></figure><p><strong>STEP 4: Create Route table</strong></p><p>VPC -&gt; Route tables -&gt; Create route table.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*oeBncHK4ciCe9yxrXwxJSQ.png" /></figure><p>Give a name, choose the newly created VPC -&gt; Create route table.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Tl8XEe-zZSBRLEuNW5mrVA.png" /></figure><p>Select route table -&gt; Edit routes -&gt; Select the public subnets -&gt; Save associations.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*7iL7WgBbi8Sc-WO0v1CbNQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*z23dMOYWC9TzGyIuIyMwyg.png" /></figure><p>Similarly create a private route table and choose the private subnets.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*exRdPQcLjueyKm_McDUoMA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*eQwpx5IQVJLS774hasaHhw.png" /></figure><p>Attach the internet gateway to the public route table.</p><p>VPC -&gt; Route tables-&gt; public route table-&gt; Add route</p><p>Choose destination as 0.0.0.0/0 (anywhere) and target as the internet gateway -&gt; Save changes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*2uf44BAmipZV-kEHhD-xVg.png" /></figure><p><strong>STEP 5: CREATE EC2 INSTANCE FOR JOOMLA</strong></p><p>Search for EC2-&gt; Launch instance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*-i7TAV03yy18gzHbH00IoA.png" /></figure><p>Give a name and choose Ubuntu as the AMI.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*83fAuicq7h04Nk1WqC1SSg.png" /></figure><p>Choose or create a key pair, edit the network settings to include the newly created VPC, subnet and create a new security group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*u7_B0FeuEVRqQR52R6t7qg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*QDlL3HkKQWZc_GZE8xLUTQ.png" /></figure><p>Give a name and add a rule to allow http traffic.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*b59fqxhxbVxahr_fkivraA.png" /></figure><p><strong>STEP 6: CREATE RDS SUBNET, SG and DB</strong></p><p>Aurora and RDS -&gt; Subnet groups -&gt; Create DB subnet group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*wa-Y0nIHRmMj1BKVJuwDlw.png" /></figure><p>Give a name, choose the new VPC and choose the subnets and availability zones. I put it in the private subnets -&gt; Create.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*dryVytZcAcCPuuz4nkG2gw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*vpv_BowoZHa5qCxfGOv9Uw.png" /></figure><p>Create Security group.</p><p>Ec2 -&gt; Security groups -&gt; Create security group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*n4N-QYiYkfSW7UGDgTmDGw.png" /></figure><p>Give a name, VPC, add an inbound rule for mySQL (port 3306) -&gt; Create security group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*n_IxQ01MzWujjG7qRxMlXQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*NkYd7UIw4iLGowTsuqKpog.png" /></figure><p>Create DB</p><p>Aurora and RDS -&gt; Databases -&gt; Create database.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*vCzaqm9JcMHy58MBrtRRWg.png" /></figure><p>Choose Full configuration as Easy create does not allow to choose VPC info. Select MySQL as the Engine type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*imC1o6Ix9Og22fwHyQ6RcA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*5MN81GXBGFuVxYyxDs8bAQ.png" /></figure><p>Give a name for the DB and give a username and password.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*fISHiDtL_B3xwCjJvkb9hg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*O2w-AXhQ9HxmqquYp6lNcQ.png" /></figure><p>Select the newly created VPC, the subnet created for the DB and the security group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*_gQ2HViYf_vpp8wMQwLziA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*WbjPJQKJx2Tv8ZwQMnoObA.png" /></figure><p>Rest of the options to default -&gt; Create database.</p><p>It takes a few minutes for the database to get created.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*du34t6KAiT6MKHQVAbaYbQ.png" /></figure><p><strong>STEP 7: CONFIGURE JOOMLA</strong></p><p>EC2 -&gt; Instances -&gt; Choose the created EC2 instance -&gt; Connect.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*H_fj5tc10SVzemkLAunDLw.png" /></figure><p>Connect using EC2 instance connect.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*lHWldGYpJTCeM-sxOgGsLA.png" /></figure><p>Run the following commands:</p><ol><li><strong>Update Package List:</strong></li></ol><p>sudo apt update</p><p><strong>2.</strong> <strong>Install Apache, PHP, and Required Modules:</strong></p><p>sudo apt install -y apache2 php libapache2-mod-php php-mysql php-xml php-gd unzip</p><p><strong>3.</strong> <strong>Start and Enable Apache:</strong></p><p>sudo systemctl start apache2</p><p>sudo systemctl enable apache2</p><p><strong>4.</strong> <strong>Download Joomla:</strong></p><p>cd /var/www/html</p><p>sudo curl -L -o joomla.zip <a href="https://github.com/joomla/joomla-cms/releases/download/3.9.28/Joomla_3.9.28-Stable-Full_Package.zip">https://github.com/joomla/joomla-cms/releases/download/3.9.28/Joomla_3.9.28-Stable-Full_Package.zip</a></p><p><strong>5.</strong> <strong>Extract Joomla</strong></p><p>sudo unzip joomla.zip</p><p><strong>6.</strong> <strong>Set the correct permissions:</strong></p><p>sudo chown -R www-data:www-data /var/www/html</p><p>sudo chmod -R 755 /var/www/html</p><p><strong>7.</strong> <strong>Remove the default Apache index.html file:</strong></p><p>sudo rm /var/www/html/index.html</p><p><strong>8.</strong> <strong>Edit the Apache Configuration File:</strong></p><p>sudo nano /etc/apache2/mods-enabled/dir.conf</p><p><strong>9.</strong> <strong>Adjust the Directory Index Setting:</strong></p><p>Make sure the `index.php` comes before `index.html`.</p><p>The line should look like this:</p><p>DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm</p><p><strong>10.</strong> <strong>Save and Close the File:</strong></p><p>Save the changes and exit the editor (Ctrl+O, Enter, Ctrl+X).</p><p><strong>11.</strong> <strong>Restart Apache:</strong></p><p>sudo systemctl restart apache2</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*l6yelNAC22EpS8J9i4ejMA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*2MvgEpwXk2oAMr2a1j5gow.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*N8vGukU9eRxE2HPtnKnfxw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*tZcLKpmtR6eEPXk974ftyw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*5pTyhfVn8-isysU7OQtciw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*JB-pzZuPSXy-vRGnPW0tDg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*HiyVfDO6C45DssOOU7oRyw.png" /></figure><p>Copy DB end point and DB name from RDS.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Qs54zhkUkWh2kAOixEEmcg.png" /></figure><p>Get the public IP of the EC2 instance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*fphKo0sOLysSu4iHMqq2Ug.png" /></figure><p>Complete the Joomla configuration by giving the name, email, username, password -&gt; Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*DWAQxKUQeVa4N2Ie4VBbdA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/596/1*e7UKUmBVGp1OY1dADPSqXQ.png" /></figure><p>Give the Host Name as RDS endpoint, username and password -&gt; Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*O4HagIvDkIYJTksfYJuT5Q.png" /></figure><p>It asks you to delete a particular file. Go to the EC2 instance and search for the file within /var/www/html/installation and delete the file.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*eQABYigi7mvfX5laM_P4GQ.png" /></figure><p>Once done we can proceed to the next page -&gt; Install.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*KWN6fT97iQGt0ht0ayWQ0w.png" /></figure><p>After installation, refresh the page and we should be able to the Joomla login page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*x8dixJwuTTyNnre1cAH30Q.png" /></figure><p>Test if it works with the credentials created.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*5Gm2syTvlPqfgykk0aU-qQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*DhK6fRUxkgUnZjyfhvWI-A.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=952952716c84" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Creating Highly Available Web Application using ASG]]></title>
            <link>https://medium.com/@vamulya.gupta/creating-highly-available-web-application-using-asg-3a7263956163?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/3a7263956163</guid>
            <category><![CDATA[asg]]></category>
            <category><![CDATA[cloudformation]]></category>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Sun, 04 Jan 2026 16:10:16 GMT</pubDate>
            <atom:updated>2026-01-04T16:10:16.447Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n6p8CAMLRai1DErD68nKlA.png" /></figure><p><strong>USE CASE</strong></p><p>Aurora Digital, a growing online retailer specializing in luxury home goods, aimed to migrate its digital operations to AWS to improve scalability, reliability, security, and cost-efficiency. To address the challenges of increasing traffic during peak sales events and to ensure uninterrupted service, a cloud-based infrastructure was designed using <strong>AWS CloudFormation</strong>. The solution includes a <strong>VPC</strong> with three public subnets across different availability zones, an <strong>Auto Scaling Group</strong> of t3.micro instances with Apache installed and a custom web page, and an <strong>Application Load Balancer</strong> to distribute traffic evenly. Security is enforced through <strong>two security groups</strong>: one for the ALB allowing inbound HTTP traffic from anywhere, and one for the web servers restricting access only to the ALB, preventing direct access via public IPs. CloudFormation automates the provisioning of all these resources, ensuring consistency, repeatability, and version control, while enabling Aurora Digital to scale resources automatically, maintain high uptime, secure customer data, and optimize operational costs. The environment allows users to access the website through the ALB DNS, verifying a fully functional, secure, and highly available cloud deployment.</p><p><strong>STEPS</strong></p><p><strong>STEP 1: Create the template file.</strong></p><p>For this task, I utilized VS Code, and the script is provided below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JfAmKTtyyUwTe02iG5KQ6Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SC6U9ay2SNvkywbrwdnSog.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/954/1*7mOj9piJFtsrO0FwGy-9IQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/962/1*UrwbHX6-_dhqicRn_nIOrA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2S5w2efb-tK54YYSfVNw9Q.png" /></figure><p>This first creates a VPC with the CIDR block 10.10.0.0/16 and enables DNS support and hostnames for instances. Within the VPC, three public subnets are created, each in a different availability zone (us-east-1a, 1b, and 1c), and configured to automatically assign public IPs to instances. An Internet Gateway is attached to the VPC, and a route table is created with a default route to the Internet Gateway, which is associated with all three public subnets to ensure internet connectivity. Two security groups are defined: one for the Application Load Balancer (ALB) that allows inbound HTTP traffic from anywhere, and one for the web servers that only allows HTTP traffic from the ALB, preventing direct access to EC2 instances. An internet-facing ALB is deployed across all public subnets with a listener on port 80, forwarding traffic to a target group that monitors instance health via HTTP. The template defines a Launch Template for EC2 instances that specifies t2.micro instances, the latest Amazon Linux 2 AMI, attaches the web server security group, and runs user data to install and start Apache with a basic web page. Finally, an Auto Scaling Group is created across the three public subnets using the Launch Template, with a minimum of 2 and a maximum of 5 instances, automatically registering instances with the ALB target group and performing health checks to maintain high availability. The template outputs the DNS name of the ALB so we can access the website via a browser.</p><p><strong>STEP 2: Create a stack in CloudFormation.</strong></p><p>Search for Cloud Formation in the AWS console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*ScEoztG_msEbbjij6RCyIw.png" /></figure><p>Click on create stack -&gt; With new resources.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*XFrbsRXtq-9rQKejxepTWQ.png" /></figure><p>Upload the created YAML file from the previous step. The template can be provided in either YAML or JSON format.</p><p>Upload a template file -&gt; Choose file -&gt; Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*9vJZuMLYVU8d20FYHrqEDg.png" /></figure><p>Give the stack a name and click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*7MBU36RFYbw1DCzTqrNJHQ.png" /></figure><p>Leave the remaining options as default and click Submit at the end.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*gmUlSaLcJNmTk1LWokllng.png" /></figure><p>Once deployed it can be verified using the URL in the Outputs section.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3a7263956163" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Automating EC2 Deployment with AWS CloudFormation]]></title>
            <link>https://medium.com/@vamulya.gupta/automating-ec2-deployment-with-aws-cloudformation-8988da6d2213?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/8988da6d2213</guid>
            <category><![CDATA[cloudformation]]></category>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Sun, 04 Jan 2026 15:04:10 GMT</pubDate>
            <atom:updated>2026-01-04T15:04:10.944Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xd6EJwSjWQJ5nbNygfSZUA.png" /></figure><p><strong>Summary:</strong><br> Aurora Digital, a growing online retailer of luxury home goods, is transitioning its digital operations to AWS to handle increasing traffic, especially during major sales events, while maintaining performance, security, and cost-efficiency. The project focuses on implementing a scalable, reliable, and secure cloud infrastructure that can automatically adjust resources, reduce downtime, protect customer data, and optimize operational costs.</p><p>AWS CloudFormation is chosen to automate infrastructure deployment, ensure environment consistency, enable version control, and allow template reusability for faster, error-free deployments.</p><p><strong>Key Requirements:</strong></p><ul><li>Deploy an EC2 instance with an Apache Webserver using CloudFormation.</li><li>Use User Data to install Apache automatically.</li><li>Configure a Security Group with the necessary permissions.</li></ul><p><strong>STEP 1: Create the template file.</strong></p><p>For this task, I utilized VS Code, and the script is provided below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_03aPYnWIf4ILugtgo9TAw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/702/1*gZvoQF-zuLf4fFtN5JBPLg.png" /></figure><p>This script uses a parameter to select the VPC, which will be prompted when creating the CloudFormation stack. Alternatively, a VPC can be created directly using parameters defined in the resources section. The script provisions an EC2 instance with User Data to install Apache and sets up a security group that allows HTTP traffic.</p><p>In case the AMI id is hardcoded, it only works for a specific zone and fails for the rest. Hence, I used “{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}” to get the latest AMI ID from AWS SSM Parameter Store (provided by default) at stack creation, ensuring your EC2 instance always uses the most up-to-date image without hardcoding the AMI.</p><p>The outputs section specifies the values that will be returned once the stack is successfully deployed.</p><p><strong>STEP 2: Create a stack in CloudFormation.</strong></p><p>Search for Cloud Formation in the AWS console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*IH-5KDSb1pn6WednMwMOJw.png" /></figure><p>Click on create stack -&gt; With new resources.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*EaBfwUG3JatOapn7znGgPQ.png" /></figure><p>Upload the created YAML file from the previous step. The template can be provided in either YAML or JSON format.</p><p>Upload a template file -&gt; Choose file -&gt; Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*1lAsaVV9_HzZ4e1yUb7-zQ.png" /></figure><p>Give the stack a name and choose the VPC (VPC was in the parameters of the template).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Be1iNAyArN8evnGQy6vFPA.png" /></figure><p>Leave the remaining options as default and click Submit at the end.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*AEUOKIkRNpFdm5RF28UgWA.png" /></figure><p><strong>STEP 3: Testing the stack created.</strong></p><p>Once the stack is created, it takes a few minutes to create it. The progress can be seen in the Events tab.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*l1xDuF0X3YQDpMsnL35D1A.png" /></figure><p>In the template script, I specified outputs for the Instance ID and public IP, and simply appended ‘http’ to form the URL.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*HBD8GmKGgvgCPWuX4Q4Bkw.png" /></figure><p>Once the URL is clicked, it works as expected.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*usY-GF-F8GGh-lDISPnb7A.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8988da6d2213" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Designing a Highly Available Web Architecture on AWS Using VPC, ALB, and Auto Scaling]]></title>
            <link>https://medium.com/@vamulya.gupta/designing-a-highly-available-web-architecture-on-aws-using-vpc-alb-and-auto-scaling-f7123d82fb7d?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/f7123d82fb7d</guid>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Wed, 24 Dec 2025 20:56:13 GMT</pubDate>
            <atom:updated>2025-12-24T20:56:13.941Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-zV4E7O_RDoSBYfG5shH5w.png" /></figure><p>After successfully testing a server on EC2, Level-Up Bank plans to migrate its network to AWS to improve scalability, reliability, and security. The bank creates a custom VPC (10.10.0.0/16) with three public subnets spread across multiple Availability Zones to ensure high availability. An Auto Scaling Group of t2.micro EC2 instances with Apache installed is deployed across these subnets, automatically adjusting capacity between 2 and 5 instances based on demand. An Application Load Balancer distributes incoming traffic to the instances, secured by dedicated security groups that control internet access and allow traffic only through the load balancer. This architecture enables the bank to host web applications efficiently while benefiting from AWS’s elasticity and cost-effective, pay-as-you-go model.</p><p><strong>STEPS</strong></p><p><strong>STEP1 : CREATE A VPC</strong></p><p>Search for VPC -&gt; Click on Create VPC</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Ny0GwdLpk8Oen52IBilGZQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/330/1*CG6O7ZbQX1C-676VPQ4VqA.png" /></figure><p>Give it a name and the IPv4 CIDR, leave the rest to default and click on Create VPC.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*oro1nHcGv81tHkvySuqo4Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*0R_817um7_V5sSWdfDyjpQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*0kLAZVNXvu8PgUbEQe01bw.png" /></figure><p><strong>STEP 2: CREATE AN INTERNET GATEWAY</strong></p><p>Search for Internet Gateways in VPC -&gt; Create Internet Gateway</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/322/1*JdmmII3aVFgUrZX6jwKybA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/470/1*PHhqclWssgjTuScQLTEIhQ.png" /></figure><p>Give a name and click Create internet gateway.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*mw2h4FXYLydL7nA-zOvnrA.png" /></figure><p>Click on Attach to a VPC -&gt; select the VPC created -&gt; Attach internet gateway button</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*GA8awPxpvvxRHf0mcFf3Hg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*58myCXKWKCYGvp2U_ZFEJg.png" /></figure><p><strong>STEP 3: CREATE PUBLIC SUBNETS</strong></p><p>Search for Subnets -&gt; Create subnet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/298/1*_JoXUJTRVVol_RXhCKv3-w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*yH5FmZR12XfQvK2ANz8geQ.png" /></figure><p>Select the created VPC, give a name for the subnet, select the Availability Zone and give a subnet CIDR block.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*pzyKGhU40trWluyCUADE9Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*HtFWJpzWteDCKkZ7xUftow.png" /></figure><p>Leave the rest to default and click on Create subnet.</p><p>Similarly create 2 more subnets in different availability zones.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*LmnxYWQoXINw4ZlLHt16LQ.png" /></figure><p><strong>STEP 4: CREATE ROUTE TABLES</strong></p><p>Search for Route tables and click Create route table.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*qxcJ_VrzxjICobE1rKI54Q.png" /></figure><p>Give name and select created VPC -&gt; Create route table button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*GxX2uSvT3U2tD2ZguN4S7w.png" /></figure><p>Once created, click edit routes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*UEMDjirCzKodhAJCVLDq2w.png" /></figure><p>Add a route from created Internet Gateway to the internet (0.0.0.0/0) -&gt; Save changes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*KwXkORDPi_ptG4FXM5iJAw.png" /></figure><p>Go to Subnet associations -&gt; Edit subnet associations button -&gt; select created public subnets -&gt; Save associations button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*0JDlAFQZ5RgwoYnLR2jH3A.png" /></figure><p>Edit subnet settings -&gt; enable auto-assign public IPv4 address -&gt; Save changes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*T2Tw0aYMxJgaT6SlMb1IvQ.png" /></figure><p>Do this for all the subnets.</p><p><strong>STEP 5: CREATE LAUNCH TEMPLATE</strong></p><p>Search for EC2 -&gt; Launch Templates -&gt; Create launch template.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*rHkRFuUMQEj5AT9TIioBVA.png" /></figure><p>Give a name and description.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*eBpsHV8ZX9REEo7tJVClaA.png" /></figure><p>For launch template contents, a newly created AMI can also be used. Here I used the Linux AMI.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/732/1*VjKoUN-CjwaKHferkUXk4Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/684/1*to1CvGJ_CF7GHAm8pAly5g.png" /></figure><p>Choose instance type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*_RauT-CVRPDDPMUnAv-Kmg.png" /></figure><p>In Network settings, select the subnet and Create security group, give a name and select the created, add a Inbound Security Group hot HTTP port to include traffic from the internet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*wz1QBcW1KjG8zRQMNEnHtA.png" /></figure><p>Go to the advanced section -&gt; User data. Add script as follows and click Create launch template.</p><p>#!/bin/bash</p><p>yum update -y</p><p>yum install -y httpd</p><p>systemctl start httpd</p><p>systemctl enable httpd</p><p>echo “ALB Health Check OK” &gt; /var/www/html/index.html</p><p><strong>STEP 6: CREATE AUTO SCALING GROUP</strong></p><p>Search for Auto Scaling Groups under EC2 -&gt; Create Auto Scaling group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*4-de35KiYnC6SA1xgRmKyg.png" /></figure><p>Give a name, choose the created Launch template and click next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*krmZECxMX6PPJHJexdbVUA.png" /></figure><p>Choose the created VPC in the network, choose the Availability Zones and click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*_6usJXlAdi_GVsBajkaOpA.png" /></figure><p>Here, we are going to create a new load balancer. Choose option Attach to a new load balancer, application load balancer. It gives a name by default but can be changed as per choice. The scheme should be internet facing.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*xZILIuWmDAINBZT4qVGypg.png" /></figure><p>Choose the availability zones and create a target group and give it a name.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*RoA4WR5_WWDDODmB4Vp9kQ.png" /></figure><p>Choose turn on Elastic Load Balancing health checks and click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*U0YCc_ZB2TF5S9Lblplwbg.png" /></figure><p>We need a minimum of 2 instances and a maximum of 5, so changed the desired capacity to 2 and scaling min and max accordingly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Y4YHRMREWeRN_2ttRq1BUA.png" /></figure><p>Leave the rest of the options to default and click next.Go to final page and review and click on create auto scaling group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*_kWJHP8NZZu74XJCnHeNkg.png" /></figure><p>The security group of the load balancer is that of the ec2 instance and does not allow external traffic. So, we need to create a new security group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*164zNeNQAZOEkCUAZct_aA.png" /></figure><p>Give a name, select the VPC and add an inbound rule to allow http from anywhere.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*0RhBEXkq2a6JxN-iq721yw.png" /></figure><p>Now, edit the load balancer security group to add the newly created security group.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*y4RwMXQ0dpgvDlYT5qd5DQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*gYhQ1nPBarLgHjLcablVeQ.png" /></figure><p>Once this is done, the EC2 instances are created but it does not allow to access the EC2 instances and shows the following :</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/752/1*M1jYPi66YBz59r7keOA9Yg.png" /></figure><p>To fix this, an IAM role needs to be created with AmazonSSMManagedInstanceCore.</p><p>Go to IAM -&gt; Roles -&gt; Create Role.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Lk4Y6cvvbepxSPNNsYUthw.png" /></figure><p>Choose entity type as AWS service and Use case as EC2 -&gt; Click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*CwkSowfrxd5znzWmPAvzSw.png" /></figure><p>Search for AmazonSSMManagedInstanceCore in permissions -&gt; Click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*LtfdfWLLP1R4AVU-2eUrQQ.png" /></figure><p>Give a name -&gt; Click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*L2Jr0yQcsTKLndpfUqpVLg.png" /></figure><p>Now this role needs to be attached to the Launch Templates to make it take effect, and the new version of the Launch Template needs to be included in the Auto Scaling group.</p><p>Go to Lauch Template -&gt; Select the template -&gt; Actions -&gt; Modify Template.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*RaWOl4EHMy6HpXYGQcT6vg.png" /></figure><p>Advanced details -&gt; IAM instance profile -&gt; choose the created SSM profile -&gt; Create template button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*kqa3kmKtCxRWczUlk6ZoVQ.png" /></figure><p>Next, the auto-scaling group needs to be updated to reflect the new verion of the launch template.</p><p>Auto Scaling Groups -&gt; Select the group -&gt; Actions -&gt; Edit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*nDEdVAn5m_KYJcepCjltJA.png" /></figure><p>Under Launch templates, in version, choose latest and click update.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*BsFtw1HrvxPxmn2c_OytLQ.png" /></figure><p>Once done, the EC2 instance should be accessible.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*kozOnFjD8XWQBwtnkEhtWw.png" /></figure><p>To check the DNS, go to Load Balancers, choose our application load balancer and copy the DNS info.</p><p>To test it open it on the browser.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/410/1*V77uYyy_2QqjPKy7FOdBYw.png" /></figure><p><strong>NOTES:</strong></p><p>For any reason if the EC2 instances are not healthy, after making the required changes to fix it, the EC2 instances need to be terminated and within a few minutes the Auto scaling group will deploy new ones.</p><p><strong>USE CASE : AUTOMATIC SCALING</strong></p><p>In case we need to deploy new instances when the CPU utilization increases by a certain threshold, we need to have automatic scaling.</p><p>Auto Scaling groups -&gt; select the group -&gt; Automatic Scaling -&gt; Create dynamic scaling policy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*lxRMUZ2q3Noc-x5UDR-HxQ.png" /></figure><p>Choose target tracking scaling and provide the metric. Here I want it to scale when the CPU utilization goes beyond 50% utilized and provided the same metric and click create.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/792/1*M7zFt44E0eS4ft4Odx1PXA.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f7123d82fb7d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[LAUCHING AN EC2 INSTANCE VIA CLI]]></title>
            <link>https://medium.com/@vamulya.gupta/lauching-an-ec2-instance-via-cli-201cfa0720b9?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/201cfa0720b9</guid>
            <category><![CDATA[aws-ec2]]></category>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Sat, 29 Nov 2025 04:56:34 GMT</pubDate>
            <atom:updated>2025-11-29T04:56:34.705Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*1DJSh8VHEImnx2b0fnuSaQ.png" /></figure><p><strong>OVERVIEW</strong></p><p>The Level-Up Bank is migrating its website and online banking platform to AWS to improve scalability, reliability, and security. It begins by creating a t2.micro EC2 instance and a user-data script that updates packages, installs Apache, and starts the web service. The bank verifies the setup by accessing the instance’s public IP and confirming the Apache default page. Using AWS services like RDS and S3, the bank can securely host databases and files while easily scaling instances up or down. Compared to an on-premises server, AWS reduces costs, enhances security through encryption and access controls, and provides flexibility to deploy new instances and test features quickly. With proper security groups and a public IP, the bank ensures its online services are accessible and reliable, creating a strong foundation for a secure, scalable online banking platform.</p><p><strong>STEPS</strong></p><p><strong>STEP 1:</strong> Get Access Key from AWS Console to use it in AWS CLI</p><p>Top right username -&gt; Security Credentials</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/352/1*nDDnjYiqD3K47hTvSvb8GQ.png" /></figure><p>Click on create access key button and create an access key.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*23Z1yKB6d2e0jGuevksjjA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*c0Myug3MNTNLUN2Vj1ngkg.png" /></figure><p>Copy the Access key and Secret access key as this will be used to connect to AWS CLI.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*G9k6RJqcbSTDjUkd7g7JCw.png" /></figure><p><strong>STEP 2: </strong>Connect to your user via CLI</p><p>Open the editor of your choice and verify that AWS is installed.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*uQxeNJVINLC_ch3mPLDylw.png" /></figure><p>Run AWS configure command and provide necessary details</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*v4sT2PLQvN40YjjmcjJbZw.png" /></figure><p><strong>STEP 3:</strong> CREATE EC2 INSTANCE</p><p>For an EC2 instance, we need security group, subnet, key pair information. In this scenario we also need to create a script which runs when EC2 instance starts.</p><p><strong>Create new key pair using :</strong></p><p><em>aws ec2 create-key-pair \</em></p><p><em>— key-name mykeyweek5\</em></p><p><em>— output text &gt; mykeyweek5.pem</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/1*gZyTnRxdnrvQij-WVuqt5w.png" /></figure><p>Verify if the key pair is created using grep.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/674/1*a6FYQAYXAr7jsio01psgTQ.png" /></figure><p>Create a script to update all packages, installs and starts Apache.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*N-wfMRHbL31TwPeGHFyP4w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/892/1*l3ORwhdEYhNdLtRKFY8hJw.png" /></figure><p>Verify contents of file.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/776/1*Ki3NI4C3SO6THMdSDUEVcQ.png" /></figure><p>To get subnet information, goto AWS Console -&gt; Search for VPC -&gt; Subnets. Copy the Subnet ID.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*dvuXJIwSEuPbsbjY30OyWg.png" /></figure><p>Launch an EC2 instance. We also need to create a Security Group which I forgot so added it later. The name of the EC2 instance is specified in the tag-specifications.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*qivihEz7Jnm7TL3a3oTLrA.png" /></figure><p>Verify the status of EC2 instance using the following:</p><p><em>aws ec2 describe-instances \</em></p><p><em>— query “Reservations[*].Instances[*].{Name:Tags[?Key==’Name’]|[0].Value,ID:InstanceId,State:State.Name,IP:PublicIpAddress}” \</em></p><p><em>— output table</em></p><p>Parameters to be displayed can be changed as per requirements.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*qDGgfStWhmCtoHGTHPpDJg.png" /></figure><p>Check if public IP works as intended. Fails because a Security Group is missing.Can use curl command or directly open the link in a web browser.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*br_OcGD8CJ1GkrjQcV_3dw.png" /></figure><p>Create a security group and allow HTTP and SSH access using the following:</p><p><strong>To create a security group with name MySGTestWeek5:</strong></p><p><em>aws ec2 create-security-group \</em></p><p><em>— group-name MySGTestWeek5 \</em></p><p><em>— description “Allow HTTP and SSH access” \</em></p><p><em>— vpc-id vpc-0ef0c7a809eac71c8</em></p><p><strong>To get the security group ID:</strong></p><p><em>aws ec2 describe-security-groups \</em></p><p><em>— query “SecurityGroups[*].[GroupName,GroupId,VpcId]” \</em></p><p><em>— output table</em></p><p><strong>To allow HTTP access from anywhere:</strong></p><p><em>aws ec2 authorize-security-group-ingress \</em></p><p><em>— group-id sg-0c640014f9f46153f \</em></p><p><em>— protocol tcp \</em></p><p><em>— port 80 \</em></p><p><em>— cidr 0.0.0.0/0</em></p><p><strong>To allow SSH from EC2 IP:</strong></p><p><em>aws ec2 authorize-security-group-ingress \</em></p><p><em>— group-id sg-0c640014f9f46153f \</em></p><p><em>— protocol tcp \</em></p><p><em>— port 22 \</em></p><p><em>— cidr 13.221.127.125/32</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*4EaWOC7qQkgr7SlTcL4TvA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*ILEhhprV3evI24ewxpnHDg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Yt4qOuPWj7QB-DwiUjR6oA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*q38CFuHpP9L4POdkW1wvfw.png" /></figure><p>Attach the newly created Security Group to the existing EC2 instance.</p><p>Before attaching the new Security Group, check the existing Security groups attached to the instance using:</p><p><em>aws ec2 describe-instances \</em></p><p><em>— instance-ids i-00cd78941a81b9b50 \</em></p><p><em>— query “Reservations[*].Instances[*].SecurityGroups[*].GroupId” \</em></p><p><em>— output text</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Vsj6VeX-43S7P1eDf9yp5Q.png" /></figure><p>Now modify the instance to add the new Security Group using:</p><p><em>aws ec2 modify-instance-attribute \</em></p><p><em>— instance-id i-00cd78941a81b9b50 \</em></p><p><em>— groups sg-0a336849ecab7cb5c sg-0c640014f9f46153f</em></p><p>(include the old and the new security group ids)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*lPJ8qLUt2cth6ippqyBv-g.png" /></figure><p>Verify if the new security group is added.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*yxF6AQ1g-WlrPDfU-hxWLw.png" /></figure><p><strong>STEP 4:</strong> Verify if instance has webserver</p><p>Run curl on the public IP of the instance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/842/1*TYdV7_-kLsaPuxV8sUzOGQ.png" /></figure><p>It can also be verified using the web browser.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*pj7GxXacwJ2MnTjAg19blA.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=201cfa0720b9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CONNECTING TO AN EXISTING EC2 LINUX INSTANCE VIA SSM]]></title>
            <link>https://medium.com/@vamulya.gupta/connecting-to-an-existing-ec2-linux-instance-via-ssm-4da7987da4a7?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/4da7987da4a7</guid>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Fri, 24 Oct 2025 18:35:40 GMT</pubDate>
            <atom:updated>2025-10-24T18:35:40.051Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*QinV-FFfc23MV77OPO4XXQ.png" /></figure><p><strong>OVERVIEW</strong></p><p>Level Up Corporation operates multiple Linux EC2 instances but struggles with efficient remote management due to the lack of a secure and direct administration method. To address this, the company plans to implement secure remote access tools — SSH for Linux to enable encrypted, reliable management from any location. This improvement will enhance productivity, reduce downtime, strengthen data security, lower operational costs, simplify troubleshooting, and support future scaling as infrastructure grows.</p><p><strong>OBJECTIVES</strong></p><p>For the Linux environment, the EC2 instance will be configured to use AWS Systems Manager (SSM) instead of SSH. This requires enabling the SSM Agent and appropriate IAM permissions, allowing secure remote access without open SSH ports, thereby adding an extra layer of security.</p><p><strong>PREREQUISTES</strong></p><p>· Have a Linux EC2 instance already set up.</p><p><strong>STEPS</strong></p><p><strong>STEP 1. Create IAM role for SSM</strong></p><p>· Search for IAM in the AWS console -&gt; Click Create role</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*e4sh5FSNxR-yZxAbAmAhzQ.png" /></figure><p>· Choose AWS service as Trusted entity type and Use case as EC2 -&gt; Click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*F7j2c_rirJLkZBBORwDu1Q.png" /></figure><p>· Search for <strong>AmazonSSMManagedInstanceCore</strong> in the Permissions policies -&gt; Click Next.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*-2_MBymwqUtGvaplVPrfBQ.png" /></figure><p>· Give a name to the IAM role -&gt; Create Role.</p><p><strong>STEP 2: Attach IAM role to created EC2 instance.</strong></p><p>· Search for EC2 in the AWS console and go to the already created Linux EC2 instance.</p><p>· Click Actions -&gt; Security -&gt; Modify IAM role.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Ih85uOVzOs6mpz8hHt6egg.png" /></figure><p>· Give the name of the IAM role created in the previous step -&gt; Update IAM role.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*1yOYZ5Df6leL9g0dWAIpBQ.png" /></figure><p><strong>STEP 3: Connect to the EC2 instance via SSM.</strong></p><p>· Go to the instance -&gt; Connect -&gt; Session Manager tab.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*GJoAsaRJvPQYB5CKe7zu2A.png" /></figure><p>· This showed that the SSM Agent is not online.</p><p>· Checked the status of SSM agent via terminal using : sudo systemctl status amazon-ssm-agent and this showed running.</p><p>· Checked the connectivity to the internet and that seemed fine as well.</p><p>· Restarted the SSM agent using sudo systemctl restart amazon-ssm-agent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*U3r06HwDnpaxiZUR63gIdw.png" /></figure><p>· Check in the Connect section if Session Manager and now it shows the Connect option.</p><p>· Click Connect</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*EDJEKpPsHTSXo2aC8jtigw.png" /></figure><p>· This opens up into an SSM session!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*_I3r6rMXCCJPifrYgSnfsw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4da7987da4a7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ACCESSING WINDOWS EC2 INSTANCE VIA RDP]]></title>
            <link>https://medium.com/@vamulya.gupta/accessing-windows-ec2-instance-via-rdp-d22c8c9ffc6a?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/d22c8c9ffc6a</guid>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Fri, 24 Oct 2025 17:18:33 GMT</pubDate>
            <atom:updated>2025-10-24T17:18:33.519Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>ACCESSING WINDOWS EC2 INSTANCE VIA RDP</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*ProGqVhJPC6t0VH70B5E2A.png" /></figure><p><strong>OVERVIEW</strong></p><p>Level Up Corporation currently operates multiple Linux and Windows EC2 instances on AWS but struggles with efficient remote management due to the lack of a secure and reliable access method. To resolve this, the company plans to implement RDP for Windows servers, enabling the IT team to securely connect and administer systems from any location. This solution will significantly improve operational efficiency, reduce downtime, enhance data security through encrypted communication, and support future scalability as the infrastructure grows. By streamlining remote administration and troubleshooting, Level Up can boost productivity, lower operational costs, and ensure more resilient and secure server management.</p><p><strong>STEPS</strong></p><p><strong>STEP 1: Launch EC2 instance</strong>.</p><p>o Login to your AWS account and search for EC2.</p><p>o Click on Launch an instance button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*O9VZuohVoew4K9scjucbrQ.png" /></figure><p>o Give a name to the instance and choose Windows under Application and OS images.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*LjbI-jhEcvcnCWyvGV570w.png" /></figure><p>o Create a key pair by providing the key-pair name and the rest can be used as default. The private key gets downloaded onto your local system.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*YrGQV9QNMlTMS9XECWDqNA.png" /></figure><p>o Click on Launch instance button</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/582/1*0U1hKO30kr5buhm-ta1RiA.png" /></figure><p><strong>STEP 2. Verify Security Group</strong></p><p>o The instance is now created.</p><p>o On the instance go to Security tab -&gt; Inbound rules.</p><p>o Rule for TCP is created by default, verify it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*S6Uswl4PmF6ncHrOX3ZMNg.png" /></figure><p><strong>STEP 3 : Connect to the instance via RDP</strong></p><p>o On the instance click Connect button -&gt; RDP client tab</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*IfyX-KGcX7YbhiFE4wSkgg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*GrUZg8UgGjOvYFA06h19Jw.png" /></figure><p>o Follow the instructions provided and download the RDP file.</p><p>o We also need to get the password. For that upload the private key file previously downloaded -&gt; Click on Decrypt Password.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Xd818Qor0rckb3BL3PhdEQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*xOWHo9Sv9keyhtUoZmBkqA.png" /></figure><p>o Once the password is generated, it shows up on the screen ready to copy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*qQFcOTuces_gex-YPEWN2g.png" /></figure><p>o On mac, we cannot open RDP files by default.</p><p>o Go to App store and download Windows App</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/606/1*u3WwAVbGOVyf6mphv0u8fw.png" /></figure><p>Open the Windows app -&gt; Connections -&gt; Import from RDP file -&gt; Upload the downloaded RDP file.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*vW9Zq53uz0HSL5NbEIgEQA.png" /></figure><p>o Now the RDP session is ready to use. Click on the 3 dots -&gt; Connect -&gt; Enter password.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/710/1*2a1lGB9cjDHv7eshHbGFrA.png" /></figure><p>o The RDP session opens up!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/740/1*lf7Grzr-dz99GvmMMlLbpQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d22c8c9ffc6a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ACCESSING LINUX EC2 INSTANCE VIA SSH]]></title>
            <link>https://medium.com/@vamulya.gupta/accessing-linux-ec2-instance-via-ssh-c49e9883d813?source=rss-a00de9efc950------2</link>
            <guid isPermaLink="false">https://medium.com/p/c49e9883d813</guid>
            <dc:creator><![CDATA[Amulya Gupta]]></dc:creator>
            <pubDate>Fri, 24 Oct 2025 16:55:32 GMT</pubDate>
            <atom:updated>2025-10-24T16:55:32.169Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*zPqMRCecRfYAc3U0XsOfdA.png" /></figure><p><strong>OVERVIEW</strong></p><p>Level Up Corporation currently operates multiple Linux and Windows EC2 instances on AWS but struggles with efficient remote management due to the lack of a secure and reliable access method. To resolve this, the company plans to implement SSH for Linux servers, enabling the IT team to securely connect and administer systems from any location. This solution will significantly improve operational efficiency, reduce downtime, enhance data security through encrypted communication, and support future scalability as the infrastructure grows. By streamlining remote administration and troubleshooting, Level Up can boost productivity, lower operational costs, and ensure more resilient and secure server management.</p><p><strong>STEPS</strong></p><p><strong>STEP 1: Launch EC2 instance</strong>.</p><p>o Login to your AWS account and search for EC2.</p><p>o Click on Launch an instance button.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*O9VZuohVoew4K9scjucbrQ.png" /></figure><p>o Give a name to the instance and choose Amazon Linux under Application and OS images.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*ingzWT8mIRe_SFyvtCFW9A.png" /></figure><p>o Create a key pair by providing the key-pair name and the rest can be used as default . The private key gets downloaded onto your local system.</p><p>o The test-key gets downloaded on to your local system.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*J1GpAoKQSWap1uz69wtjQQ.png" /></figure><p>o Click on Launch instance button</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*l3KWXSUIOcBGd1t-jCRlgA.png" /></figure><p><strong>STEP 2. Verify Security Group</strong></p><p>o The instance is now created.</p><p>o On the instance go to Security tab -&gt; Inbound rules.</p><p>o A rule for SSH is created by default, verify it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Sd8I3TMIAvYIukRvUmu55A.png" /></figure><p><strong>STEP 3 : Connect to the instance via SSH</strong></p><p>o On the instance click Connect button -&gt; SSH client tab</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*YhQDPXD-vr-H-UCiS7KFgA.png" /></figure><p>o Follow the instructions provided in the terminal.</p><p>o On mac open Terminal and on windows, PowerShell can be used.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*Lun_JwdEqls3p0VctDuw0A.png" /></figure><p>o pwd command shows the current directory you’re in. This is to verify which directly you are currently in and to move to the correct directory where the private key exists.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*4YWCm0TVFn7o7PhYuSgJBw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c49e9883d813" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>