<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dipali Kulshrestha</title>
    <description>The latest articles on DEV Community by Dipali Kulshrestha (@dipalikulshrestha).</description>
    <link>https://dev.to/dipalikulshrestha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg</url>
      <title>DEV Community: Dipali Kulshrestha</title>
      <link>https://dev.to/dipalikulshrestha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dipalikulshrestha"/>
    <language>en</language>
    <item>
      <title>IAM Fundamentals</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Mon, 19 Jan 2026 05:23:56 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/iam-fundamentals-32pa</link>
      <guid>https://dev.to/dipalikulshrestha/iam-fundamentals-32pa</guid>
      <description>&lt;h2&gt;
  
  
  3. IAM Fundamentals (Core Concepts)
&lt;/h2&gt;

&lt;p&gt;IAM Components&lt;br&gt;
Component         Purpose&lt;br&gt;
User              Human or application identity&lt;br&gt;
Group             Collection of users&lt;br&gt;
Role              Assumed identity with temporary credentials&lt;br&gt;
Policy            Permissions document (JSON)&lt;/p&gt;

&lt;p&gt;Authentication vs Authorization&lt;/p&gt;

&lt;p&gt;Authentication: Who are you?&lt;br&gt;
Authorization: What are you allowed to do?&lt;/p&gt;
&lt;h2&gt;
  
  
  4. IAM Policies – Deep Dive
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Policy Types&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Managed Policies&lt;/li&gt;
&lt;li&gt;Customer Managed Policies&lt;/li&gt;
&lt;li&gt;Inline Policies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Policy Structure (JSON)&lt;/strong&gt;&lt;br&gt;
{&lt;br&gt;
  "Version": "2012-10-17",&lt;br&gt;
  "Statement": [&lt;br&gt;
    {&lt;br&gt;
      "Effect": "Allow",&lt;br&gt;
      "Action": "s3:ListBucket",&lt;br&gt;
      "Resource": "*"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Elements Explained&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Effect: Allow / Deny&lt;/p&gt;

&lt;p&gt;Action: API calls&lt;/p&gt;

&lt;p&gt;Resource: ARN&lt;/p&gt;

&lt;p&gt;Condition (advanced, optional)&lt;/p&gt;

&lt;p&gt;Tip: Explicit Deny always wins.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. IAM Best Practices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Security Best Practices&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Least privilege&lt;/li&gt;
&lt;li&gt;Use roles instead of long-term credentials&lt;/li&gt;
&lt;li&gt;Enable MFA&lt;/li&gt;
&lt;li&gt;Rotate credentials&lt;/li&gt;
&lt;li&gt;Use managed policies where possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What NOT to Do&lt;/p&gt;

&lt;p&gt;❌ Hardcode access keys in code&lt;br&gt;
❌ Use IAM users for EC2/Lambda&lt;br&gt;
❌ Share credentials&lt;/p&gt;
&lt;h2&gt;
  
  
  6. IAM Roles
&lt;/h2&gt;

&lt;p&gt;What is an IAM Role?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An identity assumed temporarily&lt;/li&gt;
&lt;li&gt;Uses STS (Security Token Service)&lt;/li&gt;
&lt;li&gt;No permanent credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common Role Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2 accessing S3&lt;/li&gt;
&lt;li&gt;Lambda accessing DynamoDB&lt;/li&gt;
&lt;li&gt;Cross-account access&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Trust Policy vs Permission Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Trust policy: Who can assume the role&lt;/p&gt;

&lt;p&gt;Permission policy: What the role can do&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Labs (Step-by-Step)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lab: Create IAM Users and Groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a developer IAM user with controlled permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Login as root / admin&lt;/li&gt;
&lt;li&gt;Open IAM Console&lt;/li&gt;
&lt;li&gt;Create Group: Developers&lt;/li&gt;
&lt;li&gt;Attach policy: AmazonS3ReadOnlyAccess&lt;/li&gt;
&lt;li&gt;Create IAM User with Access type: Console + Programmatic&lt;/li&gt;
&lt;li&gt;Add user to Developers group&lt;/li&gt;
&lt;li&gt;Enable MFA for the user&lt;/li&gt;
&lt;li&gt;Test login&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User can list S3 buckets&lt;/li&gt;
&lt;li&gt;User cannot create EC2 instances&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lab: Create and Test IAM Role for EC2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Allow EC2 instance to access S3 without access keys.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create IAM Role&lt;/li&gt;
&lt;li&gt;Trusted entity: EC2&lt;/li&gt;
&lt;li&gt;Attach policy: AmazonS3ReadOnlyAccess&lt;/li&gt;
&lt;li&gt;Launch EC2 instance&lt;/li&gt;
&lt;li&gt;Attach role during launch&lt;/li&gt;
&lt;li&gt;SSH into EC2&lt;/li&gt;
&lt;li&gt;Run: aws s3 ls&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Expected Result&lt;br&gt;
S3 list works without configuring credentials&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rajat-aroramail.medium.com/aws-cloud-secure-access-to-s3-buckets-from-ec2-using-iam-roles-800875ce2890" rel="noopener noreferrer"&gt;Detailed steps&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  9. Common Developer IAM Scenarios
&lt;/h2&gt;

&lt;p&gt;Lambda → DynamoDB&lt;/p&gt;

&lt;p&gt;ECS task → SQS&lt;/p&gt;

&lt;p&gt;CI/CD pipeline → CloudFormation&lt;/p&gt;

&lt;p&gt;Cross-account role for deployment&lt;/p&gt;

&lt;p&gt;Tie these back to roles, not users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next: Database&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Next: Serverless&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dipalikulshrestha/messaging-event-driven-design-i8" class="crayons-story__hidden-navigation-link"&gt;Messaging &amp;amp; Event Driven design&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dipalikulshrestha" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" alt="dipalikulshrestha profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dipalikulshrestha" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dipali Kulshrestha
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dipali Kulshrestha
                
              
              &lt;div id="story-author-preview-content-3179007" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dipalikulshrestha" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dipali Kulshrestha&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/messaging-event-driven-design-i8" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 17&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dipalikulshrestha/messaging-event-driven-design-i8" id="article-link-3179007"&gt;
          Messaging &amp;amp; Event Driven design
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/backend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;backend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/microservices"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;microservices&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/systemdesign"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;systemdesign&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/messaging-event-driven-design-i8" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dipalikulshrestha/messaging-event-driven-design-i8#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>aws</category>
      <category>beginners</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CI/CD for AWS Applications</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 17 Jan 2026 18:33:13 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/cicd-for-aws-applications-2c23</link>
      <guid>https://dev.to/dipalikulshrestha/cicd-for-aws-applications-2c23</guid>
      <description>&lt;p&gt;Continuous Integration and Continuous Deployment (CI/CD) enable developers to automate build, test, and deployment workflows. AWS provides fully managed CI/CD services that integrate natively with application and infrastructure services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why CI/CD?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster and reliable deployments&lt;/li&gt;
&lt;li&gt;Reduced human error&lt;/li&gt;
&lt;li&gt;Repeatable, auditable release process&lt;/li&gt;
&lt;li&gt;Enables DevOps and agile delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AWS CI/CD Services&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xrmdiqm08nmsnwxmxju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xrmdiqm08nmsnwxmxju.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CodeCommit&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managed Git-based source control&lt;/li&gt;
&lt;li&gt;Integrates with IAM for authentication&lt;/li&gt;
&lt;li&gt;Alternative: GitHub / Bitbucket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AWS CodeBuild&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed build service&lt;/li&gt;
&lt;li&gt;Uses buildspec.yml&lt;/li&gt;
&lt;li&gt;Supports multiple runtimes (Java, Python, Node.js)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AWS CodePipeline&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Orchestrates CI/CD stages&lt;/li&gt;
&lt;li&gt;Integrates with CodeCommit, CodeBuild, Lambda, CloudFormation&lt;/li&gt;
&lt;li&gt;Event-driven pipeline execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AWS CodeDeploy&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automates deployments to EC2, Lambda, and ECS&lt;/li&gt;
&lt;li&gt;Supports blue/green and rolling deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lab: Create CICD pipeline to deploy serverless S3 hosted webpage
&lt;/h2&gt;

&lt;p&gt;Step-1: Create Pipeline =&amp;gt; Build Custom Pipeline&lt;br&gt;
Step-2: Source provider =&amp;gt; GitHub (Via GitHub App)&lt;br&gt;
Step-3: Connect to GitHub and choose connection =&amp;gt; select repository ==&amp;gt; Select Branch (main)&lt;br&gt;
Step-4: Skip Build Stage&lt;br&gt;
Step-5: Skip Test Stage&lt;br&gt;
Step-6: Deploy =&amp;gt; S3 =&amp;gt; Choose Bucket =&amp;gt; Check: Extract file before deploy&lt;br&gt;
Step-7: Create Pipeline&lt;/p&gt;

&lt;p&gt;Validate&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy complete on Code Pipepile UI&lt;/li&gt;
&lt;li&gt;Change and commit index.html on GitHub&lt;/li&gt;
&lt;li&gt;Notice auto-trigger of CodePipeline&lt;/li&gt;
&lt;li&gt;Revised webpage now avaialble&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dipalikulshrestha/ai-services-for-developers-51hm" class="crayons-story__hidden-navigation-link"&gt;AI Services for Developers&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dipalikulshrestha" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" alt="dipalikulshrestha profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dipalikulshrestha" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dipali Kulshrestha
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dipali Kulshrestha
                
              
              &lt;div id="story-author-preview-content-3171527" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dipalikulshrestha" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dipali Kulshrestha&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/ai-services-for-developers-51hm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 14&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dipalikulshrestha/ai-services-for-developers-51hm" id="article-link-3171527"&gt;
          AI Services for Developers
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/dipalikulshrestha/ai-services-for-developers-51hm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>automation</category>
      <category>aws</category>
      <category>cicd</category>
      <category>devops</category>
    </item>
    <item>
      <title>Messaging &amp; Event Driven design</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 17 Jan 2026 15:20:23 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/messaging-event-driven-design-i8</link>
      <guid>https://dev.to/dipalikulshrestha/messaging-event-driven-design-i8</guid>
      <description>&lt;p&gt;Event-driven architecture (EDA) is a modern architecture pattern built from small, decoupled services that publish, consume, or route events.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxybuset989490yevggb9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxybuset989490yevggb9.webp" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An event represents a change in state, or an update. For example: an item placed in a shopping cart, a file uploaded to a storage system, or an order becoming ready to ship. Events can either carry the state (such as the item name, price, or quantity in an order) or simply contain identifiers (for example, “order #8942 was shipped”) needed to look up related information.&lt;/p&gt;

&lt;p&gt;Unlike traditional request-driven models, EDA promotes loose coupling between producer and consumer services. This makes it easier to scale, update, and independently deploy separate components of a system.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Messaging Services
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Amazon SQS (Simple Queue Service)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqxrk4artqn0c1fmo89o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqxrk4artqn0c1fmo89o.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed message queue&lt;/li&gt;
&lt;li&gt;Used for decoupling application components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Two types:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard Queue: At-least-once delivery, best-effort ordering&lt;/li&gt;
&lt;li&gt;FIFO Queue: Exactly-once processing, strict ordering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Amazon SNS (Simple Notification Service)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsgwqgranrkc3gvlcgyn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsgwqgranrkc3gvlcgyn.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pub/Sub messaging service&lt;/li&gt;
&lt;li&gt;One message → multiple subscribers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common subscribers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQS&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;Email / HTTP endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SNS vs SQS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SNS pushes messages&lt;/li&gt;
&lt;li&gt;SQS polls messages&lt;/li&gt;
&lt;li&gt;SNS fan-out pattern uses SNS → multiple SQS queues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Amazon EventBridge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famulweb292r6c96gd4z8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Famulweb292r6c96gd4z8.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon EventBridge is a serverless event bus that facilitates event-driven architectures. It simplifies the process of connecting different services and applications by enabling them to communicate through events. EventBridge routes events from sources such as AWS services, custom applications, and third-party software, delivering them to targets like AWS Lambda, Amazon SNS, Amazon SQS, and more.&lt;/p&gt;

&lt;p&gt;EventBridge plays a crucial role in building de-coupled systems, where different components communicate through events. This approach enhances scalability, flexibility, and resilience, as each system component operates independently and reacts to events in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to Use What&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SQS: Asynchronous processing, buffering&lt;/p&gt;

&lt;p&gt;SNS: Fan-out notifications&lt;/p&gt;

&lt;p&gt;EventBridge: Event routing across services&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LAB 7: Messaging with Amazon SQS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Task: Implement loosely coupled architectures using messaging services&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decouple application components using SQS&lt;/li&gt;
&lt;li&gt;Process messages asynchronously using Lambda&lt;/li&gt;
&lt;li&gt;Configure DLQ for failure handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Producer (Lambda / CLI)&lt;/li&gt;
&lt;li&gt;Amazon SQS&lt;/li&gt;
&lt;li&gt;Consumer (Lambda)&lt;/li&gt;
&lt;li&gt;Dead Letter Queue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1: Create SQS Queue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to SQS → Create queue&lt;/p&gt;

&lt;p&gt;Type: Standard&lt;/p&gt;

&lt;p&gt;Visibility timeout: 60 seconds&lt;/p&gt;

&lt;p&gt;Create queue&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create Dead Letter Queue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create another SQS queue&lt;/p&gt;

&lt;p&gt;Name: order-processing-dlq&lt;/p&gt;

&lt;p&gt;Configure DLQ on main queue&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Create Lambda Consumer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to Lambda → Create function&lt;/p&gt;

&lt;p&gt;Runtime: Python 3.12&lt;/p&gt;

&lt;p&gt;Add SQS trigger&lt;/p&gt;

&lt;p&gt;Use sample code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def lambda_handler(event, context):
    for record in event['Records']:
        print(record['body'])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Step 4: Send Message to Queue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;aws sqs send-message \&lt;br&gt;
  --queue-url "" \&lt;br&gt;
  --message-body "Order123"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Message processed by Lambda&lt;/p&gt;

&lt;p&gt;Failed messages move to DLQ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dipalikulshrestha/cicd-for-aws-applications-2c23" class="crayons-story__hidden-navigation-link"&gt;CI/CD for AWS Applications&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dipalikulshrestha" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" alt="dipalikulshrestha profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dipalikulshrestha" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dipali Kulshrestha
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dipali Kulshrestha
                
              
              &lt;div id="story-author-preview-content-3179275" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dipalikulshrestha" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dipali Kulshrestha&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/cicd-for-aws-applications-2c23" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 17&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dipalikulshrestha/cicd-for-aws-applications-2c23" id="article-link-3179275"&gt;
          CI/CD for AWS Applications
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/automation"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;automation&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cicd"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cicd&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/cicd-for-aws-applications-2c23" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dipalikulshrestha/cicd-for-aws-applications-2c23#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;





</description>
      <category>architecture</category>
      <category>backend</category>
      <category>microservices</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>AI Services for Developers</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Wed, 14 Jan 2026 11:32:10 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/ai-services-for-developers-51hm</link>
      <guid>https://dev.to/dipalikulshrestha/ai-services-for-developers-51hm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Module Objectives&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By the end of this module, learners will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand the AWS AI/ML service landscape&lt;/li&gt;
&lt;li&gt;Choose between pre-trained AI services vs custom ML&lt;/li&gt;
&lt;li&gt;Integrate AI services into applications using SDKs &amp;amp; APIs&lt;/li&gt;
&lt;li&gt;Secure AI services using IAM roles&lt;/li&gt;
&lt;li&gt;Build event-driven AI workflows&lt;/li&gt;
&lt;li&gt;Get introduced to Generative AI on AWS (Bedrock)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;AWS AI Services Landscape (Big Picture)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk28sywvsltn6vui3me0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk28sywvsltn6vui3me0k.png" alt=" " width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three Layers of AI on AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Applications&lt;br&gt;
│&lt;br&gt;
├── &lt;strong&gt;AI Services (Pre-trained)&lt;/strong&gt;&lt;br&gt;
│     Rekognition, Comprehend, Textract, Transcribe, Polly&lt;br&gt;
│&lt;br&gt;
├── &lt;strong&gt;ML Platforms&lt;/strong&gt;&lt;br&gt;
│     SageMaker AI&lt;br&gt;
│&lt;br&gt;
└── &lt;strong&gt;GenAI&lt;/strong&gt;&lt;br&gt;
      Amazon Bedrock&lt;/p&gt;

&lt;p&gt;When to Use What&lt;br&gt;
Requirement ===&amp;gt;    Best Choice&lt;br&gt;
No ML expertise ===&amp;gt;    AI Services&lt;br&gt;
Custom ML models===&amp;gt;    SageMaker&lt;br&gt;
GenAI / LLMs    ===&amp;gt;    Bedrock&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Pre-Trained AWS AI Services (Core Focus)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These services require NO model training.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Amazon Rekognition (Image &amp;amp; Video AI)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image and video analysis&lt;/li&gt;
&lt;li&gt;Face detection&lt;/li&gt;
&lt;li&gt;Label detection&lt;/li&gt;
&lt;li&gt;Content moderation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fraud detection&lt;/li&gt;
&lt;li&gt;Identity verification&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Content moderation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developer Integration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API-based&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SDK supported&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Amazon Comprehend (NLP)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sentiment analysis&lt;/li&gt;
&lt;li&gt;Key phrase extraction&lt;/li&gt;
&lt;li&gt;Entity recognition&lt;/li&gt;
&lt;li&gt;PII detection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer feedback analysis&lt;/li&gt;
&lt;li&gt;Compliance checks&lt;/li&gt;
&lt;li&gt;Document classification&lt;/li&gt;
&lt;li&gt;Supported Input&lt;/li&gt;
&lt;li&gt;Plain text&lt;/li&gt;
&lt;li&gt;UTF-8 encoded documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Amazon Textract (Document AI)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What It Does&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OCR (text extraction)&lt;/li&gt;
&lt;li&gt;Forms and tables&lt;/li&gt;
&lt;li&gt;Structured document parsing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;**Invoice processing&lt;/p&gt;

&lt;p&gt;KYC onboarding&lt;/p&gt;

&lt;p&gt;Financial documents**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Speech &amp;amp; Language AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon Transcribe&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speech-to-text&lt;/li&gt;
&lt;li&gt;Call center analytics&lt;/li&gt;
&lt;li&gt;Supports batch &amp;amp; streaming&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Amazon Polly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text-to-speech&lt;/li&gt;
&lt;li&gt;Multiple voices &amp;amp; languages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Common Pattern&lt;/p&gt;

&lt;p&gt;S3 → AI Service → Output to S3 / DB&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Hands-On Lab 1: Text Analysis with Amazon Comprehend&lt;br&gt;
Objective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analyze sentiment using Comprehend.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create IAM role with:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ComprehendReadOnly&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input sample text&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use AWS SDK (Python):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3

client = boto3.client('comprehend')

response = client.detect_sentiment(
    Text="AWS AI services are powerful and easy to use",
    LanguageCode='en'
)

print(response['Sentiment'])

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sentiment output returned&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Cost Considerations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Service ===&amp;gt;     Pricing Model&lt;br&gt;
Rekognition ===&amp;gt; Per image / minute&lt;br&gt;
Comprehend ===&amp;gt;  Per text unit&lt;br&gt;
Textract ===&amp;gt;    Per page&lt;br&gt;
Transcribe ===&amp;gt;  Per second&lt;br&gt;
Polly ===&amp;gt;   Per million characters&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Intro to Amazon SageMaker AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What SageMaker Is&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;End-to-end ML platform&lt;/li&gt;
&lt;li&gt;Training, tuning, hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;When Developers Should Use It&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need custom ML models&lt;/li&gt;
&lt;li&gt;Data science involvement&lt;/li&gt;
&lt;li&gt;Model lifecycle management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;12. Introduction to Generative AI on AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon Bedrock&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed GenAI service&lt;/li&gt;
&lt;li&gt;Access to foundation models&lt;/li&gt;
&lt;li&gt;No infrastructure management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chatbots&lt;/li&gt;
&lt;li&gt;Code assistants&lt;/li&gt;
&lt;li&gt;Document summarization&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13. Hands-On Lab: Bedrock Text Generation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Generate text using Bedrock.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps (High-Level)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable Bedrock access&lt;/li&gt;
&lt;li&gt;Assign IAM role&lt;/li&gt;
&lt;li&gt;Call model using SDK&lt;/li&gt;
&lt;li&gt;Capture output&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Bedrock text generation via SDK
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3
import json

bedrock = boto3.client(
    service_name = 'bedrock-runtime',
    region_name = 'us-east-1'
    )

input = {
  "modelId": "cohere.command-text-v14",
  "contentType": "application/json",
  "accept": "*/*",
  "body": "{\"prompt\":\"Please write a four liner poem on machine learning.\",\"max_tokens\":400,\"temperature\":0.75,\"p\":0.01,\"k\":0,\"stop_sequences\":[],\"return_likelihoods\":\"NONE\"}"
}

response = bedrock.invoke_model(body=input["body"],
                                    modelId=input["modelId"],
                                    accept=input["accept"],
                                    contentType=input["contentType"])

response_body = json.loads(response['body'].read())

print(response_body)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ai</category>
      <category>aws</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Storage for Developers</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 10 Jan 2026 11:42:51 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/storage-for-developers-58h5</link>
      <guid>https://dev.to/dipalikulshrestha/storage-for-developers-58h5</guid>
      <description>&lt;p&gt;&lt;strong&gt;Module Objectives&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By the end of this module, learners will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand AWS storage services from a developer perspective&lt;/li&gt;
&lt;li&gt;Select the right storage option for different application patterns&lt;/li&gt;
&lt;li&gt;Use Amazon S3 programmatically and securely&lt;/li&gt;
&lt;li&gt;Configure EBS and EFS for compute workloads&lt;/li&gt;
&lt;li&gt;Apply IAM permissions and encryption&lt;/li&gt;
&lt;li&gt;Handle durability, availability, and cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Overview of AWS Storage Options
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2rx08s5gyoeorik9iwa.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2rx08s5gyoeorik9iwa.jpeg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Multiple Storage Services?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Different applications need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Object vs file vs block storage&lt;/li&gt;
&lt;li&gt;High durability vs low latency&lt;/li&gt;
&lt;li&gt;Shared vs single-instance access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Storage Type    ==&amp;gt;       Service&lt;/strong&gt;&lt;br&gt;
Object  ==&amp;gt;                 Amazon S3&lt;br&gt;
Block   ==&amp;gt;                 Amazon EBS&lt;br&gt;
File    ==&amp;gt;                 Amazon EFS&lt;br&gt;
Hybrid / Transfer. ==&amp;gt;   DataSync, Storage Gateway&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Amazon S3 (Simple Storage Service)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon S3?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Object storage&lt;/li&gt;
&lt;li&gt;Virtually unlimited scale&lt;/li&gt;
&lt;li&gt;11 9’s durability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Core S3 Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bucket&lt;/li&gt;
&lt;li&gt;Object&lt;/li&gt;
&lt;li&gt;Key&lt;/li&gt;
&lt;li&gt;Region-scoped buckets&lt;/li&gt;
&lt;li&gt;Global namespace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;S3 Storage Classes&lt;/strong&gt;&lt;br&gt;
Class         ==&amp;gt;          Use Case&lt;br&gt;
Standard.     ==&amp;gt;      Frequent access&lt;br&gt;
IA        ==&amp;gt;          Infrequent access&lt;br&gt;
One Zone-IA.  ==&amp;gt;      Non-critical data&lt;br&gt;
Glacier Instant ==&amp;gt;        Archive, quick access&lt;br&gt;
Glacier Flexible. ==&amp;gt;      Archive&lt;br&gt;
Glacier Deep Archive. ==&amp;gt;. Lowest cost&lt;/p&gt;

&lt;p&gt;🔑 Storage class affects cost, not durability.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;S3 Security &amp;amp; Access Control
&lt;strong&gt;Access Mechanisms&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;IAM policies&lt;/li&gt;
&lt;li&gt;Bucket policies&lt;/li&gt;
&lt;li&gt;ACLs (legacy, discouraged)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Encryption Options&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSE-S3&lt;/li&gt;
&lt;li&gt;SSE-KMS&lt;/li&gt;
&lt;li&gt;Client-side encryption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Public Access&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block Public Access (default ON)&lt;/li&gt;
&lt;li&gt;Bucket policy controls&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  4. Hands-On Lab: S3 for Developers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;br&gt;
download files from S3 using SDK&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3

s3 = boto3.client("s3")

bucket_name = "dev-2801"
object_key = "index1.html"

s3.download_file(
    Bucket=bucket_name,
    Key=object_key,
    Filename="index1.html"
)

print("File downloaded")


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  5. S3 for Application Patterns
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Common Developer Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static website hosting&lt;/li&gt;
&lt;li&gt;Application artifacts&lt;/li&gt;
&lt;li&gt;Logs and backups&lt;/li&gt;
&lt;li&gt;Data lake&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Event-Driven Patterns&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3 → Lambda trigger&lt;/li&gt;
&lt;li&gt;S3 → EventBridge&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  6. Amazon EBS (Elastic Block Store)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is EBS?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block storage for EC2&lt;/li&gt;
&lt;li&gt;Attached to one instance at a time&lt;/li&gt;
&lt;li&gt;Key EBS Concepts&lt;/li&gt;
&lt;li&gt;Volume&lt;/li&gt;
&lt;li&gt;Snapshot&lt;/li&gt;
&lt;li&gt;Availability Zone scoped&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Databases on EC2&lt;/li&gt;
&lt;li&gt;Boot volumes&lt;/li&gt;
&lt;li&gt;Low-latency workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Hands-On Lab 2: EBS Volume with EC2
Objective&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Attach and mount EBS volume to EC2.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://learning-dipali.medium.com/attach-volume-to-windows-ec2-instance-ba61a7d2a8c0" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;learning-dipali.medium.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  8. Amazon EFS (Elastic File System)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is EFS?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managed NFS file system&lt;/li&gt;
&lt;li&gt;Shared across multiple EC2 instances&lt;/li&gt;
&lt;li&gt;Automatically scales&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Characteristics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-AZ&lt;/li&gt;
&lt;li&gt;POSIX-compliant&lt;/li&gt;
&lt;li&gt;Regional service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shared application data&lt;/li&gt;
&lt;li&gt;Content management systems&lt;/li&gt;
&lt;li&gt;Microservices shared storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔑 EFS supports concurrent access from multiple EC2s.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://learning-dipali.medium.com/learn-aws-amazon-web-services-39c2657e618c" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;learning-dipali.medium.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  9. Cost &amp;amp; Performance Considerations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cost Drivers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage amount&lt;/li&gt;
&lt;li&gt;Access frequency&lt;/li&gt;
&lt;li&gt;Data transfer&lt;/li&gt;
&lt;li&gt;API requests (S3)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance Factors&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3 prefix distribution&lt;/li&gt;
&lt;li&gt;EBS volume type&lt;/li&gt;
&lt;li&gt;EFS throughput mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dipalikulshrestha/iam-fundamentals-32pa" class="crayons-story__hidden-navigation-link"&gt;IAM Fundamentals&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dipalikulshrestha" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" alt="dipalikulshrestha profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dipalikulshrestha" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dipali Kulshrestha
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dipali Kulshrestha
                
              
              &lt;div id="story-author-preview-content-3181417" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dipalikulshrestha" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dipali Kulshrestha&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/iam-fundamentals-32pa" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 19&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dipalikulshrestha/iam-fundamentals-32pa" id="article-link-3181417"&gt;
          IAM Fundamentals
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/beginners"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;beginners&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/dipalikulshrestha/iam-fundamentals-32pa#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>architecture</category>
      <category>aws</category>
      <category>developer</category>
      <category>learning</category>
    </item>
    <item>
      <title>3-Day Hands-On Training: Developing on AWS</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 10 Jan 2026 11:30:46 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/3-day-hands-on-training-developing-on-aws-229d</link>
      <guid>https://dev.to/dipalikulshrestha/3-day-hands-on-training-developing-on-aws-229d</guid>
      <description>&lt;p&gt;&lt;strong&gt;Audience&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application Developers (Java / .NET / Node / Python)&lt;/li&gt;
&lt;li&gt;Senior Engineers transitioning to AWS&lt;/li&gt;
&lt;li&gt;Cloud-native &amp;amp; modernization teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pre-requisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic programming experience&lt;/li&gt;
&lt;li&gt;Basic understanding of web apps &amp;amp; REST APIs&lt;/li&gt;
&lt;li&gt;Optional: AWS Cloud Practitioner–level awareness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Delivery Format&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30% Concepts&lt;/li&gt;
&lt;li&gt;70% Hands-on Labs&lt;/li&gt;
&lt;li&gt;Each module → Concepts → Demo → Lab → Review&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DAY 1 – Core AWS Development Foundations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Module 1: AWS Development Environment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Global Infrastructure (Regions, AZs)&lt;/li&gt;
&lt;li&gt;Shared Responsibility Model (Developer focus)&lt;/li&gt;
&lt;li&gt;AWS SDKs &amp;amp; CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure AWS CLI &amp;amp; SDK&lt;/li&gt;
&lt;li&gt;Access S3 using SDK (Java/Python)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outcome&lt;br&gt;
✔ Application access using Application codes&lt;br&gt;
✔ No hard-coded credentials&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 2: Compute Options for Developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2 vs Lambda vs Containers (when to use what)&lt;/li&gt;
&lt;li&gt;Amazon EC2 fundamentals&lt;/li&gt;
&lt;li&gt;Auto Scaling basics&lt;/li&gt;
&lt;li&gt;Load Balancer overview (ALB)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploy a simple web app on EC2&lt;/li&gt;
&lt;li&gt;Configure Security Groups&lt;/li&gt;
&lt;li&gt;Add ALB in front of EC2&lt;/li&gt;
&lt;li&gt;Test scaling behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outcome&lt;br&gt;
✔ Choose correct compute for application workloads&lt;br&gt;
✔ Deploy scalable compute layer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 3: Storage for Developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon S3 (buckets, objects, lifecycle)&lt;/li&gt;
&lt;li&gt;S3 security &amp;amp; encryption&lt;/li&gt;
&lt;li&gt;EBS vs EFS vs S3 (developer view)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload &amp;amp; retrieve objects from S3 using SDK&lt;/li&gt;
&lt;li&gt;Enable versioning &amp;amp; lifecycle rules&lt;/li&gt;
&lt;li&gt;Secure S3 with bucket policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outcome&lt;br&gt;
✔ Integrate object storage in applications&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 4: Introduction to IAM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM:

&lt;ul&gt;
&lt;li&gt;Users, Roles, Policies&lt;/li&gt;
&lt;li&gt;IAM best practices for developers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create IAM role for application access&lt;/li&gt;
&lt;li&gt;Use IAM policy simulator&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  DAY 2 – Data, Messaging &amp;amp; Application Integration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Module 5: Databases on AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RDS vs DynamoDB vs Aurora&lt;/li&gt;
&lt;li&gt;Choosing the right database&lt;/li&gt;
&lt;li&gt;Connection management best practices&lt;/li&gt;
&lt;li&gt;Secrets Manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create RDS (MySQL/Postgres)&lt;/li&gt;
&lt;li&gt;Connect application to RDS&lt;/li&gt;
&lt;li&gt;Store DB credentials in Secrets Manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outcome&lt;br&gt;
✔ Secure database connectivity&lt;br&gt;
✔ Avoid hard-coded secrets&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 6: NoSQL DB &amp;amp; High-Scale Applications&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DynamoDB architecture&lt;/li&gt;
&lt;li&gt;Partition keys &amp;amp; indexes&lt;/li&gt;
&lt;li&gt;Read/write capacity modes&lt;/li&gt;
&lt;li&gt;DynamoDB Streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create DynamoDB table&lt;/li&gt;
&lt;li&gt;CRUD operations using SDK&lt;/li&gt;
&lt;li&gt;Enable Streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outcome&lt;br&gt;
✔ Build highly scalable data layer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Module 7: Introduction to Serverless Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda deep dive&lt;/li&gt;
&lt;li&gt;Event-driven architecture&lt;/li&gt;
&lt;li&gt;Lambda execution model &amp;amp; limits&lt;/li&gt;
&lt;li&gt;API Gateway basics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a Lambda function&lt;/li&gt;
&lt;li&gt;Expose via API Gateway&lt;/li&gt;
&lt;li&gt;Test using Postman&lt;/li&gt;
&lt;li&gt;Enable logging with CloudWatch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Outcome&lt;/strong&gt;&lt;br&gt;
✔ Build &amp;amp; expose serverless APIs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capstone Lab&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Build a simple REST API using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;API Gateway&lt;/li&gt;
&lt;li&gt;S3 for data storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Module 8: Messaging &amp;amp; Event-Driven Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQS vs SNS vs EventBridge&lt;/li&gt;
&lt;li&gt;Decoupled architectures&lt;/li&gt;
&lt;li&gt;Retry &amp;amp; DLQ patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create SQS queue&lt;/li&gt;
&lt;li&gt;Publish messages from Lambda&lt;/li&gt;
&lt;li&gt;Process messages asynchronously&lt;/li&gt;
&lt;li&gt;Configure DLQ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outcome&lt;br&gt;
✔ Build resilient, decoupled systems&lt;/p&gt;
&lt;h2&gt;
  
  
  DAY 3 – Networking &amp;amp; CI/CD for AWS Applications
&lt;/h2&gt;

&lt;p&gt;Module 9: Networking concepts in AWS&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overview of VPC&lt;/li&gt;
&lt;li&gt;Components of VPC&lt;/li&gt;
&lt;li&gt;IP Addressing&lt;/li&gt;
&lt;li&gt;VPC Models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Module 10: AWS Well-Architected Framework&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Concepts&lt;/li&gt;
&lt;li&gt;6 Pillars overview&lt;/li&gt;
&lt;li&gt;Developer responsibility per pillar&lt;/li&gt;
&lt;li&gt;Common anti-patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Module 11: CI/CD for AWS Applications&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI/CD on AWS&lt;/li&gt;
&lt;li&gt;CodeCommit, CodeBuild, CodePipeline&lt;/li&gt;
&lt;li&gt;Infrastructure as Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Lab&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create CI/CD pipeline&lt;/li&gt;
&lt;li&gt;Build &amp;amp; deploy Lambda automatically&lt;/li&gt;
&lt;li&gt;Version application releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outcome&lt;br&gt;
✔ Automated build &amp;amp; deployment&lt;/p&gt;

&lt;p&gt;Module 12: AWS AI Services&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI Services spectrum in AWS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/dipalikulshrestha" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" alt="dipalikulshrestha"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/dipalikulshrestha/aws-development-environment-32j9" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;AWS Development Environment&lt;/h2&gt;
      &lt;h3&gt;Dipali Kulshrestha ・ Jan 10&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#architecture&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#security&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Compute options for Developers</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 10 Jan 2026 11:22:16 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/compute-options-for-developers-2db2</link>
      <guid>https://dev.to/dipalikulshrestha/compute-options-for-developers-2db2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Module Objectives:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By the end of this module, learners will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compare AWS compute services from a developer’s perspective&lt;/li&gt;
&lt;li&gt;Choose the right compute option for different application patterns&lt;/li&gt;
&lt;li&gt;Deploy applications using EC2, Lambda, and Containers&lt;/li&gt;
&lt;li&gt;Understand scaling, availability, and pricing implications&lt;/li&gt;
&lt;li&gt;Apply IAM roles to compute services securely&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Overview of AWS Compute Options
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a14zqxt2y7ruesma9bo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a14zqxt2y7ruesma9bo.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Multiple Compute Options?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS provides multiple compute services to support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different levels of abstraction&lt;/li&gt;
&lt;li&gt;Different operational responsibilities&lt;/li&gt;
&lt;li&gt;Different cost and scaling models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Compute Spectrum&lt;/strong&gt; &lt;br&gt;
On-Prem → EC2 → Containers → Lambda&lt;br&gt;
More Control ←────────────→ Less Control&lt;br&gt;
More Ops   ←────────────→ Less Ops&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Amazon EC2 (Elastic Compute Cloud)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is EC2?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtual servers in the cloud&lt;/li&gt;
&lt;li&gt;Full OS-level control&lt;/li&gt;
&lt;li&gt;Developer manages OS, runtime, scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key EC2 Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instance types (general, compute, memory optimized)&lt;/li&gt;
&lt;li&gt;AMI (Amazon Machine Image)&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Key pairs&lt;/li&gt;
&lt;li&gt;User Data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;EC2 instance pricing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On-demand:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low cost and flexibility of EC2 without any up-front payment or long term commitment &lt;/li&gt;
&lt;li&gt;Applications with short term, spiky, or unpredictable workloads that cannot be interrupted &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reserved:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Applications with steady state or predictable usage&lt;/li&gt;
&lt;li&gt;Users can make up-front payments to reduce their total computing costs even further &lt;/li&gt;
&lt;li&gt;Standard Reserved Instances (RIs) provide up to 75% off on-demand price&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Spot:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Applications that can be interrupted or only feasible at very low compute prices &lt;/li&gt;
&lt;li&gt;Users with an urgent need for a large amount of additional compute capacity &lt;/li&gt;
&lt;li&gt;If Amazon terminate your instances you do not pay, if you terminate you pay for the hour &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dedicated hosts:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Useful for regulatory requirements that may not support multi-tenant virtualization &lt;/li&gt;
&lt;li&gt;Can be purchased on-demand (hourly) or Reserved for up to                                                                            70% off the on-demand price &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developer Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy applications&lt;/li&gt;
&lt;li&gt;Custom runtimes&lt;/li&gt;
&lt;li&gt;Long-running services&lt;/li&gt;
&lt;li&gt;Lift-and-shift workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;EC2 Scaling &amp;amp; Availability&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual scaling&lt;/li&gt;
&lt;li&gt;Auto Scaling Groups (ASG)&lt;/li&gt;
&lt;li&gt;Multi-AZ deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔑 EC2 does not scale automatically unless ASG is configured.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Hands-On Lab 1: Launch EC2 Application
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;br&gt;
Deploy a simple web application on EC2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch EC2 instance (Amazon Linux)&lt;/li&gt;
&lt;li&gt;Attach IAM role (S3 read-only)&lt;/li&gt;
&lt;li&gt;Configure Security Group (HTTP + SSH)&lt;/li&gt;
&lt;li&gt;Use User Data:&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  !/bin/bash
&lt;/h1&gt;

&lt;p&gt;yum install -y httpd&lt;br&gt;
systemctl start httpd&lt;br&gt;
echo "Hello from EC2" &amp;gt; /var/www/html/index.html&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access via public IP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Validation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web page loads&lt;/li&gt;
&lt;li&gt;No credentials configured on instance&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  4. AWS Lambda (Serverless Compute)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Lambda?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event-driven, serverless compute&lt;/li&gt;
&lt;li&gt;No server management&lt;/li&gt;
&lt;li&gt;Automatic scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Lambda Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Function&lt;/li&gt;
&lt;li&gt;Handler&lt;/li&gt;
&lt;li&gt;Runtime&lt;/li&gt;
&lt;li&gt;Execution role&lt;/li&gt;
&lt;li&gt;Timeout &amp;amp; memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Supported Triggers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;API Gateway&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;DynamoDB&lt;/li&gt;
&lt;li&gt;EventBridge etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lambda Execution Model&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stateless&lt;/li&gt;
&lt;li&gt;Short-lived&lt;/li&gt;
&lt;li&gt;Pay per execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔑 Lambda has 15-minute max execution time. For longer execution needs, use Lambda durable functions.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Hands-On Lab 2: Build a Lambda Function
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a Lambda function triggered by API Gateway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create IAM role for Lambda&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWSLambdaBasicExecutionRole&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create Lambda function (Python)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add code:&lt;/p&gt;

&lt;p&gt;def lambda_handler(event, context):&lt;br&gt;
    return {&lt;br&gt;
        'statusCode': 200,&lt;br&gt;
        'body': 'Hello from Lambda'&lt;br&gt;
    }&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure API Gateway trigger&lt;/li&gt;
&lt;li&gt;Test endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Validation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP endpoint returns response&lt;/li&gt;
&lt;li&gt;Logs visible in CloudWatch&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  6. Containers on AWS (ECS &amp;amp; EKS – Developer View)
&lt;/h2&gt;

&lt;p&gt;Why Containers?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Portable runtime&lt;/li&gt;
&lt;li&gt;Consistent environments&lt;/li&gt;
&lt;li&gt;Faster deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Amazon ECS (Elastic Container Service)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS-managed container orchestration&lt;/li&gt;
&lt;li&gt;Easier than Kubernetes&lt;/li&gt;
&lt;li&gt;Integrates deeply with IAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Launch Types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;Fargate (serverless containers)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Amazon EKS (Brief)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managed Kubernetes&lt;/li&gt;
&lt;li&gt;More control, more complexity&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  7. Hands-On Lab 3: Run Container on ECS Fargate
&lt;/h2&gt;

&lt;p&gt;Objective&lt;/p&gt;

&lt;p&gt;Deploy a containerized application without managing servers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create ECS cluster (Fargate)&lt;/li&gt;
&lt;li&gt;Create task definition&lt;/li&gt;
&lt;li&gt;Public sample image&lt;/li&gt;
&lt;li&gt;Assign IAM task role&lt;/li&gt;
&lt;li&gt;Run service&lt;/li&gt;
&lt;li&gt;Access application via ALB&lt;/li&gt;
&lt;li&gt;Validation&lt;/li&gt;
&lt;li&gt;Container running&lt;/li&gt;
&lt;li&gt;Logs in CloudWatch&lt;/li&gt;
&lt;li&gt;No EC2 instances created&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  8. Choosing the Right Compute Option
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Decision Table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Requirement               ====&amp;gt;        Best Choice&lt;br&gt;
Full OS control           ====&amp;gt;        EC2&lt;br&gt;
Event-driven, short tasks ====&amp;gt;        Lambda&lt;br&gt;
Containerized app     ====&amp;gt;        ECS&lt;br&gt;
No server management      ====&amp;gt;        Lambda / Fargate&lt;br&gt;
Long-running job      ====&amp;gt;        EC2 / ECS&lt;/p&gt;
&lt;h2&gt;
  
  
  9. IAM Integration with Compute
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IAM Roles by Compute Type&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EC2 → Instance Profile&lt;/p&gt;

&lt;p&gt;Lambda → Execution Role&lt;/p&gt;

&lt;p&gt;ECS → Task Role&lt;/p&gt;

&lt;p&gt;🔑 Never use access keys in compute services.&lt;/p&gt;
&lt;h2&gt;
  
  
  10. Pricing Model Comparison
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Service   Pricing Model&lt;/strong&gt;&lt;br&gt;
EC2 Per second/hour&lt;br&gt;
Lambda  Per invocation + duration&lt;br&gt;
ECS (EC2)   Underlying EC2&lt;br&gt;
Fargate vCPU + memory&lt;/p&gt;
&lt;h2&gt;
  
  
  11. AWS Load balancer
&lt;/h2&gt;

&lt;p&gt;A load balancer distributes incoming application traffic across multiple EC2 instances in multiple Availability Zones. This increases the fault tolerance of your applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx45ukjp9iauu9qex8ulh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx45ukjp9iauu9qex8ulh.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Load balancer serves as a single point of contact for clients.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Elastic Load Balancing detects unhealthy instances and routes traffic only to healthy instances.&lt;/li&gt;
&lt;li&gt;This increases the availability of your application.&lt;/li&gt;
&lt;li&gt;Add/remove instances from load balancer as needs change, without disrupting the&lt;/li&gt;
&lt;li&gt;overall flow of requests to your application.&lt;/li&gt;
&lt;li&gt;Elastic Load Balancing scales your load balancer as traffic to your application changes over time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  12. Amazon VPC Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Virtual Private Cloud (VPC) provides network isolation and control for AWS resources. While developers do not design full network topologies, basic VPC knowledge is essential for application deployment, connectivity, and troubleshooting in the DVA-C02 exam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VPC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A logically isolated virtual network within an AWS Region&lt;/p&gt;

&lt;p&gt;Defined by an IPv4/IPv6 CIDR block&lt;/p&gt;

&lt;p&gt;Every AWS account has a default VPC per Region&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subnets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Subnets are created within a single AZ&lt;/p&gt;

&lt;p&gt;Public subnet:&lt;/p&gt;

&lt;p&gt;Has route to an Internet Gateway&lt;/p&gt;

&lt;p&gt;Used for ALB, bastion hosts&lt;/p&gt;

&lt;p&gt;Private subnet:&lt;/p&gt;

&lt;p&gt;No direct internet access&lt;/p&gt;

&lt;p&gt;Used for application servers, Lambda (VPC-enabled), databases&lt;br&gt;
Internet Gateway (IGW)&lt;/p&gt;

&lt;p&gt;Enables communication between VPC resources and the internet&lt;/p&gt;

&lt;p&gt;Required for public subnets&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Route Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Control traffic routing for subnets&lt;/p&gt;

&lt;p&gt;Determine whether traffic stays internal or goes to IGW / NAT&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NAT Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Allows outbound internet access for resources in private subnets&lt;/p&gt;

&lt;p&gt;Common for patching, external API calls&lt;br&gt;
Security Groups vs NACLs (Exam Focus)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stateful&lt;/p&gt;

&lt;p&gt;Attached to resources (EC2, ALB, Lambda ENIs)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network ACLs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stateless&lt;/p&gt;

&lt;p&gt;Applied at subnet level&lt;/p&gt;

&lt;p&gt;Developer-Relevant Scenarios&lt;/p&gt;

&lt;p&gt;Lambda accessing RDS in a private subnet&lt;/p&gt;

&lt;p&gt;EC2 instances behind an ALB&lt;/p&gt;

&lt;p&gt;Troubleshooting connectivity (timeouts vs permission errors)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dipalikulshrestha/storage-for-developers-58h5" class="crayons-story__hidden-navigation-link"&gt;Storage for Developers&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dipalikulshrestha" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" alt="dipalikulshrestha profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dipalikulshrestha" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dipali Kulshrestha
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dipali Kulshrestha
                
              
              &lt;div id="story-author-preview-content-3112896" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dipalikulshrestha" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dipali Kulshrestha&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/storage-for-developers-58h5" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dipalikulshrestha/storage-for-developers-58h5" id="article-link-3112896"&gt;
          Storage for Developers
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/developer"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;developer&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/storage-for-developers-58h5" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dipalikulshrestha/storage-for-developers-58h5#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>architecture</category>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>AWS Development Environment</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 10 Jan 2026 11:22:07 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/aws-development-environment-32j9</link>
      <guid>https://dev.to/dipalikulshrestha/aws-development-environment-32j9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Module Objectives&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;By the end of this module, participants will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Set up a secure AWS development environment&lt;/li&gt;
&lt;li&gt;Configure CLI &amp;amp; SDK access securely&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction: AWS Global Infrastructure
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Key Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Regions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Region is a geographical area with multiple, isolated Availability Zones&lt;/p&gt;

&lt;p&gt;Examples: us-east-1, eu-west-1, ap-south-1&lt;/p&gt;

&lt;p&gt;Developers choose Regions based on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latency&lt;/li&gt;
&lt;li&gt;Compliance &amp;amp; data residency&lt;/li&gt;
&lt;li&gt;Service availability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Availability Zones (AZs)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An AZ is one or more physically separate data centres within a Region&lt;/p&gt;

&lt;p&gt;AZs are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connected via high-speed, low-latency links&lt;/li&gt;
&lt;li&gt;Isolated to prevent failure propagation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best practice:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Deploy applications across multiple AZs for high availability&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edge Locations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Used by services such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon CloudFront&lt;/li&gt;
&lt;li&gt;AWS WAF&lt;/li&gt;
&lt;li&gt;AWS Shield&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce latency by serving content closer to users&lt;/li&gt;
&lt;li&gt;Improve performance for global applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Regional vs Global Services (Developer View)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global services:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;li&gt;CloudFront&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Regional services:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EC2, Lambda, RDS, DynamoDB&lt;/p&gt;

&lt;h2&gt;
  
  
  1. AWS Development Environment – Overview
&lt;/h2&gt;

&lt;p&gt;A controlled AWS setup that allows developers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write, build, test, and deploy applications &lt;/li&gt;
&lt;li&gt;Access AWS services securely&lt;/li&gt;
&lt;li&gt;Use automation tools (CLI, SDK, IaC)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Typical Components&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Account (or sandbox)&lt;/li&gt;
&lt;li&gt;IAM Users / Roles&lt;/li&gt;
&lt;li&gt;AWS Management Console&lt;/li&gt;
&lt;li&gt;AWS CLI&lt;/li&gt;
&lt;li&gt;SDKs (Java, Python, Node.js, etc.)&lt;/li&gt;
&lt;li&gt;CloudShell / Cloud9 (optional)&lt;/li&gt;
&lt;li&gt;Source control (GitHub / CodeCommit)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. AWS Account &amp;amp; Environment Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why not to use root account for development.
Root account has unrestricted access – IAM policies do NOT apply to root.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common models:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single Account (training / sandbox)&lt;/li&gt;
&lt;li&gt;Multi-Account (prod, non-prod, dev) – mention AWS Organizations&lt;/li&gt;
&lt;li&gt;Root Account – Best Practices&lt;/li&gt;
&lt;li&gt;Enable MFA&lt;/li&gt;
&lt;li&gt;Do not use root for daily tasks&lt;/li&gt;
&lt;li&gt;Secure root credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Development Access Options
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AWS Management Console&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser-based&lt;/li&gt;
&lt;li&gt;For learning, debugging, configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for automation and scripting&lt;/li&gt;
&lt;li&gt;Uses IAM credentials or roles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AWS SDKs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used in application code&lt;/li&gt;
&lt;li&gt;Automatically picks credentials from environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Credential resolution order (important concept):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Shared credentials file&lt;/li&gt;
&lt;li&gt;IAM role (EC2/Lambda)&lt;/li&gt;
&lt;li&gt;Default profile&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. AWS CloudShell
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Browser-based shell&lt;/li&gt;
&lt;li&gt;Pre-configured AWS CLI&lt;/li&gt;
&lt;li&gt;Uses IAM permissions automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No local setup&lt;/li&gt;
&lt;li&gt;Secure&lt;/li&gt;
&lt;li&gt;Ideal for training labs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lab: Configure AWS CLI Securely&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set up AWS CLI using IAM user credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install AWS CLI&lt;br&gt;
Run:aws configure&lt;/p&gt;

&lt;p&gt;Provide:&lt;br&gt;
Access Key&lt;br&gt;
Secret Key&lt;br&gt;
Region&lt;/p&gt;

&lt;p&gt;Verify:&lt;/p&gt;

&lt;p&gt;aws sts get-caller-identity&lt;/p&gt;

&lt;p&gt;Security Note&lt;/p&gt;

&lt;p&gt;Explain .aws/credentials file and risks.&lt;/p&gt;

&lt;p&gt;Hands on Lab Prerequisites:&lt;/p&gt;

&lt;p&gt;pip3 install boto3&lt;br&gt;
aws configure&lt;/p&gt;

&lt;p&gt;Lab: Create script to list bucket(vi or any editor)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import boto3

def list_buckets():
    s3 = boto3.client('s3')
    response = s3.list_buckets()

    print("S3 Buckets:")
    for bucket in response['Buckets']:
        print(f"- {bucket['Name']}")

if __name__ == "__main__":
    list_buckets()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;


&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dipalikulshrestha/compute-options-for-developers-2db2" class="crayons-story__hidden-navigation-link"&gt;Compute options for Developers&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dipalikulshrestha" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" alt="dipalikulshrestha profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dipalikulshrestha" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dipali Kulshrestha
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dipali Kulshrestha
                
              
              &lt;div id="story-author-preview-content-3112829" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dipalikulshrestha" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565744%2Fcf27d08f-3dc7-4d27-97c6-a1f59f6e9c6c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dipali Kulshrestha&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dipalikulshrestha/compute-options-for-developers-2db2" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dipalikulshrestha/compute-options-for-developers-2db2" id="article-link-3112829"&gt;
          Compute options for Developers
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/dipalikulshrestha/compute-options-for-developers-2db2#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;





</description>
      <category>architecture</category>
      <category>aws</category>
      <category>security</category>
    </item>
    <item>
      <title>Unlock &amp; Share data Securely with Amazon Datazone</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Fri, 24 May 2024 13:36:18 +0000</pubDate>
      <link>https://dev.to/dipalikulshrestha/unlock-share-data-securely-with-amazon-datazone-3b9l</link>
      <guid>https://dev.to/dipalikulshrestha/unlock-share-data-securely-with-amazon-datazone-3b9l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today's data-driven world, organizations of all sizes – small, medium, and large – are striving to become more data-centric. They want to empower everyone with the power of data, but this becomes increasingly challenging as organizations grow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Pain Points:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding the Right Data:&lt;/strong&gt; Struggling to locate relevant data sets within the vast amount of information.&lt;br&gt;
&lt;strong&gt;Data Trust &amp;amp; Ownership:&lt;/strong&gt; Difficulty in verifying data integrity and identifying data owners.&lt;br&gt;
&lt;strong&gt;Querying Diverse Data Sources:&lt;/strong&gt; Challenges in querying data from various sources and formats using preferred tools.&lt;br&gt;
&lt;strong&gt;Secure Collaboration &amp;amp; Governance:&lt;/strong&gt; Lack of a secure way to share data analysis while ensuring proper governance across different data sources and tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Financial Services Use Case:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's consider a financial services company undergoing a digital transformation journey. They envision a scenario where data is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Searchable &amp;amp; Accessible:&lt;/strong&gt; Easy to find and use by everyone.&lt;br&gt;
&lt;strong&gt;Trusted &amp;amp; Reliable:&lt;/strong&gt; Data integrity is verifiable, and owners are clearly identified.&lt;br&gt;
&lt;strong&gt;Simpler to Use:&lt;/strong&gt; Enables efficient data utilization through user-friendly tools.&lt;br&gt;
&lt;strong&gt;Catalyst for Innovation:&lt;/strong&gt; Drives transformation and empowers data-driven decision-making.&lt;br&gt;
&lt;strong&gt;Maximizes Reuse:&lt;/strong&gt; Encourages data sharing and collaboration across teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution: Amazon DataZone as a Data Marketplace&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To achieve these goals, Amazon DataZone offers a modern data ecosystem that connects data producers and consumers within the organization. It functions as a secure data marketplace where users can:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Access &amp;amp; Share:&lt;/strong&gt; Find and share data products in a governed manner.&lt;br&gt;
&lt;strong&gt;Enhanced Collaboration:&lt;/strong&gt; Facilitate faster, simpler, and secure collaboration between data producers and consumers.&lt;br&gt;
&lt;strong&gt;Real-Time Decision Making:&lt;/strong&gt; Empower real-time insights and data-driven decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation: Multi-Account Setup with DataZone&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can leverage a multi-account setup within AWS to implement DataZone. This ensures data producers and consumers have dedicated AWS accounts while enabling secure data collaboration facilitated by DataZone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F77wtves8ooecuenzq6bd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F77wtves8ooecuenzq6bd.png" alt="Image description" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Data Findability:&lt;/strong&gt; Easy discovery of relevant data sets.&lt;br&gt;
&lt;strong&gt;Enhanced Data Trust:&lt;/strong&gt; Clear data ownership and verifiable data integrity.&lt;br&gt;
&lt;strong&gt;Unified Data Access:&lt;/strong&gt; Query data from various sources and formats using preferred tools.&lt;br&gt;
&lt;strong&gt;Secure Collaboration &amp;amp; Governance:&lt;/strong&gt; Streamlined data sharing with built-in governance controls.&lt;br&gt;
&lt;strong&gt;Faster Decision Making:&lt;/strong&gt; Empowers data-driven decision making with real-time insights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data lake in a data producer account (where data assets are available)&lt;/li&gt;
&lt;li&gt;Then we have a central Governing Datazone Account&lt;/li&gt;
&lt;li&gt;And, thirdly we have Consumer's accounts who wants to consume datalake data available in producer's account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is how the technical architecture looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg73rqv0dewv0o8oodhs0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg73rqv0dewv0o8oodhs0.png" alt="Image description" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo to produce or consume data is available at: &lt;br&gt;
&lt;a href="https://drive.google.com/file/d/1-LwVLzUgf1W_j8suf_hZ3l1ZJchVOlR4/view?usp=sharing"&gt;https://drive.google.com/file/d/1-LwVLzUgf1W_j8suf_hZ3l1ZJchVOlR4/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon DataZone unlocks the power of data within your organization. It creates a secure and collaborative environment for data producers and consumers, ultimately driving innovation and data-driven success.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>datazone</category>
      <category>datamesh</category>
      <category>pubsub</category>
    </item>
    <item>
      <title>How to use Bitnami Wordpress Marketplace AMIs</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 08 May 2021 07:52:05 +0000</pubDate>
      <link>https://dev.to/aws-builders/how-to-use-bitnami-wordpress-marketplace-amis-472j</link>
      <guid>https://dev.to/aws-builders/how-to-use-bitnami-wordpress-marketplace-amis-472j</guid>
      <description>&lt;p&gt;This tutorial is to use Bitnami Wordpress Application available at Amazon Marketplace.&lt;br&gt;
This is a blogging application and has web and database server running on same machine. As part of this exercise we will do the following.&lt;br&gt;
&lt;strong&gt;Part-1&lt;/strong&gt;: Run the application as-is and post comments and view the data flow via database client.&lt;br&gt;
&lt;strong&gt;Part-2&lt;/strong&gt;: Migrate the database from traditional MySQL to Amazon RDS and change the configurations to redirect the web application to use newly created RDS.&lt;br&gt;
Lets get in action…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part-1: Run application as-is&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;: Go to EC2 dashboard and Create a new keypair - training&lt;br&gt;
&lt;strong&gt;Step 2&lt;/strong&gt;: Create ec2 instance using Marketplace AMI for bitnami wordpress "WordPress Certified by Bitnami and Automattic"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29fe58h7v9pdl2pt2m78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29fe58h7v9pdl2pt2m78.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check for usage instructions:&lt;br&gt;
Few important things to note here:&lt;br&gt;
a) The default server administrator is 'user'&lt;br&gt;
b) Documentation Link to get password: &lt;a href="https://docs.bitnami.com/aws/faq/get-started/find-credentials/" rel="noopener noreferrer"&gt;https://docs.bitnami.com/aws/faq/get-started/find-credentials/&lt;/a&gt;&lt;br&gt;
c) You can also access your instance via SSH using the username 'bitnami' and your Amazon private key&lt;br&gt;
Hit Continue and complete the instance creation process using key pair created in step-1&lt;br&gt;
Step 3: ssh to your instance, grab the public DNS and follow instructions below:&lt;br&gt;
Open putty and save the public DNS:&lt;br&gt;
Make following configurations in putty:&lt;br&gt;
a) Select keypair under SSH=&amp;gt;Auth&lt;br&gt;
b) open a tunnel to access db client phpmyadmin available on the same server: Go to SSH=&amp;gt;Tunnels&lt;br&gt;
source port: 8888&lt;br&gt;
Destination: localhost:80&lt;br&gt;
Click on Add&lt;br&gt;
c) Go to Connection =&amp;gt; data&lt;br&gt;
Data: Auto-login username = bitnami&lt;br&gt;
Make sure all the three configurations you just made are still there and then click on open. It will launch the server as below:&lt;br&gt;
Step 4: Now, once you ssh-ed to this instance, next step to get the password for running application. to get that run following command&lt;br&gt;
cat ./bitnami_credentials&lt;/p&gt;

&lt;p&gt;Note the username 'user' and its password&lt;br&gt;
Step 5: Now check the front end application by using public dns via browser:&lt;br&gt;
you should be able to see something like:&lt;br&gt;
Now, post or reply to some blog. e.g.&lt;br&gt;
Go to Recent Posts, Click on Hello World and reply like:&lt;br&gt;
Click on post comment button&lt;br&gt;
Step 6: Now log in to the DB Client and identify the comment posted in step-5&lt;br&gt;
(phpadmin is already installed at this server, for which have the settings while connecting via putty). Access following via web browser:&lt;br&gt;
&lt;a href="http://localhost:8888/phpmyadmin" rel="noopener noreferrer"&gt;http://localhost:8888/phpmyadmin&lt;/a&gt;&lt;br&gt;
Since, we are trying to access database, we will use username as 'root' and password as per step 4 via "cat ./bitnami_credentials"&lt;br&gt;
You are now logged on to the database whwre database name is "bitnami_wordpress"&lt;br&gt;
Expand and check wp_comments table.&lt;br&gt;
We can see our comment at row#2.&lt;br&gt;
So, till here we are able to access the web application and database and can also see the data flow.&lt;br&gt;
Part 2: Migrate the DB to RDS&lt;br&gt;
Now, in 2nd part we will migrate this Mysql database to Amazon RDS. For that export this 'bitnami_wordpress' database and later we will import this into RDS so web application has exactly same backend.&lt;br&gt;
Step 1: Export the database 'bitnami_wordpress'&lt;br&gt;
Click on Database, then click on Export and export it with SQL format.&lt;br&gt;
it will download binami_worpress.sql file to your downloads.&lt;br&gt;
Step 2: Create RDS instance (via AWS Management console)&lt;br&gt;
Go to Databases =&amp;gt; Create Database&lt;br&gt;
In Engine options =&amp;gt; choose MySQL&lt;br&gt;
Leave the default version. And, choose Free tier Template&lt;br&gt;
in Settings =&amp;gt; DB Instance identifier define as: wordpress2&lt;br&gt;
Credentials: Master username: admin , Master Password: Welcome1 (confirm as well)&lt;br&gt;
DB instance size, storage, Availability: leave default&lt;br&gt;
Connectivity: Default VPC&lt;br&gt;
Expand, Additional connectivity configuration: choose Public access as 'Yes'&lt;br&gt;
Choose 'default' security group and DB port will be 3306&lt;br&gt;
Go to Additional Configurations&lt;br&gt;
provide initial database name as: wordpress2&lt;br&gt;
Rest leave default and click on ' Create Database'&lt;br&gt;
it normally takes 10–15 min.&lt;br&gt;
Once the status is available, check the details&lt;br&gt;
Connectivity &amp;amp; security: Note the Database endpoint&lt;br&gt;
In new tab, go to the EC2 dashboard and note Public and Private IPs of the EC2 instance.&lt;br&gt;
Come back on RDS database details and Click on the security group to open in new tab.&lt;br&gt;
Go to inbound rules =&amp;gt; Edit inbound rules&lt;br&gt;
Add following three rules:&lt;br&gt;
Type:MySQL/Aurora, Port range: 3306, Custom, 0.0.0.0/0&lt;br&gt;
Type:MySQL/Aurora, Port range: 3306, Custom, &lt;br&gt;
Type:MySQL/Aurora, Port range: 3306, Custom, &lt;/p&gt;

&lt;p&gt;Save rules.&lt;br&gt;
Step 3: Now, Change the phpMyAdmin configuration to point to the RDS database in step-2. Go to EC2 instance and perform following steps&lt;br&gt;
&lt;code&gt;&lt;br&gt;
sudo su&lt;br&gt;
cd /opt/bitnami/apps/phpmyadmin/htdocs/&lt;br&gt;
chmod 777 config.inc.php&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Open this config.inc.php with your preferred editor e.g. vi or nano&lt;/p&gt;

&lt;p&gt;'&lt;br&gt;
vi config.inc.php&lt;br&gt;
'&lt;br&gt;
Go to the end of file (in vi, you can use shift+G), press 'o' to add a new line in the end.&lt;br&gt;
copy-paste following in the end of file. Make sure to replace database endpoint at line 3. To paste you can use Shift+Insert or Shift+rightclick&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
$i++;&lt;br&gt;
$cfg['Servers'][$i]['verbose'] = 'Amazon RDS';&lt;br&gt;
$cfg['Servers'][$i]['host'] = 'wordpress2.cdwwbxbm9nrk.us-east-1.rds.amazonaws.com';&lt;br&gt;
$cfg['Servers'][$i]['port'] = '3306';&lt;br&gt;
$cfg['Servers'][$i]['socket'] = '';&lt;br&gt;
$cfg['Servers'][$i]['connect_type'] = 'tcp';&lt;br&gt;
$cfg['Servers'][$i]['extension'] = 'mysqli';&lt;br&gt;
$cfg['Servers'][$i]['auth_type'] = 'cookie';&lt;br&gt;
$cfg['Servers'][$i]['AllowNoPassword'] = false;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now to save file. Press Esc, then :wq (write &amp;amp; quit)&lt;br&gt;
Change the file permissions back&lt;/p&gt;

&lt;p&gt;&lt;code&gt;chmod 644 config.inc.php&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, go to phpMyAdmin client via browser: &lt;a href="http://localhost:8888/phpmyadmin/index.php" rel="noopener noreferrer"&gt;http://localhost:8888/phpmyadmin/index.php&lt;/a&gt;&lt;br&gt;
At login screen, provide the RDS credentials ie&lt;br&gt;
user: admin, Password: Welcome1, Server Choice: Amazon RDS&lt;br&gt;
At this stage, you are connected to DB client which is pointing to Amazon RDS.&lt;br&gt;
Step 4: Now let's import the database which we exported in Step1&lt;br&gt;
in phpMyAdmin, click on your database name 'wordpress2', and then click on "import", choose file bitnami_wordpress.sql from your downloads&lt;br&gt;
And, click on Go. It will import all tables &amp;amp; data as exported from original database.&lt;br&gt;
Step 5: So far we have fixed the db client myphpadmin to point to new DB, Now, we also need to point our web application to talk to new RDS instance.&lt;br&gt;
To do that, perform following steps:&lt;br&gt;
From EC2 command prompt&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
cd /opt/bitnami/apps/wordpress/htdocs&lt;br&gt;
chmod 777 wp-config.php&lt;br&gt;
vi wp-config.php&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;in first section of this file update the DB details [DBName, User, Password, Host]:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
/** The name of the database for WordPress *//** MySQL database username *//** MySQL database password *//** MySQL hostname *//** Database Charset to use in creating database tables. *//** The Database Collate type. Don't change this if in doubt. */&lt;br&gt;
define( 'DB_NAME', 'wordpress2' ); &lt;br&gt;
define( 'DB_USER', 'admin' ); &lt;br&gt;
define( 'DB_PASSWORD', 'Welcome1' ); &lt;br&gt;
define( 'DB_HOST', 'wordpress2.cdwwbxbm9nrk.us-east-1.rds.amazonaws.com' ); &lt;br&gt;
define( 'DB_CHARSET', 'utf8' ); &lt;br&gt;
define( 'DB_COLLATE', '' );&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Save the file and change the file permissions back.&lt;br&gt;
&lt;code&gt;chmod 644 wp-config.php&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Try to access application via Public DNS.&lt;br&gt;
Post new comment and check in DB via phpMyAdmin.&lt;br&gt;
Now we are done with this excercise. Make sure to delete RDS instance and EC2 instance to avoid un-necessary charges&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Containerize Microservice with Amazon ECS and Application Load Balancer</title>
      <dc:creator>Dipali Kulshrestha</dc:creator>
      <pubDate>Sat, 08 May 2021 07:19:00 +0000</pubDate>
      <link>https://dev.to/aws-builders/containerize-microservice-with-amazon-ecs-and-application-load-balancer-c67</link>
      <guid>https://dev.to/aws-builders/containerize-microservice-with-amazon-ecs-and-application-load-balancer-c67</guid>
      <description>&lt;p&gt;In this tutorial, we will create a python based microservice and will deploy on to Amazon ECS along with Application Load Balancer with dynamic port mapping. Here we will create three images of microservice which will run behind an Application Load Balancer on ECS.&lt;br&gt;
To achieve this we will perform following steps:&lt;br&gt;
Step1: Create microservice app [3 separate apps to see the ALB effect]&lt;br&gt;
Step 2: Create Dockerfile(s)&lt;br&gt;
Step3: Create ECR Repository and push images to ECR&lt;br&gt;
Step4: Create ECS cluster&lt;br&gt;
Step5: Create Task Definition &amp;amp; add container information&lt;br&gt;
Step6: Create Service to run the Task definition&lt;br&gt;
Step7: Create Application Load Balancer&lt;br&gt;
Step8: Fix security group settings&lt;br&gt;
Step9: Complete creation of service by providing ALB name&lt;br&gt;
Step10: Verify the running services&lt;br&gt;
Step11: Delete resources (ECS Cluster, Load Balancer)&lt;br&gt;
Here we are creating a sample python based simple 'Hello World' microservice app. Lets write its code in index.py using flask which is a small HTTP server for python apps&lt;/p&gt;

&lt;p&gt;index.py&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
from flask import Flask&lt;br&gt;
app = Flask(__name__)&lt;br&gt;
@app.route("/service-1")&lt;br&gt;
def hello():&lt;br&gt;
 return "Hello World from service-1!"&lt;br&gt;
if __name__ == "__main__":&lt;br&gt;
 app.run(host="0.0.0.0", port=int("5001"), debug=True)&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dockerfile&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
FROM python:alpine3.7&lt;br&gt;
COPY . /app&lt;br&gt;
WORKDIR /app&lt;br&gt;
RUN pip install -r requirements.txt&lt;br&gt;
EXPOSE 5001&lt;br&gt;
ENTRYPOINT ["python","./index.py"]&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Where &lt;strong&gt;FROM&lt;/strong&gt; directive is to tell Docker that which base image is to take from Docker Hub.&lt;br&gt;
COPY directive moves the application into the container image&lt;br&gt;
&lt;strong&gt;WORKDIR&lt;/strong&gt; sets the working directory&lt;br&gt;
RUN directive is calling PyPi(pip) to install dependencies available in file: "requirements.txt"&lt;br&gt;
&lt;strong&gt;EXPOSE&lt;/strong&gt; directive is to expose a port to be used by flask&lt;br&gt;
&lt;strong&gt;ENTRYPOINT&lt;/strong&gt; command is to execute the actual application script&lt;/p&gt;

&lt;p&gt;requirements.txt&lt;br&gt;
Check if Docker is available on machine&lt;br&gt;
&lt;code&gt;&lt;br&gt;
docker --version&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Steps to install Docker on Linux ec2 (if not already available)&lt;br&gt;
&lt;code&gt;&lt;br&gt;
install docker on ec2: sudo yum update -ysudo usermod -a -G docker ec2-user==&amp;gt; login again&lt;br&gt;
sudo yum install -y docker&lt;br&gt;
sudo service docker start &lt;br&gt;
exit &lt;br&gt;
docker info&lt;br&gt;
docker --version&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
So by now we have created index.py, requirements.txt, Dockerfile for our first microservice service-1 which is set to run at 5001 port. Similarly create service-2 and service-3 on ports 5002 and 5003 respectively.&lt;br&gt;
Now lets create the Elastic Container repository (ECR) repository and create and push images to that repository.&lt;br&gt;
Go to the AWS management console and open ECR dashboard,provide the repository name as 'microservices-repo' and leave everything default and click on create repository.&lt;br&gt;
Now select the repository and click on 'View Push Commands' option&lt;br&gt;
Which will give you the commands to Login (via CLI), Create image, Create tag and push tag to ECR repository&lt;br&gt;
Ensure you have awscli version2 configured&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
To check cli version you can run:&lt;br&gt;
aws --version&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Else, run 'aws configure' and use access key and secret key to configure the same.&lt;br&gt;
I have used following commands to create and push the three images to ECR repo.&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com&lt;br&gt;
 docker build -t microservices-repo:service-1 .&lt;br&gt;
 docker tag microservices-repo:service-1 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com/microservices-repo:service-1&lt;br&gt;
 docker push 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com/microservices-repo:service-1&lt;/p&gt;

&lt;p&gt;aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com&lt;br&gt;
 docker build -t microservices-repo:service-2 .&lt;br&gt;
 docker tag microservices-repo:service-2 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com/microservices-repo:service-2&lt;br&gt;
 docker push 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com/microservices-repo:service-2&lt;/p&gt;

&lt;p&gt;aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com&lt;br&gt;
 docker build -t microservices-repo:service-3 .&lt;br&gt;
 docker tag microservices-repo:service-3 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com/microservices-repo:service-3&lt;br&gt;
 docker push 16xxxxxx.dkr.ecr.us-east-1.amazonaws.com/microservices-repo:service-3&lt;br&gt;
`&lt;br&gt;
Once we have clearly tagged images in to the repository, Next step is to create ECS cluster&lt;br&gt;
Go to the Amazon ECS dashboard =&amp;gt; Cluster =&amp;gt;Create Cluster and consider following configurations while cluster creation:&lt;br&gt;
Select Cluster template as "EC2 Linux + Networking"&lt;br&gt;
Provide cluster name as 'microservices-cluster'&lt;br&gt;
choose EC2 instance type as 't3.small'&lt;br&gt;
Number of instances '2'&lt;br&gt;
and leave rest everything as default.&lt;br&gt;
it will create a Cluster with 2 EC2 instances in a new VPC and a new security group with name starting from 'EC2ContainerService….'&lt;br&gt;
From the ECS dashboard go to Task Definition =&amp;gt; Create New Task Definition with launch type as EC2&lt;br&gt;
Name: service-1-td, and click on Add Container (refer snapshot below)&lt;br&gt;
Now use following configurations to add container:&lt;br&gt;
Container Name: service-1-cont&lt;br&gt;
image: image URI of service-1 tag from ECR&lt;br&gt;
Memory Limit: Soft Limit - 512&lt;br&gt;
Port mapping: 80 =&amp;gt; 5001&lt;br&gt;
then click on Add&lt;br&gt;
Snapshot below for reference:&lt;br&gt;
Then click on create for Task definition to get created.&lt;br&gt;
Similarly create 2 more Task definitions for service-2 and service-3&lt;br&gt;
The only difference will be in the container port mapping. here to allow dynamic post mapping via ALB, we will map port 0 to 5002 and 0 to 5003. Please refer snapshot below:&lt;br&gt;
Once, we have Task Definition ready, its time to create Service (which will be run using task definition template created in this step.&lt;br&gt;
Open the cluster and click on 'Create' under Services tab&lt;br&gt;
Consider following service configurations:&lt;br&gt;
Launch type: EC2&lt;br&gt;
Task Definition: service-1-td&lt;br&gt;
service name: service-1&lt;br&gt;
No. of tasks: 1&lt;br&gt;
Choose Task Placement as 'BinPack' and Click on 'Next Step'. Under Load balancing we need to use Application Load Balancer. For which we need to create and ALB first.&lt;br&gt;
In New tab, Open EC2 console and go to the 'Load balancer' While ALB creation, it is very important to create this ALB in the same VPC as of ECS cluster, use following configurations for ALB:&lt;br&gt;
Name: microservicesLB&lt;br&gt;
Listeners: HTTP : 80&lt;br&gt;
VPC: (choose VPC as of ECS cluster) and select AZs&lt;br&gt;
Then click on "Configure Security Settings" and then "Next: Configure Security Groups"&lt;br&gt;
Create new Security Group named: MicroservicesLB-SG&lt;br&gt;
Now, Click on "Next: Configure Routing"&lt;br&gt;
Create New Target Group with Name: MicroservicesLB-TG&lt;br&gt;
Then, Click on "Next: Register Targets"&lt;br&gt;
Here, we do not need to register any targets (as these will be registered via ECS), Simply click on "Next: Review" and then "Create"&lt;br&gt;
Once Load balancer is created, Note down (copy) the Security group id of this load balancer&lt;br&gt;
Click on this Security group id, it will take you to the Security Groups page under EC2&lt;br&gt;
Open the EC2 container service security group, and edit inbound rules to allow traffic from Load balancer security group with All TCP protocol and save rule.&lt;br&gt;
Now, Come back to the service creation tab. under Load Balancing section choose Application Load balancer and select the load balancer name just created. Also ensure Container name:Port mapping already populated with correct port&lt;br&gt;
Now, Click on "Add to Load balancer"&lt;br&gt;
Choose following configuration in 'Container to Load balance' section&lt;br&gt;
Production Listener Port: 80:HTTP&lt;br&gt;
Leave the default Target group name&lt;br&gt;
Make sure Path pattern exactly matches with the end-point in your application script (index.py) followed by /*&lt;br&gt;
Provide Evaluation order as 1 or 2 or 3 for service-1, service-2, service-3 respectively&lt;br&gt;
Health check path should also be the same as end-point&lt;br&gt;
Click on Next step =&amp;gt;Next Step and Create Service&lt;br&gt;
Once the service is created, pick the DNS of ALB followed by /service-1 (service-2 or service-3)&lt;br&gt;
it should display the running application with message: Hello World from Service-1!&lt;br&gt;
e.g. refer snapshot below:&lt;br&gt;
Step11: Delete resources (ECS Cluster, Load Balancer)&lt;br&gt;
Go to ECS Dashboard =&amp;gt; open cluster =&amp;gt; Delete Cluster&lt;br&gt;
Go To Load Balancer via EC2 =&amp;gt; Select Load Blancer =&amp;gt;Actions =&amp;gt;Delete&lt;/p&gt;

</description>
      <category>aws</category>
      <category>containers</category>
      <category>ecs</category>
      <category>microservices</category>
    </item>
  </channel>
</rss>
