deploy-aws-ecs について
AWS ECS の Fargate でコンテナアプリを運用するためのデプロイスキルです。AWS CLI を使った ECR、タスク、サービスの設定と、更新手順を扱います。
主な機能
- 01コンテナイメージの ECR への発行
- 02Fargate タスクの定義と登録
- 03ECS クラスターとサービスの作成
- 04デプロイに向けたサービス更新
- 05セキュリティと運用の実践
活用シーン
- 01コンテナアプリの ECS へのデプロイ
- 02タスク定義の変更と更新の反映
- 03ヘルスチェック、ログ、自動スケーリングの設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dralgorhythm/ claude-agentic-framework --skill deploy-aws-ecsインストール後、Claude Code で/deploy-aws-ecsを入力して読み込まれたか確認します。
詳細
AWS ECS/Fargate にデプロイする
ECS/Fargate を選ぶ理由
- サーバーレスのコンテナオーケストレーション
- クラスター管理が不要
- 自動スケーリングが組み込み済み
- AWS との高度な統合
- 従量課金制
- 本番環境に適した信頼性
クイックスタート
# Install AWS CLI
aws --version
# Configure credentials (use OIDC in production)
aws configure
# Login to ECR
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin <account-id>.dkr.ecr.us-east-1.amazonaws.com
ECR のセットアップ
リポジトリの作成
# Create ECR repository
aws ecr create-repository --repository-name myapp
# Build and tag image
docker build -t myapp:latest .
docker tag myapp:latest <account-id>.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
# Push to ECR
docker push <account-id>.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
タスク定義
基本的な task-definition.json
{
"family": "myapp-task",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"executionRoleArn": "arn:aws:iam::<account-id>:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "myapp",
"image": "<account-id>.dkr.ecr.us-east-1.amazonaws.com/myapp:latest",
"portMappings": [
{
"containerPort": 8080,
"protocol": "tcp"
}
],
"environment": [
{"name": "NODE_ENV", "value": "production"}
],
"secrets": [
{
"name": "DATABASE_URL",
"valueFrom": "arn:aws:secretsmanager:us-east-1:<account-id>:secret:db-url"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/myapp",
"awslogs-region": "us-east-1",
"awslogs-stream-prefix": "ecs"
}
}
}
]
}
タスク定義の登録
aws ecs register-task-definition --cli-input-json file://task-definition.json
サービスの作成
# Create ECS cluster
aws ecs create-cluster --cluster-name myapp-cluster
# Create service with ALB
aws ecs create-service \
--cluster myapp-cluster \
--service-name myapp-service \
--task-definition myapp-task \
--desired-count 2 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[subnet-xxx],securityGroups=[sg-xxx],assignPublicIp=ENABLED}" \
--load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:...,containerName=myapp,containerPort=8080"
デプロイのワークフロー
1. ビルドしてプッシュする
# Build new version
docker build -t myapp:${VERSION} .
# Tag and push
docker tag myapp:${VERSION} ${ECR_REPO}:${VERSION}
docker tag myapp:${VERSION} ${ECR_REPO}:latest
docker push ${ECR_REPO}:${VERSION}
docker push ${ECR_REPO}:latest
2. タスク定義を更新する
# Register new task definition
aws ecs register-task-definition --cli-input-json file://task-definition.json
3. サービスを更新する
# Force new deployment
aws ecs update-service \
--cluster myapp-cluster \
--service myapp-service \
--force-new-deployment
ベストプラクティス
- Secrets Manager を使用する:機密データを AWS Secrets Manager に保存し、タスク定義から参照します
- ヘルスチェック:信頼性を高めるために ALB のヘルスチェックを設定します
- 自動スケーリング:CPU/メモリに基づくターゲット追跡を設定します
- ロギング:ログを一元管理するため、必ず CloudWatch Logs を使用します
- タグ:コスト追跡とリソース整理のため、すべてのリソースにタグを付けます
- IAM ロール:AWS サービスへの最小権限アクセスにはタスクロールを使用します
- CI/CD:OIDC を使用して GitHub Actions と統合します(長期有効な認証情報は不要です)
よく使うコマンド
# List services
aws ecs list-services --cluster myapp-cluster
# Describe service
aws ecs describe-services --cluster myapp-cluster --services myapp-service
# View logs (requires CloudWatch)
aws logs tail /ecs/myapp --follow
# Scale service
aws ecs update-service --cluster myapp-cluster --service myapp-service --desired-count 4
# Stop all tasks (for maintenance)
aws ecs update-service --cluster myapp-cluster --service myapp-service --desired-count 0
リソース
コメント
Markdown 対応