imagedefinitions.json可以引用现有任务定义吗?

时间:2019-10-07 07:52:19

标签: amazon-ecs aws-codepipeline aws-codebuild

我当前的设置使用AWS CodeBuild构建一个docker-image并将其推送到AWS ECR。 将CodePipeline中的Docker映像从ECR部署到ECS服务时,需要使用imagedefinitions.json文件来执行CodePipeline中的部署步骤。 据我了解,该文件用于定义新的任务定义。我目前在CodeBuild的buildspec.yml文件中定义此文件:

echo Writing image definitions file...  
- printf '[{"name":"%s","imageUri":"%s"}]' $MODULE $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json    

artifacts:  
  files: imagedefinitions.json  

但是,我想使用现有的任务定义,而不是为每个构建都创建相同任务定义的新修订版。我需要使用在现有任务定义中定义的环境变量,并且在imagedefinitions.json文件中也没有找到定义这些变量的方法。

  1. imagedefinitions.json是否可用于指定现有任务定义?
  2. 或者,我可以在此文件中指定环境变量吗?

1 个答案:

答案 0 :(得分:0)

  

imagedefinitions.json是否可用于指定现有任务定义?

“ imagedefinitions.json”文件未定义ECS任务。它定义了一个container_name(ECS任务定义的一部分)和image_name:tag。

[
  {
    "name": "sample-app",
    "imageUri": "11111EXAMPLE.dkr.ecr.us-west-2.amazonaws.com/ecs-repo:latest"
  }
]

在ECS部署操作中,您可以指定集群名称和服务名称。添加“ imagedefinitions.json”中的两项,即container_name和image:tag,ECS作业人员将具有创建任务定义修订和更新服务(服务具有关联的任务定义)所需的全部信息。

管道中的ECS部署操作定义:

      {
            "name": "Deploy",
            "actions": [
                {
                    "name": "Deploy",
                    "actionTypeId": {
                        "category": "Deploy",
                        "owner": "AWS",
                        "provider": "ECS",
                        "version": "1"
                    },
                    "runOrder": 1,
                    "roleArn": "arn:aws:iam::<Account>:role/Pipeline_Role",
                    "configuration": {
                        "ClusterName": "<Cluster>",     <====================
                        "ServiceName": "<Service>”      <====================
                    },
                    "outputArtifacts": [],
                    "inputArtifacts": [
                        {
                            "name": "SourceArtifact"
                        }
                    ],
                    "region": "us-east-1"
                }
            ]
        }


请注意,使用ECS部署操作的部署阶段的结果是一个新的任务定义修订版,该修订版将在任务定义中包含指定容器的更新的图像URI。您的其他任务定义参数(例如环境变量)应保持不变。

  

或者,我可以在此文件中指定环境变量吗?

否,但是如上所述,您现有的Task Def(创建新修订版的TaskDef)环境变量将保持不变。

让我知道是否有任何困惑。