我已声明我的 ECS 模块具有所需的 IAM 角色、应用程序负载均衡器、自动扩展和具有蓝/绿部署的代码部署。
每次更新任务定义或与 ECS 服务相关的任何内容时,都会收到错误:
Error: updating ECS Service (arn:aws:ecs...): InvalidParameterException: Unable to update task definition on services with a CODE_DEPLOY deployment controller. Use AWS CodeDeploy to trigger a new deployment.
我明白了,我应该使用 CodeDeploy 进行部署,但它是在我创建服务并设置所有内容时在那里声明的,所以我想更改代码以将其声明为数据源而不是资源只是一个肮脏的行为快速修复。
更新任务定义以防止发生此错误的正确方法是什么?
在集群定义中按照 Marko E
的建议设置生命周期策略resource "aws_ecs_service" "this" {
...
lifecycle {
ignore_changes = [
task_definition,
load_balancer,
network_configuration
]
}
然后您可以
terraform apply
新任务定义,但随后需要通过更新 appspec.yaml 文件以指向新任务定义并运行 codedeploy 部署来进行部署。
Resources:
- TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: "[Your task definition arn]"
请参阅模板 appspec.yaml 文件 此处