如何在创建 CodePipeline 之前在 CloudFormation 中创建 ECS 任务

How to create an ECS task in CloudFormation before the CodePipeline is created

我正在尝试在 Cloudformation 中定义我的 ECS 堆栈,包括 CI/CD 管道和 ECR 存储库。但是你 运行 陷入了一个难题:

  1. 要创建 ECS 任务定义 (AWS::ECS::TaskDefinition),您必须先创建填充的 ECR 存储库 (AWS::ECR::Repository),以便您可以指定 Image 属性 .
  2. 要填充此存储库,您必须首先创建 CodePipeline (AWS::CodePipeline::Pipeline),它将在创建时自动 运行。
  3. 要创建管道,您必须首先创建 ECS 任务定义/集群,因为管道需要部署到它上面(返回到步骤 1)。

我能看到的解决方案是:

有没有更好的方法来解决这个问题?

我的做法是先访问 ECR 存储库,但仍然使用 CloudFormation。所以我有两个模板。一个用于 ECR 回购。其余的是第二个。 ECR 存储库作为参数传递给第二个模板。但是你也可以在第二步export它的Uri是ImportValue。 Uri 创建如下:

  Uri:
    Value: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${MyECR}"

您还需要在 repo 中为任务定义提供一些初始图像。您可以通过为此初始构建分离 CodeBuild 项目(不需要 CodePipeline)来实现自动化。