mcpField
D
deploy-aws-ecs

deploy-aws-ecs

github.com/dralgorhythmクラウド・DevOps12860 回インストール14 週間前に更新
リポジトリ

deploy-aws-ecs について

AWS ECS の Fargate でコンテナアプリを運用するためのデプロイスキルです。AWS CLI を使った ECR、タスク、サービスの設定と、更新手順を扱います。

主な機能

  1. 01コンテナイメージの ECR への発行
  2. 02Fargate タスクの定義と登録
  3. 03ECS クラスターとサービスの作成
  4. 04デプロイに向けたサービス更新
  5. 05セキュリティと運用の実践

活用シーン

  1. 01コンテナアプリの ECS へのデプロイ
  2. 02タスク定義の変更と更新の反映
  3. 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

ベストプラクティス

  1. Secrets Manager を使用する:機密データを AWS Secrets Manager に保存し、タスク定義から参照します
  2. ヘルスチェック:信頼性を高めるために ALB のヘルスチェックを設定します
  3. 自動スケーリング:CPU/メモリに基づくターゲット追跡を設定します
  4. ロギング:ログを一元管理するため、必ず CloudWatch Logs を使用します
  5. タグ:コスト追跡とリソース整理のため、すべてのリソースにタグを付けます
  6. IAM ロール:AWS サービスへの最小権限アクセスにはタスクロールを使用します
  7. 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

リソース

コメント