关于 deploy-aws-ecs
面向在 AWS ECS 上使用 Fargate 运行容器应用的部署技能,介绍通过 AWS CLI 设置 ECR、任务和服务,并执行更新流程。
主要功能
- 01将容器镜像推送到 ECR
- 02定义并注册 Fargate 任务
- 03创建 ECS 集群和服务
- 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