

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 映像定義檔案參考
<a name="file-reference"></a>

本節僅供參考。如需有關利用來源建立管道或部署容器動作的詳細資訊，請參閱 [建立管道、階段和動作](pipelines-create.md)。

AWS CodePipeline 容器動作的任務工作者，例如 Amazon ECR 來源動作或 Amazon ECS 部署動作，使用定義檔案將映像 URI 和容器名稱對應至任務定義。每個定義檔案都是一種 JSON 格式的檔案，由動作提供者使用，如下所示：
+ Amazon ECS 標準部署需要 `imagedefinitions.json` 檔案做為部署動作的輸入。如需在 CodePipeline 中使用 Amazon ECS 標準部署動作的教學課程，請參閱 [教學課程：使用 CodePipeline 進行 Amazon ECS 標準部署](ecs-cd-pipeline.md)。如需使用 CodePipeline 中的 Amazon ECS 標準部署動作搭配 ECRBuildAndPublish 動作的另一個範例教學課程，請參閱 [教學課程：使用 CodePipeline (V2 類型） 建置 Docker 映像並將其推送至 Amazon ECR](tutorials-ecr-build-publish.md)。
+ Amazon ECS 藍/綠部署需要 `imageDetail.json` 檔案做為部署動作的輸入。如需藍/綠部署範例的教學課程，請參閱 [教學課程：使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道](tutorials-ecs-ecr-codedeploy.md)。
  + Amazon ECR 來源動作產生 `imageDetail.json` 檔案，提供做為來源動作的輸出。

**Topics**
+ [Amazon ECS 標準部署動作的 imagedefinitions.json 檔案](#pipelines-create-image-definitions)
+ [Amazon ECS 藍/綠部署動作的 imageDetail.json 檔案](#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)。

## Amazon ECS 藍/綠部署動作的 imageDetail.json 檔案
<a name="file-reference-ecs-bluegreen"></a>

`imageDetail.json` 文件是描述 Amazon ECS 映像 URI 的 JSON 檔案。如果您要為藍/綠部署部署容器型應用程式，您必須產生 `imageDetail.json` 檔案，為 Amazon ECS 和 CodeDeploy 任務工作者提供映像識別，以便從映像儲存庫擷取，例如 Amazon ECR。

**注意**  
此檔案的名稱必須是 `imageDetail.json`。

如需 動作及其參數的說明，請參閱 [Amazon Elastic Container Service 和 CodeDeploy 藍綠部署動作參考](action-reference-ECSbluegreen.md)。

您必須建立 `imageDetail.json` 檔案做為來源或建置成品，以做為部署動作的輸入成品。您可以使用下列其中一種方法在管道中提供 `imageDetail.json` 檔案：
+ 在來源位置中包含 檔案，以便在管道中提供該`imageDetail.json`檔案，做為 Amazon ECS 藍/綠部署動作的輸入。
**注意**  
如果您的來源儲存庫是 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_tw/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. ​在管道中規劃容器式應用程式藍/綠部署時，請適時規劃原始碼階段與建置階段。

1. 選擇下列其中一項：

   1.  如果您的管道已略過建置階段，則必須手動建立 JSON 檔案並將其上傳至來源儲存庫，例如 CodeCommit，以便來源動作可以提供成品。使用文字編輯器建立檔案，並為檔案命名或使用預設的 `imageDetail.json`​ 檔案名稱。推送 `imageDetail.json` 檔案到您的原始碼儲存庫。

   1. 如果您的管道有建置階段，請執行以下操作：

      1. 新增命令到您的建置規格檔案，此檔案會在建置階段將映像定義檔案輸出至原始碼儲存庫。以下範例使用 **printf** 命令來建立 `imageDetail.json` 檔案。在 buildspec.yml 檔案的 `post_build` 區段列出此命令：

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

         您必須在 `buildspec.yml` 檔案包含 `imageDetail.json` 檔案以做為輸出成品。

      1. 在 `buildspec.yml` 檔案中新增 `imageDetail.json` 為成品檔案。

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