
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
ecs-deploy是一个用于在Amazon EC2容器服务(ECS)上实现自动蓝绿部署的脚本。它通过操作ECS的任务定义(Task Definition)和服务(Service)实体,实现零停机部署,确保新任务正常运行后再替换旧任务。
以下参数为部署所必需,部分可通过环境变量设置:
| 参数 | 描述 |
|---|---|
-k | --aws-access-key | AWS访问密钥ID,也可通过环境变量AWS_ACCESS_KEY_ID设置 |
-s | --aws-secret-key | AWS密钥,也可通过环境变量AWS_SECRET_ACCESS_KEY设置 |
-r | --region | AWS区域名称,也可通过环境变量AWS_DEFAULT_REGION设置 |
-p | --profile | AWS配置文件名称,设置后无需单独提供访问密钥和区域 |
--aws-instance-profile | 使用当前AWS实例关联的IAM角色,仅在AWS实例内部使用,设置后无需提供访问密钥 |
-c | --cluster | ECS集群名称 |
-n | --service-name | 要部署的服务名称(与-d二选一) |
-d | --task-definition | 要部署的任务定义名称(与-n二选一) |
-i | --image | 要运行的Docker镜像名称,格式:[域名][:端口][/仓库][/][镜像][:标签],例如:mariadb:latest、private.registry.com/repo/image:tag |
| 参数 | 描述 |
|---|---|
-a | --aws-assume-role | 用于ecs-deploy操作的AWS角色ARN |
-D | --desired-count | 服务中要保持运行的任务实例数量 |
-m | --min | 部署期间运行中任务的最小健康百分比(默认:100) |
-M | --max | 部署期间运行中任务的最大百分比(默认:200) |
-t | --timeout | 部署超时时间(默认:90秒) |
-e | --tag-env-var | 从环境变量获取镜像标签,覆盖-i中指定的标签 |
-to | --tag-only | 应用于任务中所有镜像的新标签,覆盖-i中指定的标签(适用于多容器任务) |
--max-definitions | 保留的任务定义修订版数量,超过则注销最旧版本(需≥1,仅在部署成功后执行) |
--task-definition-file | 用作部署任务定义的文件路径 |
--enable-rollback | 若超时前新版本未运行,则回滚任务定义 |
--use-latest-task-def | 使用最新创建的任务定义作为基础,而非最后使用的版本 |
--force-new-deployment | 强制服务进行新部署(默认:false) |
--skip-deployments-check | 跳过部署检查,适用于需要长时间终止旧任务的服务 |
--run-task | 立即运行创建的任务,设置后无需提供服务名称 |
--wait-for-success | 等待任务执行完成并返回退出码0 |
--launch-type | 任务启动类型(参考AWS ECS文档) |
--platform-version | Fargate平台版本(参考AWS ECS文档) |
--network-configuration | 任务网络配置(awsvpc网络模式必需,参考AWS ECS文档) |
--copy-task-definition-tags | 将现有任务定义标签复制到新修订版 |
-v | --verbose | 详细输出模式 |
--version | 显示版本信息 |
简单服务部署(使用环境变量配置AWS参数)
bashecs-deploy -c production1 -n doorman-service -i docker.repo.com/doorman:latest
完整参数部署
bashecs-deploy -k ABC123 -s SECRETKEY -r us-east-1 -c production1 -n doorman-service -i docker.repo.com/doorman -m 50 -M 100 -t 240 -D 2 -e CI_TIMESTAMP -v
更新任务定义镜像
bashecs-deploy -d open-door-task -i docker.repo.com/doorman:17
使用AWS配置文件部署
bashecs-deploy -p PROFILE -c production1 -n doorman-service -i docker.repo.com/doorman -t 240 -e CI_TIMESTAMP -v
多容器任务标签更新
bashecs-deploy -c staging -n core-service -to 0.1.899 -i ignore
--use-latest-task-def获取最新创建的任务定义)即使任务定义内容未变更,ECS服务仍会执行蓝绿部署。脚本通过更新容器镜像标签确保部署的差异性,支持静态标签(如
latest)或动态标签(如CI构建时间戳)。
以下是适用于ecs-deploy的IAM策略示例:
json{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DeregisterTaskDefinition", "ecs:DescribeServices", "ecs:DescribeTaskDefinition", "ecs:DescribeTasks", "ecs:ListTasks", "ecs:ListTaskDefinitions", "ecs:RegisterTaskDefinition", "ecs:StartTask", "ecs:StopTask", "ecs:UpdateService", "iam:PassRole" ], "Resource": "*" } ] }
"You must specify a region"的错误,需检查环境变量或参数是否正确设置AWS访问密钥、密钥和区域。-t(超时时间)参数值,或使用--skip-deployments-check跳过部署检查。使用https://github.com/sstephenson/bats%E8%BF%9B%E8%A1%8C%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%EF%BC%8C%E4%B8%BB%E8%A6%81%E9%AA%8C%E8%AF%81%E6%9C%AC%E5%9C%B0%E6%95%B0%E6%8D%AE%E8%A7%A3%E6%9E%90%E5%92%8C%E5%A4%84%E7%90%86%E9%80%BB%E8%BE%91%E3%80%82%E6%96%B0%E5%8A%9F%E8%83%BD%E6%88%96PR%E5%BA%94%E5%B0%BD%E5%8F%AF%E8%83%BD%E6%8F%90%E4%BE%9B%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E3%80%82
可集成到Github Actions工作流中,示例配置如下:
yamldeploy_to_ecs: name: '通过蓝绿部署将更新的容器镜像部署到ECS服务' runs-on: ubuntu-18.04 steps: - uses: silinternational/ecs-deploy@master env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: 'us-east-1' with: aws_access_key_cmd: '--aws-access-key' aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }} aws_secret_key_cmd: '--aws-secret-key' aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} cluster_cmd: '--cluster' cluster: 'cluster-name' image_cmd: '--image' image: '{amazon_id}.dkr.ecr.us-east-1.amazonaws.com/cluster-name/image_name:latest' region_cmd: '--region' region: 'us-east-1' service_name_cmd: '--service-name' service_name: 'aws-service-name' timeout_cmd: '--timeout' timeout: '360'
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务