如何解决如何在创建 CodePipeline 之前在 CloudFormation 中创建 ECS 任务
我正在尝试在 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)来实现自动化。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。