

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 映像定义文件参考
<a name="file-reference"></a>

本部分仅供参考。有关使用源或部署操作为容器创建管道的更多信息，请参阅[创建管道、阶段和操作](pipelines-create.md)。

AWS CodePipeline 容器操作（例如 Amazon ECR 源操作或 Amazon ECS 部署操作）的作业工作人员使用定义文件将图像 URI 和容器名称映射到任务定义。每个定义文件是操作提供方使用的 JSON 格式文件，如下所示：
+ Amazon ECS 标准部署需要 `imagedefinitions.json` 文件作为部署操作的输入。有关使用中的 Amazon ECS 标准部署操作的教程 CodePipeline，请参阅[教程：使用 Amazon ECS 标准部署 CodePipeline](ecs-cd-pipeline.md)。有关在操作中使用 Amazon ECS 标准部署操作的 CodePipeline 另一个示例教程，请参阅[教程：使用 CodePipeline （V2 类型）构建 Docker 镜像并将其推送到亚马逊 ECR](tutorials-ecr-build-publish.md)。 ECRBuild AndPublish 
+ Amazon ECS blue/green 部署需要一个`imageDetail.json`文件作为部署操作的输入。有关示例 blue/green 部署的教程，请参阅[教程：使用 Amazon ECR 源和 ECS-to-CodeDeploy部署创建管道](tutorials-ecs-ecr-codedeploy.md)。
  + Amazon ECR 源操作生成 `imageDetail.json` 文件，并作为源操作的输出提供。

**Topics**
+ [适用于 Amazon ECS 标准部署操作的 imagedefinitions.json 文件](#pipelines-create-image-definitions)
+ [用于亚马逊 ECS 部署操作的 imageDetail.json 文件 blue/green](#file-reference-ecs-bluegreen)

## 适用于 Amazon ECS 标准部署操作的 imagedefinitions.json 文件
<a name="pipelines-create-image-definitions"></a>

映像定义文档是一个 JSON 文件，用于描述 Amazon ECS 容器名称以及映像和标签。如果您要部署基于容器的应用程序，则必须生成图像定义文件，为 CodePipeline 作业工作人员提供 Amazon ECS 容器和图像标识，以便从图像存储库（例如 Amazon ECR）中检索。

**注意**  
该文件的默认文件名是 `imagedefinitions.json`。如果您选择使用不同的文件名，必须在创建管道部署阶段时提供。

创建 `imagedefinitions.json` 文件时注意以下事项：
+ 文件必须使用 UTF-8 编码。
+ 映像定义文件的最大文件大小限制为 100 KB。
+ 您必须创建 文件作为源或构建构件，以将其作为部署操作的输入构件。换句话说，请确保将文件上传到您的源位置（例如 CodeCommit 存储库），或者作为构建的输出构件生成。

`imagedefinitions.json` 文件提供容器名称和映像 URI。它必须采用以下一组键值对的结构。


| 键 | 值 | 
| --- | --- | 
| name | container\$1name | 
| imageUri | imageUri | 

**注意**  
名称字段用于容器映像名称，即 Docker 映像的名称。

此处为 JSON 结构，其中容器名称为 `sample-app`，映像 URI 为 `ecs-repo`，标签为 `latest`：

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

您还可以构造该文件以列出多个容器/映像对。

JSON 结构：

```
[
  {
    "name": "simple-app",
    "imageUri": "httpd:2.4"
  },
  {
    "name": "simple-app-1",
    "imageUri": "mysql"
  },
  {
    "name": "simple-app-2",
    "imageUri": "java1.8"
  }
]
```

在创建管道之前，请使用以下步骤设置 `imagedefinitions.json` 文件。

1. 在为管道计划基于容器的应用程序部署过程中，请计划源阶段和生成阶段 (如果适用)。

1. 选择下列选项之一：

   1.  如果创建管道时跳过构件阶段，则您必须手动创建 JSON 文件并将其上传到源存储库，以便源操作可以提供构件。使用文本编辑器创建该文件，然后命名该文件或使用默认 `imagedefinitions.json` 文件名。将映像定义文件推送到源存储库。
**注意**  
如果源存储库为 Amazon S3 桶，请务必压缩 JSON 文件。

   1. 如果管道具有生成阶段，请在生成规范文件中添加一个命令，以便在生成阶段在源存储库中输出映像定义文件。以下示例使用 **printf** 命令创建 `imagedefinitions.json` 文件。在 `buildspec.yml` 文件的 `post_build` 部分中列出此命令：

      ```
      printf '[{"name":"container_name","imageUri":"image_URI"}]' >
      imagedefinitions.json
      ```

      您必须在 `buildspec.yml` 文件中包含映像定义文件以作为输出构件。

1. 在控制台中创建管道时，请在**创建管道**向导的**部署**页面上，在**映像文件名**字段中输入映像定义文件名。

有关创建使用 Amazon ECS 作为部署提供商的管道的教 step-by-step程，请参阅[教程：使用进行持续部署 CodePipeline](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cd-pipeline.html)。

## 用于亚马逊 ECS 部署操作的 imageDetail.json 文件 blue/green
<a name="file-reference-ecs-bluegreen"></a>

`imageDetail.json` 文档是一个 JSON 文件，用于描述您的 Amazon ECS 映像 URI。如果您要为部署部署基于容器的应用程序，则必须生成`imageDetail.json`文件以向 Amazon ECS 和 CodeDeploy作业工作人员提供图像标识，以便从映像存储库（例如 Amazon ECR）中检索。 blue/green 

**注意**  
文件名称必须是 `imageDetail.json`。

有关操作的说明，请参阅 [Amazon 弹性容器服务和 CodeDeploy 蓝绿色部署操作参考](action-reference-ECSbluegreen.md)。

您必须创建 `imageDetail.json` 文件作为源或构建构件，以将其作为部署操作的输入构件。您可以使用以下方法之一在管道中提供 `imageDetail.json` 文件：
+ 将`imageDetail.json`文件包含在您的源位置，以便在管道中将其作为输入提供给 Amazon ECS blue/green 部署操作。
**注意**  
如果源存储库为 Amazon S3 桶，请务必压缩 JSON 文件。
+ Amazon ECR 源操作会自动生成 `imageDetail.json` 文件，作为下一个操作的输入构件。
**注意**  
由于 Amazon ECR 源操作会创建此文件，因此具有 Amazon ECR 源操作的管道无需手动提供 `imageDetail.json` 文件。  
有关创建包含 Amazon ECR 源阶段的管道的教程，请参阅[教程：使用 Amazon ECR 源和 ECS-to-CodeDeploy部署创建管道](tutorials-ecs-ecr-codedeploy.md)。

![\[显示构件存储桶中包含的 imageDetail.json 文件的示意图\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/imageDetail_file_diagram.png)


`imageDetail.json` 文件提供映像 URI。它必须使用以下键值对进行构造。


| 键 | 值 | 
| --- | --- | 
| ImageURI | image\$1URI | 

------
#### [ imageDetail.json ]

以下是 JSON 结构，其中映像 URI 为 `ACCOUNTID.dkr.ecr.us-west-2.amazonaws.com/dk-image-repo@sha256:example3`：

```
{
"ImageURI": "ACCOUNTID.dkr.ecr.us-west-2.amazonaws.com/dk-image-repo@sha256:example3"
}
```

------
#### [ imageDetail.json (generated by ECR) ]

每次将更改推送到映像存储库时，Amazon ECR 源操作都会自动生成 `imageDetail.json` 文件。Amazon ECR 源操作生成的 `imageDetail.json` 将作为源操作的输出构件，提供给管道中的下一操作。

以下是 JSON 结构，其中存储库名称是 `dk-image-repo`、映像 URI 是 `ecs-repo` 且映像标签是 `latest`：

```
{
    "ImageSizeInBytes": "44728918",
    "ImageDigest": "sha256:EXAMPLE11223344556677889900bfea42ea2d3b8a1ee8329ba7e68694950afd3",
    "Version": "1.0",
    "ImagePushedAt": "Mon Jan 21 20:04:00 UTC 2019",
    "RegistryId": "EXAMPLE12233",
    "RepositoryName": "dk-image-repo",
    "ImageURI": "ACCOUNTID.dkr.ecr.us-west-2.amazonaws.com/dk-image-repo@sha256:example3",
    "ImageTags": [
        "latest"
    ]
}
```

`imageDetail.json` 文件将映像 URI 和容器名称映射到 Amazon ECS 任务定义，如下所示：
+ `ImageSizeInBytes`：存储库中映像的大小（以字节为单位）。
+ `ImageDigest`：映像清单的 `sha256` 摘要。
+ `Version`：映像版本。
+ `ImagePushedAt`：将最新映像推送到存储库的日期和时间。
+ `RegistryId`：与包含存储库的注册表关联的 AWS 账户 ID。
+ `RepositoryName`：向其中推送映像的 Amazon ECR 存储库的名称。
+ `ImageURI`：映像的 URI。
+ `ImageTags`：为映像使用的标签。

------

在创建管道之前，请使用以下步骤设置 `imageDetail.json` 文件。

1. 在为管道规划基于容器的应用程序 blue/green 部署时，请规划源阶段和构建阶段（如果适用）。

1. 选择下列选项之一：

   1.  如果您的管道跳过了构建阶段，则必须手动创建 JSON 文件并将其上传到源存储库（例如） CodeCommit，这样源操作才能提供构件。使用文本编辑器创建该文件，然后命名该文件或使用默认 `imageDetail.json` 文件名。将 `imageDetail.json` 文件推送至您的源存储库。

   1. 如果您的管道包括构建阶段，请执行以下操作：

      1. 在生成规范文件中添加一个命令，以便在生成阶段在源存储库中输出映像定义文件。以下示例使用 **printf** 命令创建 `imageDetail.json` 文件。可以在 buildspec.yml 文件的 `post_build` 部分中列出该命令：

         ```
         printf '{"ImageURI":"image_URI"}' > imageDetail.json
         ```

         您必须包含 `imageDetail.json` 文件作为 `buildspec.yml` 文件中的输出构件。

      1. 添加 `imageDetail.json` 作为 `buildspec.yml` 文件中的构件文件。

         ```
         artifacts:
           files:
             - imageDetail.json
         ```