
fabfuel/ecs-deployecs-deploy 是一款简化Amazon ECS部署的命令行工具,提供便捷的CLI接口用于执行频繁的复杂操作,支持任务定义管理、服务部署、扩缩容及任务运行等功能。
bash$ ecs deploy my-cluster my-service --tag 1.2.3
bash$ ecs deploy my-cluster my-service
bash$ ecs scale my-cluster my-service 4
bash$ ecs cron my-cluster my-task my-rule
bash$ ecs update my-task
项目已发布至PyPI,可通过以下命令安装:
bash$ pip install ecs-deploy
无需本地Python环境,可直接通过Docker运行ecs-deploy。1.7.1及以上版本已发布至Docker Hub:fabfuel/ecs-deploy
bashdocker run fabfuel/ecs-deploy:1.10.2
master或latest对应最新稳定版develop对应最新开发版通过Docker运行时,需通过命令参数或环境变量提供AWS凭证和区域:
bashdocker run fabfuel/ecs-deploy:1.10.2 ecs deploy my-cluster my-service --region eu-central-1 --access-key-id ABC --secret-access-key ABC
基于AWS Python SDK(boto3),支持多种凭证配置方式(详见boto3文档):
bash$ aws configure
运行ecs命令时指定:
--access-key-id 和 --secret-access-key:AWS凭证--profile:AWS配置文件重新部署服务(可修改镜像、环境变量或命令)
调整服务任务数实现扩缩容
基于现有任务定义运行一次性任务(可覆盖命令或环境变量)
更新任务定义(创建新版本,不部署运行)
更新任务定义并同步事件规则(定时任务)
无需修改,拉取最新镜像重新部署:
bash$ ecs deploy my-cluster my-service
更新所有容器镜像标签:
bash$ ecs deploy my-cluster my-service -t 1.2.3
bash$ ecs deploy my-cluster my-service --image webserver nginx:1.11.8
bash$ ecs deploy my-cluster my-service -i webserver nginx:1.9 -i application my-app:1.2.3
指定任务ARN、任务家族+版本或任务家族(默认最新版本):
bash# ARN方式 $ ecs deploy my-cluster my-service --task arn:aws:ecs:eu-central-1:123456789012:task-definition/my-task:20 # 家族+版本方式 $ ecs deploy my-cluster my-service --task my-task:20 # 家族方式(最新版本) $ ecs deploy my-cluster my-service --task my-task
重要:即使指定任务定义,
ecs-deploy仍会创建新版本任务定义以确保一致性(如镜像拉取),新版本基于指定任务而非当前服务使用的任务。
添加/修改指定容器的环境变量:
bash$ ecs deploy my-cluster my-service -e webserver SOME_VARIABLE SOME_VALUE
bash$ ecs deploy my-cluster my-service -e webserver VAR1 VAL1 -e webserver VAR2 VAL2 -e app APP_VAR APP_VAL
bash$ ecs deploy my-cluster my-service -e webserver SOME_VAR SOME_VAL --exclusive-env
重要:需ECS Agent版本≥1.22.0,否则任务部署失败。
bash# 参数名方式 $ ecs deploy my-cluster my-service -s webserver SOME_SECRET KEY_OF_SECRET_IN_PARAMETER_STORE # ARN方式 $ ecs deploy my-cluster my-service -s webserver SOME_SECRET arn:aws:ssm:<region>:<account>:parameter/KEY
bash$ ecs deploy my-cluster my-service -s webserver NEW_SECRET KEY --exclusive-secret
bash# 简单命令 $ ecs deploy my-cluster my-service --command webserver "nginx" # 带参数命令 $ ecs deploy my-cluster my-service --command webserver "nginx -c /etc/nginx/nginx.conf" # JSON格式(含空格参数) $ ecs deploy my-cluster my-service --command webserver '["sh", "-c", "while true; do echo Time $(date); sleep 1; done;"]'
bash$ ecs deploy my-cluster my-service -r arn:aws:iam::123456789012:role/MyEcsTaskRole
--cpu <容器名> 0--memory <容器名> 256--memoryreservation <容器名> 256--privileged <容器名> True|False--essential <容器名> True|Falsebash--log <容器名> awslogs awslogs-group <日志组名> --log <容器名> awslogs awslogs-region <区域> --log <容器名> awslogs awslogs-stream-prefix <流前缀>
bash# 格式:--port <容器名> <容器端口> <主机端口> --port webserver 80 8080 # 清除现有端口映射:--exclusive-ports
bash# 定义卷 --volume data-volume /host/data # 挂载卷到容器 --mount webserver data-volume /container/data # 清除现有挂载:--exclusive-mounts
调整服务任务数:
bash$ ecs scale my-cluster my-service 4
bash$ ecs run my-cluster my-task
bash$ ecs run my-cluster my-task:123
bash$ ecs run my-cluster my-task:123 -e my-container MY_VAR "my value"
bash$ ecs run my-cluster my-task -c my-container "python script.py param1 param2"
需指定启动类型、安全组、子网等参数:
bash$ ecs run my-fargate-cluster my-task --launchtype=FARGATE --securitygroup sg-01234567 --subnet subnet-01234567 --public-ip
通过API密钥和应用ID记录部署,支持两种配置方式:
bash$ ecs deploy my-cluster my-service --newrelic-apikey ABCDEFG --newrelic-appid ***
bash$ export NEW_RELIC_API_KEY=ABCDEFG $ export NEW_RELIC_APP_ID=*** $ ecs deploy my-cluster my-service
默认超时300秒,可通过--timeout参数调整(单位:秒),设置为-1则不等待结果:
bash$ ecs deploy my-cluster my-service --timeout 600



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务