如何在创建 CodePipeline 之前在 CloudFormation 中创建 ECS 任务
How to create an ECS task in CloudFormation before the CodePipeline is created
我正在尝试在 Cloudformation 中定义我的 ECS 堆栈,包括 CI/CD 管道和 ECR 存储库。但是你 运行 陷入了一个难题:
- 要创建 ECS 任务定义 (
AWS::ECS::TaskDefinition
),您必须先创建填充的 ECR 存储库 (AWS::ECR::Repository
),以便您可以指定 Image
属性 .
- 要填充此存储库,您必须首先创建 CodePipeline (
AWS::CodePipeline::Pipeline
),它将在创建时自动 运行。
- 要创建管道,您必须首先创建 ECS 任务定义/集群,因为管道需要部署到它上面(返回到步骤 1)。
我能看到的解决方案是:
- 不要在 Cloudformation 中创建 ECR 存储库并将其作为参数传递给堆栈。
- 在任务定义中定义一个虚拟映像以进行首次部署,然后创建将创建真实 ECR 存储库并部署真实映像的管道。
- 在单独的堆栈中创建 CodeBuild 项目和 ECR 存储库,使用 lambda 函数触发 CodeBuild 项目(我认为它 运行 不会像管道那样自动创建),创建 ECS集群,然后创建管道。这似乎比它应该的更复杂。
有没有更好的方法来解决这个问题?
我的做法是先访问 ECR 存储库,但仍然使用 CloudFormation。所以我有两个模板。一个用于 ECR 回购。其余的是第二个。 ECR 存储库作为参数传递给第二个模板。但是你也可以在第二步export
它的Uri是ImportValue
。 Uri 创建如下:
Uri:
Value: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${MyECR}"
您还需要在 repo 中为任务定义提供一些初始图像。您可以通过为此初始构建分离 CodeBuild 项目(不需要 CodePipeline)来实现自动化。
我正在尝试在 Cloudformation 中定义我的 ECS 堆栈,包括 CI/CD 管道和 ECR 存储库。但是你 运行 陷入了一个难题:
- 要创建 ECS 任务定义 (
AWS::ECS::TaskDefinition
),您必须先创建填充的 ECR 存储库 (AWS::ECR::Repository
),以便您可以指定Image
属性 . - 要填充此存储库,您必须首先创建 CodePipeline (
AWS::CodePipeline::Pipeline
),它将在创建时自动 运行。 - 要创建管道,您必须首先创建 ECS 任务定义/集群,因为管道需要部署到它上面(返回到步骤 1)。
我能看到的解决方案是:
- 不要在 Cloudformation 中创建 ECR 存储库并将其作为参数传递给堆栈。
- 在任务定义中定义一个虚拟映像以进行首次部署,然后创建将创建真实 ECR 存储库并部署真实映像的管道。
- 在单独的堆栈中创建 CodeBuild 项目和 ECR 存储库,使用 lambda 函数触发 CodeBuild 项目(我认为它 运行 不会像管道那样自动创建),创建 ECS集群,然后创建管道。这似乎比它应该的更复杂。
有没有更好的方法来解决这个问题?
我的做法是先访问 ECR 存储库,但仍然使用 CloudFormation。所以我有两个模板。一个用于 ECR 回购。其余的是第二个。 ECR 存储库作为参数传递给第二个模板。但是你也可以在第二步export
它的Uri是ImportValue
。 Uri 创建如下:
Uri:
Value: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${MyECR}"
您还需要在 repo 中为任务定义提供一些初始图像。您可以通过为此初始构建分离 CodeBuild 项目(不需要 CodePipeline)来实现自动化。