为什么 CodePipeline 需要 `imagedefinitions.json` 而 ECS 任务定义已经有了这个?
Why does CodePipeline require an `imagedefinitions.json` when ECS task definitions already have this?
好的,所以我有一个 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没看懂
你的观点很好,但是在生产系统中使用“:latest”来处理 identify/retrieve 图像通常不是一个好主意,主要是因为标签不是确定性的,可能会导致意外。互联网上有很多文章讨论这种反模式,例如[1].
为了回答您的问题,"imagedefinitions.json" 的想法是在任务定义中识别容器的更新图像。它不打算一直使用“:latest”标签。
printf '[{"name":"MyService","imageUri":"%s"}]' MyService 的名称是什么?
好的,所以我有一个 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没看懂
你的观点很好,但是在生产系统中使用“:latest”来处理 identify/retrieve 图像通常不是一个好主意,主要是因为标签不是确定性的,可能会导致意外。互联网上有很多文章讨论这种反模式,例如[1].
为了回答您的问题,"imagedefinitions.json" 的想法是在任务定义中识别容器的更新图像。它不打算一直使用“:latest”标签。
printf '[{"name":"MyService","imageUri":"%s"}]' MyService 的名称是什么?