带有ECS蓝/绿部署的AWS CodePipeline因内部错误而失败

问题描述 投票:0回答:1

我有一个CodePipeline设置,其中代码的更改构建并将图像推送到ECR。我希望在构建新图像时自动更新ECS。我已经配置了ECS蓝/绿动作,但是当它运行时,它几乎立即失败并显示有关“内部错误”的消息。在CodeDeploy中没有创建失败的部署。

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

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

当任一输入改变时,我重建容器并推送到ECR标记为“最新”。下一步应该是ECS的蓝/绿部署。我已经配置了CodeDeploy,如果手动触发,则作业有效。

当它通过CodePipeline触发时,它将失败并且我收到消息“操作执行失败InternalError。错误参考代码:<some id>”。我怀疑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

amazon-web-services amazon-ecs aws-code-deploy aws-codepipeline
1个回答
2
投票

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

在我的情况下,问题是我的taskdef.json无效。我花了几个小时来完成每一步才意识到虽然它是有效的JSON,但它只包含了容器定义部分。在修复它似乎现在正常工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.