如何使用特定标签版本更新ECS Fargate服务?
如何用特定版本的环境标签镜像更新ECS Fargate服务
ECS默认仅通过任务定义中的镜像字符串判断是否需要更新,同一标签(如test)指向的镜像更新后,ECS不会自动识别。要让服务使用你刚推送的、关联特定版本的test环境镜像,可通过以下两种可靠方式实现:
方法一:通过镜像SHA摘要精准指定(推荐)
镜像SHA摘要唯一对应一个镜像版本,能彻底避免标签覆盖带来的不确定性,步骤如下:
- 在Jenkins中获取
test标签对应的镜像SHA
执行AWS CLI命令:
IMAGE_SHA=$(aws ecr describe-images --repository-name <ecrrepo> --image-ids imageTag=test --query 'imageDetails[0].imageDigest' --output text)- 在Jenkins中获取
- 生成并注册新的任务定义
基于现有任务定义,将镜像地址替换为带SHA的格式:
# 导出当前任务定义为JSON aws ecs describe-task-definition --task-definition <你的任务定义名称> | jq '.taskDefinition' > current-task-def.json # 修改镜像字段为带SHA的地址 jq --arg image "<baseurl>/<ecrrepo>@$IMAGE_SHA" '.containerDefinitions[0].image = $image' current-task-def.json > new-task-def.json # 注册新任务定义 aws ecs register-task-definition --cli-input-json file://new-task-def.json- 生成并注册新的任务定义
- 更新ECS服务
aws ecs update-service --cluster <集群名称> --service <服务名称> --task-definition <新生成的任务定义名称/ARN>
方法二:强制触发服务部署拉取最新标签镜像
若无需精准指定SHA,仅需让ECS拉取最新的test标签镜像,可通过强制部署实现:
- 直接触发服务强制更新,ECS会重新启动任务并拉取最新镜像:
注意:若任务定义未变更,此命令会强制重新部署现有任务定义对应的容器,启动时会拉取最新的aws ecs update-service --cluster <集群名称> --service <服务名称> --force-new-deploymenttest标签镜像。
关键提示
- 优先使用SHA指定镜像,避免后续镜像推送覆盖
test标签导致服务意外更新 - Jenkins Pipeline可将上述命令串联,实现从镜像推送、任务定义更新到服务部署的全自动化
- 控制台操作时,可手动修改任务定义的镜像地址为
[baseurl]/[ecrrepo]@[SHA值],再更新服务
内容的提问来源于stack exchange,提问作者stonewalker747
相关产品推荐
相关产品推荐

