AWS CLI ECS आणि ECR Commands: Image Push करा आणि Containers चालवा
Containers पाठवू: ECR मध्ये image ठेवा, docker ने push करा, मग ECS Fargate वर task आणि service म्हणून चालवा.
या chapter मध्ये तुम्ही काय शिकाल
- ECR repository बनवा
- Login करून image push
- Fargate cluster
- Task definition register
- Service चालवा, update करा
1. मोठं चित्र: tiffin service
हे का लागतं?
Tiffin kitchen रोज तोच डबा pack करतो. डबा = image, ECR = डब्यांची store room, ECS = delivery team जी योग्य संख्येने डबे पाठवत राहते.
हे काय आहे?
Images aws ecr मध्ये. चालवणं aws ecs: create-cluster, register-task-definition, run-task, create-service, update-service.
कसं करायचं (step by step)
2. ECR repository आणि push
हे का लागतं?
ECS ला image pull करायला private, जवळची जागा हवी.
हे काय आहे?
create-repository repo बनवतो. get-login-password docker login साठी 12 तासांचा token. मग repo URI ने tag करून push.
कसं करायचं (step by step)
- Repo बनवा.
URI=$(aws ecr create-repository --repository-name cli-web --image-scanning-configuration scanOnPush=true --query repository.repositoryUri --output text)
echo $URI
अपेक्षित output:
111122223333.dkr.ecr.ap-south-1.amazonaws.com/cli-web
- Docker login.
aws ecr get-login-password | docker login --username AWS --password-stdin ${URI%/*}
अपेक्षित output:
Login Succeeded
- Build, tag, push.
docker build -t cli-web .
docker tag cli-web:latest $URI:v1
docker push $URI:v1
अपेक्षित output:
v1: digest: sha256:9f8e... size: 1570
- Image verify.
aws ecr describe-images --repository-name cli-web --query "imageDetails[].imageTags" --output text
अपेक्षित output:
v1
3. Cluster आणि task definition
हे का लागतं?
ECS ला कोणती image, किती CPU, memory आणि port ते माहीत हवं.
हे काय आहे?
Cluster logical group. Task definition म्हणजे recipe: image, cpu, memory, ports, logs आणि ECR pull साठी execution role.
कसं करायचं (step by step)
- Cluster बनवा.
aws ecs create-cluster --cluster-name cli-cluster --query cluster.status --output text
अपेक्षित output:
ACTIVE
- Task definition लिहून register.
cat > td.json <<J
{"family":"cli-web","requiresCompatibilities":["FARGATE"],"networkMode":"awsvpc","cpu":"256","memory":"512",
"executionRoleArn":"arn:aws:iam::111122223333:role/ecsTaskExecutionRole",
"containerDefinitions":[{"name":"web","image":"111122223333.dkr.ecr.ap-south-1.amazonaws.com/cli-web:v1","portMappings":[{"containerPort":80}],
"logConfiguration":{"logDriver":"awslogs","options":{"awslogs-group":"/ecs/cli-web","awslogs-region":"ap-south-1","awslogs-stream-prefix":"web","awslogs-create-group":"true"}}}]}
J
aws ecs register-task-definition --cli-input-json file://td.json --query taskDefinition.taskDefinitionArn --output text
अपेक्षित output:
arn:aws:ecs:ap-south-1:111122223333:task-definition/cli-web:1
4. Task आणि service चालवा
हे का लागतं?
एकदाचं काम एकदाच; website ला कायम 2 copies हव्यात.
हे काय आहे?
run-task एकदा tasks सुरू करतो. create-service desiredCount tasks जिवंत ठेवतो. Fargate ला subnets, security group लागतात.
कसं करायचं (step by step)
- Service बनवा.
NET="awsvpcConfiguration={subnets=[subnet-0aaa111,subnet-0bbb222],securityGroups=[sg-0ccc333],assignPublicIp=ENABLED}"
aws ecs create-service --cluster cli-cluster --service-name web --task-definition cli-web:1 --desired-count 2 --launch-type FARGATE --network-configuration "$NET" --query service.status --output text
aws ecs wait services-stable --cluster cli-cluster --services web
अपेक्षित output:
ACTIVE
- Running tasks बघा.
aws ecs describe-services --cluster cli-cluster --services web --query "services[0].[desiredCount,runningCount]" --output text
अपेक्षित output:
2 2
- One-off task.
aws ecs run-task --cluster cli-cluster --task-definition cli-web:1 --launch-type FARGATE --network-configuration "$NET" --query "tasks[0].lastStatus" --output text
अपेक्षित output:
PROVISIONING
5. Update, scale, exec आणि logs
हे का लागतं?
v2 push केली, zero-downtime rollout हवा; किंवा container आत बघायचं.
हे काय आहे?
नवीन task definition सह update-service rolling deploy. --desired-count scale. execute-command shell उघडतो (enableExecuteCommand लागतो).
कसं करायचं (step by step)
- Revision 2 rollout, 3 ला scale.
aws ecs update-service --cluster cli-cluster --service web --task-definition cli-web:2 --desired-count 3 --query "service.deployments[0].rolloutState" --output text
अपेक्षित output:
IN_PROGRESS
- Container logs.
aws logs tail /ecs/cli-web --since 15m
अपेक्षित output:
web/web/4b5c... 10.0.1.23 - - "GET / HTTP/1.1" 200
- आत shell.
aws ecs execute-command --cluster cli-cluster --task 4b5c6d7e --container web --interactive --command "/bin/sh"
अपेक्षित output:
Starting session with SessionId: ...
#
6. हीच action Python, Node.js, Java, Go, .NET आणि PHP मध्ये
हे का लागतं?
Scripts CLI मध्ये सुरू होतात. Apps तोच API SDK मधून call करतात. दोन्ही माहीत असले की test केलेली command थेट code मध्ये नेता येते.
हे काय आहे?
प्रत्येक CLI command म्हणजे एक API call. उदा. aws ecs list-services --cluster cli-cluster म्हणजे List services API.
कसं करायचं (step by step)
हीच action (Services list) code मधून. प्रत्येक SDK CLI सारखेच profile, region आणि credentials वाचतो.
| Stack | Code |
|---|---|
| Python (boto3) | boto3.client("ecs").list_services(cluster="cli-cluster")["serviceArns"] |
| Node.js (v3) | await ecs.send(new ListServicesCommand({cluster:"cli-cluster"})); |
| Java (v2) | ecs.listServices(r -> r.cluster("cli-cluster")).serviceArns(); |
| Go (v2) | c.ListServices(ctx, &ecs.ListServicesInput{Cluster: aws.String("cli-cluster")}) |
| .NET | await ecs.ListServicesAsync(new ListServicesRequest{Cluster="cli-cluster"}); |
| PHP | $ecs->listServices(["cluster"=>"cli-cluster"]); |
7. काहीही खर्च चालू राहू नये म्हणून cleanup
हे का लागतं?
चालू ठेवलेले lab resources पैसे खातात आणि security risk बनतात.
हे काय आहे?
उलट्या क्रमाने delete करा: आधी children, मग parents.
कसं करायचं (step by step)
- Zero ला scale, service delete.
aws ecs delete-service --cluster cli-cluster --service web --force --query service.status --output text
अपेक्षित output:
DRAINING
- Cluster delete.
aws ecs wait services-inactive --cluster cli-cluster --services web
aws ecs delete-cluster --cluster cli-cluster --query cluster.status --output text
अपेक्षित output:
INACTIVE
- Repo आणि logs delete.
aws ecr delete-repository --repository-name cli-web --force --query repository.repositoryName --output text
aws logs delete-log-group --log-group-name /ecs/cli-web
अपेक्षित output:
cli-web
- Verify.
aws ecs list-clusters --query "clusterArns[?contains(@,'cli-cluster')]"
अपेक्षित output:
[]
Ravindra Bagale's Tip
Task PENDING मग STOPPED "CannotPullContainerError" म्हणजे ECR पर्यंत रस्ता नाही: public IP किंवा NAT द्या, execution role तपासा.
8. मुलाखत प्रश्न आणि उत्तरं
प्र. Task vs service?
Task एक copy; service desired संख्या राखते.
प्र. Execution vs task role?
Execution = pull, logs; task role = app चे AWS calls.
प्र. Fargate vs EC2?
Fargate serverless; EC2 तुमचे instances.
प्र. Rolling update कसा?
नवीन revision, update-service.
प्र. Docker ECR login कसा?
get-login-password | docker login.
घरी करून बघा
- छोट्या nginx image चे v1, v2 push करून service v1 → v2 roll करा.
- Date print करणारा one-off task चालवून log वाचा.
थोडक्यात सांगायचं तर
- ECR create-repository.
- get-login-password | docker login.
- Task definition = recipe.
- Service desired count राखते.
- update-service rollout.
सराव Tasks
Vidarbha Cotton Mills हा नागपूर मधला वस्त्रोद्योग व्यवसाय आहे. Ganesh Wankhede त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 10
सोपं ECS cluster बनवा
का: Cluster म्हणजे services व tasks चं logical घर.
काय करायचं: vidarbhacotton-cluster नावाचा ECS cluster बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं ECR repository बनवा
का: ECR तुमच्या Docker images AWS मध्ये private ठेवतो.
काय करायचं: vidarbhacotton/web नावाचं ECR repository बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं चालू tasks दाखवा
का: Cluster मध्ये कोणते tasks चालू आहेत ते पाहा.
काय करायचं: vidarbhacotton-cluster मधले tasks दाखवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Task definition register करा
का: Task definition container ची image, CPU, memory व ports सांगते.
काय करायचं: taskdef.json मधली task definition register करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम एका repository मधून images pull
का: CI/servers ने फक्त चालवायच्या images pull कराव्या.
काय करायचं: arn:aws:ecr:ap-south-1:108737854657:repository/vidarbhacotton/web वर ecr:BatchGetImage व ecr:GetDownloadUrlForLayer, आणि * वर ecr:GetAuthorizationToken allow करा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम Service scale करा
का: Container च्या जास्त copies साठी desired count बदला.
काय करायचं: vidarbhacotton-cluster मधली web service 4 tasks करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम ECS task role साठी trust policy
का: Trust policy role कोण घेऊ शकतो ते सांगते.
काय करायचं: ecs-tasks.amazonaws.com ला role assume करू देणारी trust policy लिहा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम Service redeploy करा
का: force-new-deployment tasks restart करून नवी image घेतो.
काय करायचं: vidarbhacotton-cluster मधल्या web service चा नवा deployment force करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम ECR login password घ्या
का: ECR ला push करण्याआधी Docker ला अल्पकालीन password लागतो.
काय करायचं: ap-south-1 साठी ECR login password मिळवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Fargate service बनवा
का: Service हवे तितके tasks चालू ठेवते व बिघडलेले बदलते.
काय करायचं: vidarbhacotton-cluster मध्ये web service बनवा: task definition vidarbhacotton-web:1, 2 tasks, launch type FARGATE, network config net.json मधून.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.




अजून cards: Ravi Sir's Cards.