好的,所以我有一个CodePipeline,它做的很香草
CodeCommit -> Build Docker images -> CodeDeploy to ECS
在buildspec.yml
文件中,AWS requires outputting imagedefinitions.json
作为工件,CodePipeline可用于将容器名称映射到ECR图像URL。
这是在您的buildspec.yml
中经常被引用的示例:
printf '[{"name":"MyService","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/myservice/app:latest > imagedefinitions.json
但这对我来说似乎完全多余。在ECS任务定义中,我们可以在containerDefinitions
下包含以下内容:
"containerDefinitions": [
{
"name": "MyService",
"image": "123456789.dkr.ecr.us-east-1.amazonaws.com/myservice/app:latest"
},
...
]
为什么要使用CodePipeline CodeDeploy ECS任务,我们是否必须提供ECS任务定义中已指定的信息?在这里消除对工件的需要(以及用来存储所说工件的S3存储桶)会更加干净!
也许我不了解CodeDeploy / ECS的一些基础知识。
答案 0 :(得分:1)
您很有意思,但是在生产系统中使用“:latest”标识/检索图像通常不是一个好主意,主要是因为标签的不确定性并可能导致意外。互联网上有很多文章讨论了这种反模式,例如[1]。
为回答您的问题,“ imagedefinitions.json”的想法是在任务定义中标识容器的更新图像。并非一直都在使用':latest'标记。
答案 1 :(得分:0)
printf'[{“ name”:“ MyService”,“ imageUri”:“%s”}]''MyService名称是什么?