<?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: Pragnesh Patel</title>
    <description>The latest articles on DEV Community by Pragnesh Patel (@pragnesh_patel).</description>
    <link>https://dev.to/pragnesh_patel</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%2F3424038%2F332ecb3c-f48c-42bb-a87a-cd381ac535f4.jpg</url>
      <title>DEV Community: Pragnesh Patel</title>
      <link>https://dev.to/pragnesh_patel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pragnesh_patel"/>
    <language>en</language>
    <item>
      <title>Day 15: Best Practices, Troubleshooting, and Next Steps in AWS ECS</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Mon, 25 Aug 2025 04:35:37 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-15-best-practices-troubleshooting-and-next-steps-in-aws-ecs-5m8</link>
      <guid>https://dev.to/pragnesh_patel/day-15-best-practices-troubleshooting-and-next-steps-in-aws-ecs-5m8</guid>
      <description>&lt;p&gt;We've reached the end! Recap from &lt;a href="https://dev.to/pragnesh_patel/day-14-advanced-ecs-features-secrets-management-volumes-and-fargate-spot-1361"&gt;Day 14&lt;/a&gt; and the series.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use Fargate for simplicity.&lt;/li&gt;
&lt;li&gt;Implement least privilege IAM.&lt;/li&gt;
&lt;li&gt;Enable logging/monitoring.&lt;/li&gt;
&lt;li&gt;Use blue/green deployments (new in 2025 for safer releases).&lt;/li&gt;
&lt;li&gt;Cost: Monitor with Cost Explorer; use Spot for non-prod.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Category&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Tip&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scan images, use private ECR.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Right-size CPU/memory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto-scale, delete unused.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Permissions: Check IAM errors.&lt;/li&gt;
&lt;li&gt;Networking: Verify SGs, subnets.&lt;/li&gt;
&lt;li&gt;Logs: Use CloudWatch for container crashes.&lt;/li&gt;
&lt;li&gt;Common: "No Container Instances" – add capacity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Explore ECS Anywhere for on-prem.&lt;/li&gt;
&lt;li&gt;Try Kubernetes with EKS.&lt;/li&gt;
&lt;li&gt;Build a full app: Add DB with RDS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cheat Sheet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cluster: &lt;code&gt;aws ecs create-cluster&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Task: &lt;code&gt;aws ecs register-task-definition&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Service: &lt;code&gt;aws ecs create-service&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Ffp2rn1kjvsjf6johswn1.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%2Ffp2rn1kjvsjf6johswn1.png" alt="Architecture" width="800" height="688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for following! Links to all days: &lt;a href="https://dev.to/pragnesh_patel/day-1-introduction-to-containers-and-why-aws-ecs-245f"&gt;Day 1&lt;/a&gt;, ..., &lt;a href="https://dev.to/pragnesh_patel/day-14-advanced-ecs-features-secrets-management-volumes-and-fargate-spot-1361"&gt;Day 14&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What's your ECS project? Comment below!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
      <category>learning</category>
    </item>
    <item>
      <title>Day 14: Advanced ECS Features: Secrets Management, Volumes, and Fargate Spot</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Sun, 24 Aug 2025 03:44:56 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-14-advanced-ecs-features-secrets-management-volumes-and-fargate-spot-1361</link>
      <guid>https://dev.to/pragnesh_patel/day-14-advanced-ecs-features-secrets-management-volumes-and-fargate-spot-1361</guid>
      <description>&lt;p&gt;Building on &lt;a href="https://dev.to/pragnesh_patel/day-13-cicd-for-ecs-integrating-with-aws-codepipeline-or-github-actions-4k96"&gt;Day 13&lt;/a&gt;, add pro features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Secrets Management
&lt;/h2&gt;

&lt;p&gt;Use AWS Secrets Manager: Create secret, reference in task def:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"secrets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MY_SECRET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"valueFrom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:secretsmanager:region:account:secret:my-secret"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Access in code: process.env.MY_SECRET&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%2Flkhvd6drzttkjk0ymgso.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%2Flkhvd6drzttkjk0ymgso.png" alt="Secret" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Volumes
&lt;/h2&gt;

&lt;p&gt;For persistence, use EFS: Create file system, mount in task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"volumes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"efs-vol"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"efsVolumeConfiguration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"fileSystemId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fs-id"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"mountPoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"sourceVolume"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"efs-vol"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"containerPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/data"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Fargate Spot
&lt;/h2&gt;

&lt;p&gt;For cost savings: In service, use capacity provider strategy with Fargate Spot.&lt;/p&gt;

&lt;p&gt;Pros: Up to 70% cheaper; Cons: Interruptible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Advanced and optimized!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 15, we’ll wrap up with best practices.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
    </item>
    <item>
      <title>Day 13: CI/CD for ECS: Integrating with AWS CodePipeline or GitHub Actions</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Sat, 23 Aug 2025 03:14:09 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-13-cicd-for-ecs-integrating-with-aws-codepipeline-or-github-actions-4k96</link>
      <guid>https://dev.to/pragnesh_patel/day-13-cicd-for-ecs-integrating-with-aws-codepipeline-or-github-actions-4k96</guid>
      <description>&lt;p&gt;From &lt;a href="https://dev.to/pragnesh_patel/day-12-monitoring-and-logging-with-cloudwatch-and-ecs-insights-1o9"&gt;Day 12&lt;/a&gt;, automate deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: GitHub Actions (Free Tier Friendly)
&lt;/h2&gt;

&lt;p&gt;In repo &lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy to ECS&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Configure AWS&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-actions/configure-aws-credentials@v4&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;aws-access-key-id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.AWS_ACCESS_KEY_ID }}&lt;/span&gt;
        &lt;span class="na"&gt;aws-secret-access-key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.AWS_SECRET_ACCESS_KEY }}&lt;/span&gt;
        &lt;span class="na"&gt;aws-region&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;us-west-2&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Login to ECR&lt;/span&gt;
      &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;login-ecr&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-actions/amazon-ecr-login@v2&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build, tag, push&lt;/span&gt;
      &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ECR_REGISTRY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ steps.login-ecr.outputs.registry }}&lt;/span&gt;
        &lt;span class="na"&gt;ECR_REPOSITORY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-app-repo&lt;/span&gt;
        &lt;span class="na"&gt;IMAGE_TAG&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;latest&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .&lt;/span&gt;
        &lt;span class="s"&gt;docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update ECS&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add secrets in GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: CodePipeline
&lt;/h2&gt;

&lt;p&gt;Console: CodePipeline &amp;gt; Create &amp;gt; Source: GitHub, Build: CodeBuild (Docker build spec), Deploy: ECS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Automated pipelines!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 14, we’ll explore advanced ECS features.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
    </item>
    <item>
      <title>Day 12: Monitoring and Logging with CloudWatch and ECS Insights</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Fri, 22 Aug 2025 04:02:34 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-12-monitoring-and-logging-with-cloudwatch-and-ecs-insights-1o9</link>
      <guid>https://dev.to/pragnesh_patel/day-12-monitoring-and-logging-with-cloudwatch-and-ecs-insights-1o9</guid>
      <description>&lt;p&gt;Continuing &lt;a href="https://dev.to/pragnesh_patel/day-11-scaling-ecs-auto-scaling-and-capacity-providers-106c"&gt;Day 11&lt;/a&gt;, monitor health.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable CloudWatch Logs
&lt;/h2&gt;

&lt;p&gt;In task def, add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"logConfiguration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"logDriver"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"awslogs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"awslogs-group"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/ecs/my-task"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"awslogs-region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"us-west-2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"awslogs-stream-prefix"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ecs"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create log group first.&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%2Ff00ylkxa4iwle48qpwmg.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%2Ff00ylkxa4iwle48qpwmg.png" alt="Cloudwatch" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Metrics and Dashboards
&lt;/h2&gt;

&lt;p&gt;Console: CloudWatch &amp;gt; Metrics &amp;gt; ECS.&lt;/p&gt;

&lt;p&gt;Create dashboard for CPU/Memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  ECS Container Insights
&lt;/h2&gt;

&lt;p&gt;Enable in ECS console for advanced metrics.&lt;/p&gt;

&lt;p&gt;Alerts: CloudWatch &amp;gt; Alarms &amp;gt; Create (e.g., CPU &amp;gt; 80%).&lt;/p&gt;

&lt;p&gt;Query logs: &lt;code&gt;fields @timestamp, @message | filter @message like /error/&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Monitored and logged!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 13, we’ll set up CI/CD.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
      <category>cloudwatch</category>
    </item>
    <item>
      <title>Day 11: Scaling ECS: Auto Scaling and Capacity Providers</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Thu, 21 Aug 2025 04:05:53 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-11-scaling-ecs-auto-scaling-and-capacity-providers-106c</link>
      <guid>https://dev.to/pragnesh_patel/day-11-scaling-ecs-auto-scaling-and-capacity-providers-106c</guid>
      <description>&lt;p&gt;From &lt;a href="https://dev.to/pragnesh_patel/day-10-networking-in-ecs-vpcs-security-groups-and-load-balancers-2lge"&gt;Day 10&lt;/a&gt;, scale dynamically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Service Auto Scaling
&lt;/h2&gt;

&lt;p&gt;Console: Service &amp;gt; Update &amp;gt; Scaling &amp;gt; Set min/max/desired.&lt;/p&gt;

&lt;p&gt;Policy: Target tracking on CPU (e.g., 70%).&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%2F495b7cz53sjhrgspbg09.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%2F495b7cz53sjhrgspbg09.png" alt="TG" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CLI example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws application-autoscaling register-scalable-target &lt;span class="nt"&gt;--service-namespace&lt;/span&gt; ecs &lt;span class="nt"&gt;--resource-id&lt;/span&gt; service/my-cluster/my-service &lt;span class="nt"&gt;--scalable-dimension&lt;/span&gt; ecs:service:DesiredCount &lt;span class="nt"&gt;--min-capacity&lt;/span&gt; 1 &lt;span class="nt"&gt;--max-capacity&lt;/span&gt; 10

aws application-autoscaling put-scaling-policy &lt;span class="nt"&gt;--policy-name&lt;/span&gt; cpu70 &lt;span class="nt"&gt;--service-namespace&lt;/span&gt; ecs &lt;span class="nt"&gt;--resource-id&lt;/span&gt; service/my-cluster/my-service &lt;span class="nt"&gt;--scalable-dimension&lt;/span&gt; ecs:service:DesiredCount &lt;span class="nt"&gt;--policy-type&lt;/span&gt; TargetTrackingScaling &lt;span class="nt"&gt;--target-tracking-scaling-policy-configuration&lt;/span&gt; &lt;span class="s1"&gt;'{ "TargetValue": 70, "PredefinedMetricSpecification": { "PredefinedMetricType": "ECSServiceAverageCPUUtilization" } }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Capacity Providers (EC2)
&lt;/h2&gt;

&lt;p&gt;For EC2 launch type: Create ASG, then capacity provider.&lt;/p&gt;

&lt;p&gt;For Fargate, auto-handled.&lt;/p&gt;

&lt;p&gt;Test: Use tools like Apache Bench to load test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Scalable services!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 12, we’ll monitor with CloudWatch.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
      <category>learning</category>
    </item>
    <item>
      <title>Day 10: Networking in ECS: VPCs, Security Groups, and Load Balancers</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Wed, 20 Aug 2025 04:06:49 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-10-networking-in-ecs-vpcs-security-groups-and-load-balancers-2lge</link>
      <guid>https://dev.to/pragnesh_patel/day-10-networking-in-ecs-vpcs-security-groups-and-load-balancers-2lge</guid>
      <description>&lt;p&gt;After &lt;a href="https://dev.to/pragnesh_patel/day-9-ecs-services-deploying-and-managing-tasks-20o"&gt;Day 9&lt;/a&gt;, let's secure and balance traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: VPC Setup
&lt;/h2&gt;

&lt;p&gt;If not default, create VPC: Console &amp;gt; VPC &amp;gt; Create VPC &amp;gt; Resources: VPC and more.&lt;/p&gt;

&lt;p&gt;Subnets: Public for internet access.&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%2Fdj5l7ewcnczbnqrdswhv.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%2Fdj5l7ewcnczbnqrdswhv.png" alt="VPC" width="461" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Security Groups
&lt;/h2&gt;

&lt;p&gt;Create SG: Allow inbound TCP 3000 from anywhere (for testing).&lt;/p&gt;

&lt;p&gt;Attach to service.&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%2Fp0zltl5g78jfvpw3f999.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%2Fp0zltl5g78jfvpw3f999.png" alt="SG" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Application Load Balancer (ALB)
&lt;/h2&gt;

&lt;p&gt;Create ALB: EC2 &amp;gt; Load Balancers &amp;gt; Create &amp;gt; ALB.&lt;/p&gt;

&lt;p&gt;Target group: IP targets, port 3000.&lt;/p&gt;

&lt;p&gt;In service creation/update, add load balancer.&lt;/p&gt;

&lt;p&gt;Test: ALB DNS name.&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%2Fl5pdei64vhc0whw9bmcy.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%2Fl5pdei64vhc0whw9bmcy.png" alt="ALB" width="600" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Networked and load-balanced!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 11, we’ll scale ECS services.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
      <category>learning</category>
    </item>
    <item>
      <title>Day 9: ECS Services: Deploying and Managing Tasks</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Tue, 19 Aug 2025 04:03:27 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-9-ecs-services-deploying-and-managing-tasks-20o</link>
      <guid>https://dev.to/pragnesh_patel/day-9-ecs-services-deploying-and-managing-tasks-20o</guid>
      <description>&lt;p&gt;From &lt;a href="https://dev.to/pragnesh_patel/day-8-ecs-task-definitions-defining-your-containers-2mcl"&gt;Day 8&lt;/a&gt;, tasks are one-off. Services run tasks continuously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Service
&lt;/h2&gt;

&lt;p&gt;Console: ECS &amp;gt; Clusters &amp;gt; my-cluster &amp;gt; Create service &amp;gt; Fargate, task def: my-task, desired tasks: 1.&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%2Fi7evrwvojn17rhch8uuy.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%2Fi7evrwvojn17rhch8uuy.png" alt="AWS_Cluster" width="800" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs create-service &lt;span class="nt"&gt;--cluster&lt;/span&gt; my-cluster &lt;span class="nt"&gt;--service-name&lt;/span&gt; my-service &lt;span class="nt"&gt;--task-definition&lt;/span&gt; my-task &lt;span class="nt"&gt;--desired-count&lt;/span&gt; 1 &lt;span class="nt"&gt;--launch-type&lt;/span&gt; FARGATE &lt;span class="nt"&gt;--network-configuration&lt;/span&gt; &lt;span class="s2"&gt;"awsvpcConfiguration={subnets=[subnet-id],securityGroups=[sg-id],assignPublicIp=ENABLED}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Access via public IP (from task details).&lt;/p&gt;

&lt;h2&gt;
  
  
  Managing Services
&lt;/h2&gt;

&lt;p&gt;Update: &lt;code&gt;aws ecs update-service --cluster my-cluster --service my-service --desired-count 2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Rollback: Via console revisions.&lt;/p&gt;

&lt;p&gt;Delete: &lt;code&gt;aws ecs delete-service --cluster my-cluster --service my-service --force&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Services deployed!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 10, we’ll explore networking.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
    </item>
    <item>
      <title>Day 8: ECS Task Definitions: Defining Your Containers</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Mon, 18 Aug 2025 04:42:21 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-8-ecs-task-definitions-defining-your-containers-2mcl</link>
      <guid>https://dev.to/pragnesh_patel/day-8-ecs-task-definitions-defining-your-containers-2mcl</guid>
      <description>&lt;p&gt;Building on &lt;a href="https://dev.to/pragnesh_patel/day-7-ecs-fundamentals-clusters-and-launch-types-3a5a"&gt;Day 7&lt;/a&gt;, today: Task definitions—the blueprint for containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Parameters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Container definitions: Image, ports, CPU/memory.&lt;/li&gt;
&lt;li&gt;Volumes, networking, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Create Task Definition
&lt;/h2&gt;

&lt;p&gt;JSON example for our app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"family"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-task"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"containerDefinitions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-container"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;account-id&amp;gt;.dkr.ecr.us-west-2.amazonaws.com/my-app-repo:latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cpu"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"memory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"portMappings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"containerPort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"hostPort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"essential"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"requiresCompatibilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"FARGATE"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"networkMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"awsvpc"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cpu"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"256"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"memory"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"512"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Register via CLI: &lt;code&gt;aws ecs register-task-definition --cli-input-json file://task.json&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Run a Task
&lt;/h2&gt;

&lt;p&gt;Console: ECS &amp;gt; Clusters &amp;gt; my-cluster &amp;gt; Tasks &amp;gt; Run new task &amp;gt; Select definition.&lt;/p&gt;

&lt;p&gt;CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs run-task &lt;span class="nt"&gt;--cluster&lt;/span&gt; my-cluster &lt;span class="nt"&gt;--task-definition&lt;/span&gt; my-task &lt;span class="nt"&gt;--launch-type&lt;/span&gt; FARGATE &lt;span class="nt"&gt;--network-configuration&lt;/span&gt; &lt;span class="s2"&gt;"awsvpcConfiguration={subnets=[subnet-id],securityGroups=[sg-id],assignPublicIp=ENABLED}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check logs in console.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Tasks defined and running!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 9, we’ll deploy ECS services.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
    </item>
    <item>
      <title>Day 7: ECS Fundamentals: Clusters and Launch Types</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Sun, 17 Aug 2025 03:41:50 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-7-ecs-fundamentals-clusters-and-launch-types-3a5a</link>
      <guid>https://dev.to/pragnesh_patel/day-7-ecs-fundamentals-clusters-and-launch-types-3a5a</guid>
      <description>&lt;p&gt;After &lt;a href="https://dev.to/pragnesh_patel/day-6-integrating-docker-with-aws-ecr-build-tag-and-push-images-dog"&gt;Day 6&lt;/a&gt;, images are in ECR. Today: ECS clusters and launch types.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an ECS Cluster?
&lt;/h2&gt;

&lt;p&gt;A logical grouping of tasks/services. Infrastructure-agnostic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Launch Types Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Aspect&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Fargate&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;EC2&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Serverless, AWS handles servers&lt;/td&gt;
&lt;td&gt;You manage EC2 instances&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pay per vCPU/memory&lt;/td&gt;
&lt;td&gt;Pay for instances + reservations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Use Case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Simple, quick setups&lt;/td&gt;
&lt;td&gt;Custom hardware, cost control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scaling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto via service&lt;/td&gt;
&lt;td&gt;Auto Scaling groups&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As of 2025, Fargate offers better isolation; EC2 for flexibility.&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%2Fwcyaqh2nk3cegv3xnnft.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%2Fwcyaqh2nk3cegv3xnnft.png" alt="ECS vs EC2" width="700" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create a Cluster
&lt;/h2&gt;

&lt;p&gt;Console: ECS &amp;gt; Clusters &amp;gt; Create &amp;gt; Fargate (networking only).&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%2Fqs36mkfdj2xh9ir44bbn.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%2Fqs36mkfdj2xh9ir44bbn.png" alt="AWS ECS" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs create-cluster &lt;span class="nt"&gt;--cluster-name&lt;/span&gt; my-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delete after to avoid costs: &lt;code&gt;aws ecs delete-cluster --cluster my-cluster&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Clusters ready! Next, task definitions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 8, we’ll define ECS tasks.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
    </item>
    <item>
      <title>Day 6: Integrating Docker with AWS ECR: Build, Tag, and Push Images</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Sat, 16 Aug 2025 03:18:43 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-6-integrating-docker-with-aws-ecr-build-tag-and-push-images-dog</link>
      <guid>https://dev.to/pragnesh_patel/day-6-integrating-docker-with-aws-ecr-build-tag-and-push-images-dog</guid>
      <description>&lt;p&gt;From &lt;a href="https://dev.to/pragnesh_patel/day-5-aws-ecr-creating-and-managing-container-registries-1a9g"&gt;Day 5&lt;/a&gt;, we have an ECR repo. Today, build on Day 3's app: build, tag, and push to ECR.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Authenticate Docker to ECR
&lt;/h2&gt;

&lt;p&gt;Get login command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecr get-login-password &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2 | docker login &lt;span class="nt"&gt;--username&lt;/span&gt; AWS &lt;span class="nt"&gt;--password-stdin&lt;/span&gt; &amp;lt;account-id&amp;gt;.dkr.ecr.us-west-2.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Build and Tag the Image
&lt;/h2&gt;

&lt;p&gt;In my-app dir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; my-app &lt;span class="nb"&gt;.&lt;/span&gt;
docker tag my-app:latest &amp;lt;account-id&amp;gt;.dkr.ecr.us-west-2.amazonaws.com/my-app-repo:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Push to ECR
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push &amp;lt;account-id&amp;gt;.dkr.ecr.us-west-2.amazonaws.com/my-app-repo:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify in ECR console.&lt;/p&gt;

&lt;p&gt;Troubleshooting: Check IAM permissions (AmazonEC2ContainerRegistryFullAccess).&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation Tip
&lt;/h2&gt;

&lt;p&gt;Use a script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;REPO_URI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;account-id&amp;gt;.dkr.ecr.us-west-2.amazonaws.com/my-app-repo
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; my-app &lt;span class="nb"&gt;.&lt;/span&gt;
docker tag my-app:latest &lt;span class="nv"&gt;$REPO_URI&lt;/span&gt;:latest
aws ecr get-login-password | docker login &lt;span class="nt"&gt;--username&lt;/span&gt; AWS &lt;span class="nt"&gt;--password-stdin&lt;/span&gt; &lt;span class="nv"&gt;$REPO_URI&lt;/span&gt;
docker push &lt;span class="nv"&gt;$REPO_URI&lt;/span&gt;:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Your image is in the cloud! Ready for ECS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 7, we’ll explore ECS fundamentals.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
      <category>ecr</category>
    </item>
    <item>
      <title>Day 5: AWS ECR: Creating and Managing Container Registries</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Thu, 14 Aug 2025 14:09:40 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-5-aws-ecr-creating-and-managing-container-registries-1a9g</link>
      <guid>https://dev.to/pragnesh_patel/day-5-aws-ecr-creating-and-managing-container-registries-1a9g</guid>
      <description>&lt;p&gt;Continuing from &lt;a href="https://dev.to/pragnesh_patel/day-4-introduction-to-aws-account-setup-and-iam-basics-590d"&gt;Day 4&lt;/a&gt;, today we explore &lt;strong&gt;Amazon Elastic Container Registry (ECR)&lt;/strong&gt;, AWS's managed Docker registry. We'll create a repo and manage it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ECR?
&lt;/h2&gt;

&lt;p&gt;ECR stores Docker images securely, integrates with ECS, and handles authentication automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create an ECR Repository
&lt;/h2&gt;

&lt;p&gt;Via Console:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search for ECR in AWS Console.&lt;/li&gt;
&lt;li&gt;Click "Create repository."&lt;/li&gt;
&lt;li&gt;Choose private/public, name it (e.g., my-app-repo).&lt;/li&gt;
&lt;li&gt;Create.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Via CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecr create-repository &lt;span class="nt"&gt;--repository-name&lt;/span&gt; my-app-repo &lt;span class="nt"&gt;--region&lt;/span&gt; us-west-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Managing Repositories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Public vs. Private: Private for internal use; public for sharing.&lt;/li&gt;
&lt;li&gt;Lifecycle Policies: To clean old images, add policy via console (e.g., expire untagged images after 30 days).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rulePriority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Expire untagged images"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"selection"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"tagStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"untagged"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"countType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sinceImagePushed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"countUnit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"days"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"countNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"expire"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify: &lt;code&gt;aws ecr describe-repositories&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;ECR is set up! Tomorrow, push images to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 6, we’ll integrate Docker with ECR.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
      <category>ecr</category>
    </item>
    <item>
      <title>Day 4: Introduction to AWS: Account Setup and IAM Basics</title>
      <dc:creator>Pragnesh Patel</dc:creator>
      <pubDate>Wed, 13 Aug 2025 14:19:24 +0000</pubDate>
      <link>https://dev.to/pragnesh_patel/day-4-introduction-to-aws-account-setup-and-iam-basics-590d</link>
      <guid>https://dev.to/pragnesh_patel/day-4-introduction-to-aws-account-setup-and-iam-basics-590d</guid>
      <description>&lt;p&gt;Back for more? In &lt;a href="https://dev.to/pragnesh_patel/day-3-building-and-managing-docker-images-locally-20lc"&gt;Day 3&lt;/a&gt;, we built Docker images locally. Today, we shift to AWS: setting up an account and understanding IAM for secure access. This is crucial for ECS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Sign Up for AWS
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to aws.amazon.com and click "Create an AWS Account."&lt;/li&gt;
&lt;li&gt;Enter email, password, and account name.&lt;/li&gt;
&lt;li&gt;Provide billing info (Free Tier eligible for 12 months).&lt;/li&gt;
&lt;li&gt;Verify identity via phone/email.&lt;/li&gt;
&lt;li&gt;Choose support plan (Basic is free).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enable MFA on root user for security.&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%2Fsfd9noex7peik72pwux4.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%2Fsfd9noex7peik72pwux4.png" alt="AWS Login" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: AWS Regions and Billing
&lt;/h2&gt;

&lt;p&gt;AWS has global regions—choose one close to you (e.g., us-east-1). Set up billing alerts: Navigate to Billing &amp;gt; Billing preferences &amp;gt; Alert preferences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: IAM Basics
&lt;/h2&gt;

&lt;p&gt;IAM (Identity and Access Management) controls access.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In AWS Console, search for IAM.&lt;/li&gt;
&lt;li&gt;Create a user: Users &amp;gt; Create user &amp;gt; Attach policies (e.g., AdministratorAccess for learning).&lt;/li&gt;
&lt;li&gt;Create a access key ID and secret (for CLI). Select User &amp;gt; Security Credentials &amp;gt; Create access key.&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%2F709m6uw81zufyhzd9l7o.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%2F709m6uw81zufyhzd9l7o.png" alt="IAM" width="800" height="258"&gt;&lt;/a&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%2F473jhmmbgsj2epjgjcsi.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%2F473jhmmbgsj2epjgjcsi.png" alt="IAM" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install AWS CLI: &lt;code&gt;curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"&lt;/code&gt; (or equivalent), unzip, install.&lt;/p&gt;

&lt;p&gt;Configure: &lt;code&gt;aws configure&lt;/code&gt; with keys, region (e.g., us-west-2), output (json).&lt;/p&gt;

&lt;p&gt;Best practice: Use least privilege—create roles/policies as needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Takeaway
&lt;/h2&gt;

&lt;p&gt;Your AWS account is ready, with secure IAM setup. Tomorrow, ECR for image storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next?&lt;/strong&gt;&lt;br&gt;
In Day 5, we’ll create and manage an AWS ECR repository.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>ecs</category>
      <category>iam</category>
    </item>
  </channel>
</rss>
