
ecs-deploy是一个用Go编写的REST API服务器,用于从任何地方部署ECS服务,通常作为部署流水线的一部分。由于Jenkins、CircleCI、Bitbucket等持续集成(CI)软件往往缺乏与ECS的原生集成,该API服务器可部署在ECS上,提供ECS的持续部署能力,解决CI工具与ECS集成不足的问题。
适用于需要将CI/CD流水线与AWS ECS集成的场景,特别是当现有CI工具缺乏原生ECS部署能力时。可用于自动化部署流程、管理ECS服务生命周期(部署、回滚、扩缩容)、监控服务状态和日志,以及配置自动扩缩容策略,适用于开发、测试和生产环境的ECS集群管理。
可从https://github.com/in4it/ecs-deploy/releases%E4%B8%8B%E8%BD%BDecs-deploy%E5%92%8Cecs-client%EF%BC%8C%E6%88%96%E4%BD%BF%E7%94%A8https://hub.docker.com/r/in4it/ecs-deploy/%E3%80%82
使用ecs-deploy可以引导新的ECS集群,自动设置自动扩缩组、ALB、IAM角色和ECS集群:
bash./ecs-deploy --bootstrap \ --alb-security-groups sg-123456 \ # ALB安全组 --cloudwatch-logs-enabled \ # 启用CloudWatch日志 --cloudwatch-logs-prefix mycompany \ # CloudWatch日志前缀 --cluster-name mycluster \ # 集群名称 --ecs-desired-size 1 \ # ECS期望实例数 --ecs-max-size 1 \ # ECS最大实例数 --ecs-min-size 1 \ # ECS最小实例数 --ecs-security-groups sg-123456 \ # ECS安全组 --ecs-subnets subnet-123456 \ # ECS子网 --environment staging \ # 环境(如staging、prod) --instance-type t2.micro \ # 实例类型 --key-name mykey \ # SSH密钥名称 --loadbalancer-domain cluster.in4it.io \ # ALB域名 --paramstore-enabled \ # 启用参数存储 --paramstore-kms-arn aws:arn:kms:region:accountid:key/1234 \ # KMS ARN --paramstore-prefix mycompany \ # 参数存储前缀 --profile your-aws-profile \ # AWS凭证配置文件 --region your-aws-region # AWS区域(必填)
注意:需先创建安全组和VPC/子网。ALB安全组应允许80/443端口入站,ECS安全组应允许来自ALB的32768-61000端口流量。如需删除集群,将
--bootstrap替换为--delete-cluster。
也可通过Terraform部署ECS集群,详见https://github.com/in4it/ecs-deploy/blob/master/terraform/README.md%E3%80%82
使用ecs-client部署示例服务(如nginx和echoserver):
交互式登录
bash./ecs-client login --url http://yourdomain/ecs-cluster
使用环境变量登录
bashECS_DEPLOY_LOGIN=deploy ECS_DEPLOY_PASSWORD=password ./ecs-client login --url http://yourdomain/ecs-cluster
部署服务
bash./ecs-client deploy -f examples/services/multiple-services/multiple-services.yaml
AWS_REGION=region:AWS区域(必填)JWT_SECRET=secret:JWT加密密钥(必填)DEPLOY_PASSWORD=deploy:部署用户密码(必填)DEVELOPER_PASSWORD=developer:开发用户密码(必填)AWS_ACCOUNT_ENV=dev|staging|testing|qa|prod:AWS账户环境标识PARAMSTORE_ENABLED=yes:是否启用参数存储(默认:no)PARAMSTORE_PREFIX=mycompany:参数存储前缀(如设为mycompany,参数路径为/mycompany/服务名/变量)PARAMSTORE_KMS_ARN=:用于加密/解密参数的KMS ARNCLOUDWATCH_LOGS_ENABLED=yes:是否启用CloudWatch日志(默认:no)CLOUDWATCH_LOGS_PREFIX=mycompany:CloudWatch日志前缀LOADBALANCER_DOMAIN=mycompany.com:负载均衡器域名DYNAMODB_TABLE=Services:存储服务信息的DynamoDB表名(默认:Services)ECR_SCAN_ON_PUSH=true:是否启用ECR镜像推送时扫描(默认:false)SAML_ENABLED=yes:启用SAML认证(默认:no)SAML_ACS_URL=https://mycompany.com/url-prefix:SAML断言消费者服务URLSAML_CERTIFICATE=证书内容:SAML证书内容SAML_PRIVATE_KEY=私钥内容:SAML私钥内容SAML_METADATA_URL=https://identity-provider/metadata.xml:身份提供商元数据URL生成SAML密钥和证书的命令:
bashopenssl req -x509 -newkey rsa:2048 -keyout myservice.key -out myservice.cert -days 3650 -nodes -subj "/CN=myservice.mycompany.com"
通过以下步骤启用自动扩缩容:
https://your-domain.com/ecs-deploy/webhook)| 环境变量 | 默认值 | 描述 |
|---|---|---|
| PARAMSTORE_ENABLED | no | 是否启用参数存储(使用"yes"启用) |
| PARAMSTORE_PREFIX | "" | 参数存储前缀(如设为mycompany,参数路径为/mycompany/服务名/变量) |
| PARAMSTORE_KMS_ARN | "" | 用于加密/解密参数的KMS ARN |
| PARAMSTORE_INJECT | no | 是否将密钥注入任务定义(使用"Yes"启用) |
| AUTOSCALING_STRATEGIES | LargestContainerUp,LargestContainerDown | 应用的自动扩缩容策略列表(见下方策略类型) |
| AUTOSCALING_DOWN_STRATEGY | gracefully | 缩容策略(目前仅支持gracefully:在执行缩容前检查资源使用情况) |
| AUTOSCALING_UP_STRATEGY | immediately | 扩容策略(immediately:立即扩容;gracefully:检查后扩容) |
| AUTOSCALING_DOWN_COOLDOWN | 5 | 缩容后冷却时间(分钟) |
| AUTOSCALING_DOWN_INTERVAL | 60 | 缩容检测后,检查资源使用情况的时间间隔(秒) |
| AUTOSCALING_DOWN_PERIOD | 5 | 缩容前检查资源使用情况的周期数 |
| AUTOSCALING_UP_COOLDOWN | 5 | 扩容后冷却时间(分钟) |
| AUTOSCALING_UP_INTERVAL | 60 | 扩容检测后,检查资源使用情况的时间间隔(秒) |
| AUTOSCALING_UP_PERIOD | 5 | 扩容前检查资源使用情况的周期数 |
| SERVICE_DISCOVERY_TTL | 60 | 服务发现记录的TTL(秒) |
| SERVICE_DISCOVERY_FAILURETHRESHOLD | 3 | 服务发现记录的故障阈值 |
| AWS_RESOURCE_CREATION_ENABLED | yes | 是否允许ecs-deploy自动创建AWS IAM资源 |
| SLACK_WEBHOOKS | "" | 逗号分隔的Slack Webhook(可选指定频道,格式:url1:#channel,url2:#channel) |
| SLACK_USERNAME | ecs-deploy | Slack通知用户名 |
| ECS_TASK_ROLE_PERMISSION_BOUNDARY_ARN | "" | ECS任务角色的权限边界ARN |
| ECR_SCAN_ON_PUSH | false | 是否启用ECR镜像推送时扫描 |
| DEPLOY_MAX_WAIT_SECONDS | 900 | 部署超时等待时间(秒,默认15分钟) |
| 策略名称 | 描述 |
|---|---|
| LargestContainerUp | 当集群中最大容器(含缓冲)无法在现有节点上调度时触发扩容 |
| LargestContainerDown | 当移除一个节点后仍有足够容量容纳最大容器(含缓冲)时触发缩容 |
| Polling | 每分钟轮询所有服务,检查是否因资源不足导致任务无法调度(每秒最多1次调用,每次10个服务) |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务