AWS ECR / ECS CLI — Довідник команд
AWS ECR / ECS CLI — Довідник команд
Цей довідник охоплює всі важливі команди для роботи з контейнерами в AWS, згруповані за сервісом. Для кожної команди наведено опис параметрів та очікуваний вивід терміналу.
aws configure або через змінні середовища AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION. Також потрібний встановлений Docker для команд docker build, docker push.Docker — локальна робота з образами
docker build
Збирає Docker-образ з Dockerfile у поточній або вказаній директорії.
name:tag. Без тегу Docker автоматично використовує :latest.. означає поточну директорію.docker tag
Додає новий тег до вже існуючого локального образу. Не копіює образ — лише додає псевдонім.
my-api:v1.0.0.ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/REPO:TAG.docker images вказують на той самий образ (однаковий sha256). docker tag лише додає псевдонім — місце на диску не подвоюється.docker push
Завантажує образ у реєстр. Для ECR потрібна попередня аутентифікація через aws ecr get-login-password.
Amazon ECR — Elastic Container Registry
ecr get-login-password
Отримує тимчасовий токен аутентифікації (12 годин) та передає його стандартному docker login через pipe. Це єдиний спосіб аутентифікуватись у ECR — постійних паролів немає.
docker login.get-login-password на початку кожного job, а не один раз при налаштуванні.ecr create-repository
Створює новий репозиторій у ECR. Потрібно виконати один раз перед першим docker push.
[a-z0-9._/-]+. Підтримує вкладеність через /: backend/my-api.scanOnPush=true вмикає автоматичне сканування CVE при кожному push через Amazon Inspector.MUTABLE (за замовчуванням) — теги можна перезаписати. IMMUTABLE — теги захищені від перезапису. Рекомендується IMMUTABLE для production.AES256 (за замовчуванням, безкоштовно) або KMS (власний ключ AWS KMS, платно).repositoryUri — воно використовується у docker tag, docker push та у полі image Task Definition.ecr describe-repositories / describe-images
Перегляд списку репозиторіїв або образів у конкретному репозиторії.
describe-repositories. Якщо не вказано — повертає всі репозиторії акаунту.describe-images.images[*].{Tag:imageTags[0],Digest:imageDigest}.ecr put-lifecycle-policy
Застосовує Lifecycle Policy до репозиторію — правило автоматичного видалення застарілих образів.
file://path.json з правилами lifecycle policy. Кожне правило має rulePriority, selection (фільтр образів) та action (expire).my-api → Lifecycle policy → Test rules — покаже список без реального видалення.ecr start-image-scan / describe-image-scan-findings
Запускає сканування образу на вразливості CVE або переглядає результати попереднього сканування.
imageTag=v1.0.0 або imageDigest=sha256:abc123....ecr put-image-tag-mutability
Змінює режим захисту тегів для існуючого репозиторію.
MUTABLE — теги можна перезаписати (за замовчуванням). IMMUTABLE — теги незмінні після першого push; гарантує відтворюваність образів у production.ecr set-repository-policy
Застосовує Resource-based Policy до репозиторію — дозволяє завантажувати образи з інших AWS акаунтів (multi-account архітектура).
ecr:GetDownloadUrlForLayer, ecr:BatchGetImage, ecr:BatchCheckLayerAvailability.ecr put-replication-configuration
Налаштовує автоматичну реплікацію образів між регіонами або між акаунтами.
rules — масивом правил реплікації. Кожне правило містить destinations (регіон та registryId) та repositoryFilters (фільтр за префіксом імені).ecr batch-delete-image / delete-repository
Видалення образів або цілого репозиторію.
batch-delete-image. Кожен елемент: imageTag=v1.0.0 або imageDigest=sha256:....delete-repository — видаляє репозиторій навіть якщо він містить образи.Amazon ECS — Cluster
ecs create-cluster
Створює логічну групу для запуску ECS Tasks та Services.
FARGATE, FARGATE_SPOT або власні EC2-провайдери. Якщо не вказано — кластер підтримує всі типи.name=containerInsights,value=enabled вмикає CloudWatch Container Insights — деталізовані метрики CPU, Memory, Network по кожному Task та Service.ecs update-cluster-settings
Вмикає або вимикає Container Insights для існуючого кластера.
name=containerInsights,value=enabled або value=disabled.ecs delete-cluster
Видаляє кластер. Перед видаленням усі Services та Tasks повинні бути зупинені.
Amazon ECS — Task Definition
ecs register-task-definition
Реєструє нову Task Definition або нову revision існуючої сімейства. Приймає параметри напряму або через --cli-input-json file://task-def.json.
register-task-definition з тим самим family створює нову revision (my-api:1, my-api:2, ...).awsvpc (обов'язково для Fargate), bridge, host, none. При awsvpc кожен Task отримує власний ENI та IP.FARGATE або EC2. Для Fargate — обов'язково."256" (0.25 vCPU), "512", "1024", "2048", "4096", "8192", "16384". Не довільне число — лише значення з таблиці допустимих комбінацій.cpu: для "256" — 512, 1024 або 2048; для "512" — 1024–4096 тощо.ecsTaskExecutionRole з AmazonECSTaskExecutionRolePolicy.execution-role-arn.name, image, portMappings, environment, secrets, healthCheck, logConfiguration.my-api:1, my-api:2, my-api:LATEST — всі посилаються на ту саму сімейство.ecs list-task-definitions / describe-task-definition
Перегляд зареєстрованих Task Definitions.
Amazon ECS — Service
ecs create-service
Створює ECS Service — оркестратор, що підтримує задану кількість Tasks, виконує rolling updates та інтегрується з ALB.
my-api (остання) або my-api:3 (конкретна).FARGATE або EC2. При використанні Capacity Providers не вказується.assignPublicIp (ENABLED або DISABLED). Обов'язкова для Fargate.targetGroupArn, containerName, containerPort. Без цього параметра Service не реєструє Tasks в ALB.minimumHealthyPercent (мінімум здорових Tasks, %) та maximumPercent (максимум Tasks під час деплою, %).ecs update-service
Оновлює конфігурацію існуючого Service. Найчастіше використовується для запуску нової Task Definition (rolling update) або вмикання/вимикання функцій.
0 — зупиняє всі Tasks (Service залишається, але нічого не запущено).aws ecs execute-command.deploymentCircuitBreaker (автовідкат при збоях), maximumPercent, minimumHealthyPercent.:latest.maximumPercent=200 при desiredCount=2 означає: ECS може запустити до 4 Tasks одночасно під час rolling update (2 старих + 2 нових). minimumHealthyPercent=50 гарантує, що принаймні 1 Task залишається здоровим весь час.ecs delete-service
Видаляє Service. Рекомендується спочатку встановити --desired-count 0, щоб ECS зупинив Tasks, а потім видалити.
--force вимагає desiredCount=0.Amazon ECS — Tasks
ecs list-tasks / describe-tasks
Перегляд запущених Tasks у кластері.
list-tasks — повертає лише Tasks конкретного Service.describe-tasks.ecs execute-command
Відкриває інтерактивну сесію всередині запущеного контейнера (аналог docker exec). Потребує: enableExecuteCommand=true у Service, SSM права у Task Role, встановленого session-manager-plugin.
/bin/bash, /bin/sh, або будь-яка утиліта всередині образу.ecs put-cluster-capacity-providers
Налаштовує Capacity Provider Strategy — розподіл Tasks між FARGATE та FARGATE_SPOT для економії коштів.
FARGATE FARGATE_SPOT. Обидва вказуються через пробіл.base — мінімальна кількість Tasks на провайдері. weight — відносна вага. При base=1,weight=1 для FARGATE та weight=3 для FARGATE_SPOT: перший Task завжди на FARGATE, далі 75% на FARGATE_SPOT.FARGATE_SPOT Tasks можуть бути примусово зупинені AWS з 2-хвилинним попередженням. Використовуйте FARGATE_SPOT лише для stateless, batch або job-сервісів. Production API-сервіси зі станом слід тримати на FARGATE.IAM Roles для ECS
iam create-role + attach-role-policy — Task Execution Role
Стандартна роль, яку Fargate використовує для завантаження образу з ECR та запису логів у CloudWatch. Потрібна для кожного кластера.
iam create-role + put-role-policy — EventBridge Scheduler Role
IAM Role для EventBridge Scheduler, що дозволяє запускати ECS Tasks за розкладом.
EC2 — VPC та Security Groups для ECS
ec2 describe-vpcs / describe-subnets
Знайти ID Default VPC та підмереж перед запуском ECS Service.
ec2 create-security-group / authorize-security-group-ingress
Створює Security Group та додає правила вхідного трафіку.
0.0.0.0/0 — весь Інтернет (лише для lab).ec2 describe-network-interfaces
Знаходить публічний IP Task через ENI (Elastic Network Interface), прикріплений до Task.
ELBv2 — Application Load Balancer
elbv2 create-load-balancer
Створює Application Load Balancer (Layer 7). Розміщується у публічних підмережах — він отримує зовнішній трафік і перенаправляє на Tasks.
0.0.0.0/0.internet-facing (публічний, є публічний DNS/IP) або internal (лише з VPC). Для зовнішнього API — internet-facing.application (ALB, Layer 7, HTTP/HTTPS) або network (NLB, Layer 4, TCP/UDP).elbv2 create-target-group
Створює Target Group — набір IP-адрес (Tasks), на які ALB направляє трафік. Для Fargate завжди --target-type ip.
HTTP та 8080.ip — обов'язково для Fargate (awsvpc режим). Tasks реєструються за IP, а не за EC2 інстанс ID./health. ALB перевіряє кожен Task перед реєстрацією та регулярно після.elbv2 create-listener / modify-listener
Створює Listener — правило, за яким ALB приймає трафік на певному порті і перенаправляє на Target Group.
HTTP / 80 або HTTPS / 443. Для HTTPS потрібен ACM сертифікат.CertificateArn=arn:aws:acm:....Type=forward,TargetGroupArn=... (направити на TG) або Type=redirect,RedirectConfig={...} (редирект).Application Auto Scaling — ECS
application-autoscaling register-scalable-target
Реєструє ECS Service як масштабований ресурс. Цей крок — передумова перед додаванням Scaling Policy.
ecs.ecs:service:DesiredCount.service/<cluster-name>/<service-name>.2 для production: захищає від повного простою.application-autoscaling put-scaling-policy
Застосовує Scaling Policy до зареєстрованого ресурсу.
TargetTrackingScaling (підтримує ціль метрики), StepScaling (кроки при перевищенні порогу) або SimpleScaling.TargetTrackingScaling: TargetValue (ціль), PredefinedMetricSpecification або CustomizedMetricSpecification, ScaleInCooldown, ScaleOutCooldown.CloudWatch Logs
logs tail
Виводить та в режимі --follow потокує нові записи з CloudWatch Log Group. Основний спосіб переглядати логи ECS контейнерів у реальному часі.
/ecs/<task-definition-family>.tail -f.short (мітка часу + повідомлення), detailed (всі метадані), json. short — найзручніший для читання.1h, 30m, 2024-01-15T10:00:00. Без цього параметра — виводить останні записи.ecs/<family>/<task-id>. При рестарті Task — новий стрім. Лог Group (/ecs/ecs-lab-api) залишається; aws logs tail агрегує всі стріми.logs delete-log-group
Видаляє Log Group та всі її Log Streams.
ACM — AWS Certificate Manager
acm request-certificate
Запитує безкоштовний SSL/TLS сертифікат. Для ALB у регіоні eu-central-1 — сертифікат має бути в тому самому регіоні.
myapp.pp.ua. Сертифікат буде видано саме для цього домену.DNS (рекомендовано) — потрібно додати CNAME у DNS; автоматично оновлюється при продовженні. EMAIL — лист на адміністративний email домену.*.myapp.pp.ua, api.myapp.pp.ua тощо.ISSUED (~5–10 хвилин). Далі використовуйте $CERT_ARN при створенні HTTPS Listener у elbv2 create-listener.EventBridge Scheduler
scheduler create-schedule
Створює розклад для запуску ECS Task за cron-виразом через Amazon EventBridge Scheduler.
cron(0 2 * * ? *) (щодня о 02:00 UTC) або rate(1 hour). Зверніть увагу: AWS cron має 6 полів (є поле рік).{"Mode": "OFF"} — точний запуск у вказаний час. {"Mode": "FLEXIBLE", "MaximumWindowInMinutes": 15} — запуск у вікні до 15 хв після вказаного часу.EcsParameters з Task Definition ARN, мережевою конфігурацією.Швидкий довідник: типові сценарії
Повний цикл деплою нової версії
# 1. Аутентифікація в ECR
aws ecr get-login-password --region eu-central-1 | \
docker login --username AWS --password-stdin \
$ACCOUNT_ID.dkr.ecr.eu-central-1.amazonaws.com
# 2. Збірка та push
docker build -t my-api:v1.1.0 .
docker tag my-api:v1.1.0 $REPO_URI:v1.1.0
docker push $REPO_URI:v1.1.0
# 3. Нова revision Task Definition (з новим образом)
aws ecs register-task-definition --cli-input-json file:///tmp/task-def-v1.1.0.json --region eu-central-1
# 4. Rolling update Service
aws ecs update-service \
--cluster production --service my-api-service \
--task-definition my-api \
--region eu-central-1
Діагностика проблем із Task
# Task застряг у PENDING — перевірити причину
aws ecs describe-tasks \
--cluster my-cluster --tasks $TASK_ARN \
--query "tasks[0].{status:lastStatus,stopped:stoppedReason,containers:containers[*].{name:name,reason:reason}}" \
--region eu-central-1
# Переглянути логи контейнера
aws logs tail /ecs/my-api --since 30m --format short --region eu-central-1
# Підключитись до контейнера напряму (якщо увімкнено ECS Exec)
aws ecs execute-command --cluster my-cluster --task $TASK_ARN \
--container my-api --interactive --command "/bin/bash" --region eu-central-1
Очищення всіх ресурсів після лабораторної роботи
REGION="eu-central-1"
# 1. Зупинити та видалити Service
aws ecs update-service --cluster ecs-lab-cluster --service ecs-lab-service --desired-count 0 --region $REGION
aws ecs delete-service --cluster ecs-lab-cluster --service ecs-lab-service --force --region $REGION
# 2. Видалити кластер
aws ecs delete-cluster --cluster ecs-lab-cluster --region $REGION
# 3. Видалити образи та репозиторій
aws ecr batch-delete-image --repository-name ecs-lab-api --image-ids imageTag=v1.0.0 imageTag=v1.1.0 --region $REGION
aws ecr delete-repository --repository-name ecs-lab-api --force --region $REGION
# 4. Видалити логи
aws logs delete-log-group --log-group-name /ecs/ecs-lab-api --region $REGION
# 5. Видалити Security Group
aws ec2 delete-security-group --group-id $SG_ID --region $REGION
Docker та контейнеризація в AWS — ECR, ECS та Fargate
Від локального Dockerfile до повноцінного задеплоєного .NET Web API на AWS ECS Fargate. Розбираємо ECR, ECS Task Definitions, Clusters, Services, Auto Scaling та порівнюємо ECS, Fargate і EKS.
Amazon EC2 — Elastic Compute Cloud
Повне керівництво з Amazon EC2 для .NET розробників. Instance Types, AMI, Pricing Models, Security Groups, EBS, запуск .NET 10 на Linux та ASP.NET на Windows Server з IIS від А до Я.