具有 ECS Blue/Green 的 AWS CodePipeline 部署因内部错误而失败

AWS CodePipeline with ECS Blue/Green deployment fails with internal error

我设置了一个 CodePipeline,其中对代码的更改构建并将图像推送到 ECR。我希望在构建新映像时自动更新 ECS。我已经配置了 ECS Blue/Green 操作,但是当它运行时它几乎立即失败并显示一条关于 "Internal Error" 的消息。 CodeDeploy 中没有创建失败的部署。

我已经为 CodePipeline 配置了两个输入:

  1. 用于构建图像的源代码
  2. S3 中的一个 zip,包含 appspec.yaml 和 taskdef.json

当任一输入更改时,我重建容器并推送到标记为 'latest' 的 ECR。下一步应该是 Blue/Green 部署到 ECS。我已经配置了 CodeDeploy,如果手动触发,作业会正常工作。

当通过 CodePipeline 触发时,它将失败并且我收到一条消息“操作执行失败 内部错误。错误参考代码:”。我怀疑 IAM 可能存在一些潜在问题,但我无法找到从哪里开始查看这个阶段。CodeDeploy 中没有显示失败的部署,所以我没有看到获取有关失败内容的更多信息的方法。

我的 CodePipeline 政策是从此处记录的政策复制而来的:https://docs.aws.amazon.com/codepipeline/latest/userguide/how-to-custom-role.html#view-default-service-role-policy

我已阅读此处的故障排除文档:https://docs.aws.amazon.com/codepipeline/latest/userguide/troubleshooting.html

我认为我的问题与此处描述的问题类似:https://forums.aws.amazon.com/thread.jspa?messageID=897822

在 serverfault.com 和 AWS 论坛上阅读了类似的帖子后,我已经能够解决这个问题。

就我而言,问题是我的 taskdef.json 无效。我花了好几个小时完成每个步骤才意识到虽然它是有效的 JSON 它只包括容器定义部分。修复它现在似乎可以正常工作。

最后我有两个相关的 CodePipelines。一个用于将更新的 ECR 映像部署到 ECS(如上所述),另一个用于更新基础设施并生成包含 taskdef.jsonappspec.yaml 的 zip。如果该 zip 发生变化,那么我的容器管道就会运行;同样,如果容器图像源发生变化。它需要更多的测试,但现在这似乎工作得非常顺利。