

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

# 在 Amazon ECR 中建立儲存庫建立範本
<a name="repository-creation-templates-create"></a>

您可以建立儲存庫建立範本，以定義在提取快取、在推送時建立或複寫動作期間，用於 Amazon ECR 代表您建立之儲存庫的設定。建立儲存庫建立範本後，所有建立的新儲存庫都會套用這些設定。這並不影響任何先前建立的儲存庫。

使用 範本設定儲存庫時，您可以選擇指定 KMS 金鑰和資源標籤。如果您想要在一或多個範本中使用 KMS 金鑰、資源標籤或兩者的組合，您需要：
+ [建立儲存庫建立範本的自訂政策](repository-creation-templates-custom.md).
+ [為儲存庫建立範本建立 IAM 角色](repository-creation-templates-create-iam.md).

設定完成後，您可以將自訂角色連接至登錄檔中的特定範本。



## 建立儲存庫建立範本的 IAM 許可
<a name="repository-creation-templates-iam"></a>

IAM 主體需要下列許可才能管理儲存庫建立範本。必須使用身分型 IAM 政策授予此許可。
+ `ecr:CreateRepositoryCreationTemplate` – 准許建立儲存庫建立範本。
+ `ecr:UpdateRepositoryCreationTemplate` – 准許更新儲存庫建立範本。
+ `ecr:DescribeRepositoryCreationTemplates` – 准許列出登錄檔中的儲存庫建立範本。
+ `ecr:DeleteRepositoryCreationTemplate` – 准許刪除儲存庫建立範本。
+ `ecr:CreateRepository` – 准許建立 Amazon ECR 儲存庫。
+ `ecr:PutLifecyclePolicy` – 准許建立生命週期政策，並將其套用至儲存庫。僅當儲存庫建立範本包含生命週期政策時，才需要此許可。
+ `ecr:SetRepositoryPolicy` – 准許為儲存庫建立許可政策。僅當儲存庫建立範本包含儲存庫政策時，才需要此許可。
+ `iam:PassRole` – 准許允許實體將角色傳遞至服務或應用程式。需要擔任角色才能代表您執行動作的 服務和應用程式需要此許可。

## 建立儲存庫建立範本
<a name="repository-creation-templates-creating"></a>

完成範本的必要先決條件後，您就可以繼續建立儲存庫建立範本。

------
#### [ AWS 管理主控台 ]

**若要建立儲存庫建立範本 (AWS 管理主控台)**

1. 在 [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/) 開啟 Amazon ECR 主控台。

1. 從導覽列選擇要在其中建立儲存庫建立範本的區域。

1. 在導覽窗格中，選擇**私有登錄檔**，**儲存庫建立範本**。

1. 在**儲存庫建立範本**頁面上，選擇**建立範本**。

1. 在**步驟 1：定義範本**頁面上，針對**範本詳細資料**，選擇**特定字首**以將範本套用至特定儲存庫命名空間字首，或選擇 **ECR 登錄檔中的任何字首**，將範本套用至與區域中任何其他範本不相符的所有儲存庫。

   1. 如果您選擇**特定字首**，請針對**字首**指定要套用範本的儲存庫命名空間字首。總會有一個假設 `/` 套用至字首的結尾。例如，`prod` 字首會套用至開頭為 `prod/` 的所有儲存庫。同樣地，`prod/team` 字首會套用至開頭為 `prod/team/` 的所有儲存庫。

   1. 如果您選擇 **ECR 登錄檔中的任何字首**，**字首**將設定為 `ROOT`。

1. 對於**適用於 的** ，指定此範本將套用到哪些 Amazon ECR 工作流程。選項包括 `PULL_THROUGH_CACHE`、`CREATE_ON_PUSH` 和 `REPLICATION`。

1. 針對**範本描述**，請指定範本的選擇性描述，然後選擇**下一步**。

1. 在**步驟 2：新增儲存庫建立組態**頁面中，指定要套用至使用範本建立之儲存庫的儲存庫設定組態。

   1. 針對 **Image tag mutability (映像標籤可變性)**，選擇要使用的標籤可變性設定。如需詳細資訊，請參閱[防止在 Amazon ECR 中覆寫映像標籤](image-tag-mutability.md)。
      + **可互**斥 – 如果您想要覆寫影像標籤，請選擇此選項。建議用於使用提取快取動作的儲存庫，以確保 Amazon ECR 可以更新快取映像。此外，若要停用幾個可變標籤的標籤更新，請輸入標籤名稱或使用萬用字元 (\*) 來比對 **Mutable 標籤排除文字方塊中的多個類似標籤**。
      + **不可變**：如果您想要防止映像標籤遭到覆寫，而且在推送具有現有標籤的映像時，它適用於儲存庫中的所有標籤和排除項目，請選擇此選項。`ImageTagAlreadyExistsException` 如果您嘗試推送具有現有標籤的映像，Amazon ECR 會傳回 。此外，若要啟用幾個不可變標籤的標籤更新，請輸入標籤名稱或使用萬用字元 (\*) 在**不可分割標籤排除文字方塊中比對多個類似的標籤**。

   1. 針對**加密組態**，請選擇要使用的加密設定。如需詳細資訊，請參閱[靜態加密](encryption-at-rest.md)。

      選取 **AES-256** 時，Amazon ECR 會使用伺服器端加密與 Amazon Simple Storage Service 受管加密金鑰，該加密金鑰使用行業標準的 AES-256 加密演算法對靜態資料進行加密。此服務無須額外付費。

      選取 **AWS KMS** 時，Amazon ECR 會使用儲存在 AWS Key Management Service (AWS KMS) 中的金鑰進行伺服器端加密。當您使用 AWS KMS 加密資料時，您可以使用由 Amazon ECR 管理的預設 AWS 受管金鑰，或指定自己的 AWS KMS 金鑰，稱為*客戶受管金鑰*。
**注意**  
一旦建立儲存庫，就無法變更儲存庫的加密設定。

   1. 針對**儲存庫許可**，請指定要套用至使用此範本建立之儲存庫的儲存庫許可政策。您可以選擇性地使用下拉式清單，針對最常見的使用案例選取其中一個 JSON 範例。如需詳細資訊，請參閱[Amazon ECR 中的私有儲存庫政策](repository-policies.md)。

   1. 針對**儲存庫生命週期政策**，請指定要套用至使用此範本建立的儲存庫之儲存庫生命週期政策。您可以選擇性地使用下拉式清單，針對最常見的使用案例選取其中一個 JSON 範例。如需詳細資訊，請參閱[在 Amazon ECR 中使用生命週期政策來自動化映像的清除](LifecyclePolicies.md)。

   1. 對於**儲存庫 AWS 標籤**，請以鍵值對的形式指定中繼資料，以與使用此範本建立的儲存庫建立關聯，然後選擇**下一步**。如需詳細資訊，請參閱[在 Amazon ECR 中標記私有儲存庫](ecr-using-tags.md)。

   1. 對於**儲存庫建立角色**，從下拉式功能表中選取自訂 IAM 角色，以便在範本中使用儲存庫標籤或 KMS 時用於儲存庫建立範本 （如需詳細資訊[為儲存庫建立範本建立 IAM 角色](repository-creation-templates-create-iam.md)，請參閱 )。然後選擇**下一步**。

1. 在**步驟 3：檢閱和建立**頁面上，檢閱您為儲存庫建立範本指定的設定。選擇**編輯**選項來進行變更。一旦完成，請選擇**建立**。

------
#### [ AWS CLI ]

[create-repository-creation-template](https://docs.aws.amazon.com/cli/latest/reference/ecr/create-repository-creation-template.html) AWS CLI 命令用於為您的私有登錄檔建立儲存庫建立範本。

**若要建立儲存庫建立範本 (AWS CLI)**

1. 使用 AWS CLI 為 [create-repository-creation-template](https://docs.aws.amazon.com/cli/latest/reference/ecr/create-repository-creation-template.html) 命令產生骨架。

   ```
   aws ecr create-repository-creation-template \
       --generate-cli-skeleton
   ```

   命令的輸出會顯示儲存庫建立範本的完整語法。

   ```
   {
   "appliedFor":[""], // string array, but valid are PULL_THROUGH_CACHE, CREATE_ON_PUSH, and REPLICATION
   "prefix": "string",
       "description": "string",
       "imageTagMutability": "MUTABLE"|"IMMUTABLE"|"IMMUTABLE_WITH_EXCLUSION"|"MUTABLE_WITH_EXCLUSION",
       "imageTagMutabilityExclusionFilters": [
           "filterType": "WILDCARD",
           "filter": "string"
       ],
       "repositoryPolicy": "string",
       "lifecyclePolicy": "string"
   "encryptionConfiguration": {
   "encryptionType": "AES256"|"KMS",
           "kmsKey": "string"
       },
       "resourceTags": [
           {
   "Key": "string",
               "Value": "string"
           }
       ],
       "customRoleArn": "string", // must be a valid IAM Role ARN
   }
   ```

1. 使用上一個步驟的`repository-creation-template.json`輸出建立名為 的檔案。此範本會為在 下建立的任何儲存庫設定 KMS 加密金鑰，`prod/*`該儲存庫政策會啟用將映像推送和提取到未來的儲存庫、設定生命週期政策，使映像過期超過兩週，並設定自訂角色，讓 ECR 存取 KMS 金鑰，並將資源標籤指派給`examplekey`未來的儲存庫。

   ```
   {
   "prefix": "prod",
       "description": "For repositories cached from my PTC rule and in my replication configuration that start with 'prod/'",
       "appliedFor": ["PULL_THROUGH_CACHE", "CREATE_ON_PUSH", "REPLICATION"],
       "encryptionConfiguration": {
   "encryptionType": "KMS",
           "kmsKey": "arn:aws:kms:us-west-2:111122223333:key/a1b2c3d4-5678-90ab-cdef-example11111"
       },
       "resourceTags": [
           {
   "Key": "examplekey",
               "Value": "examplevalue"
           }
       ],
       "imageTagMutability": "IMMUTABLE_WITH_EXCLUSION",
       "imageTagMutabilityExclusionFilters": [
         {
         "filterType": "WILDCARD",
         "filter": "latest"
         },
         {
         "filterType": "WILDCARD",
         "filter": "beta*"
         }
       ]
       "repositoryPolicy": "{\"Version\":\"2012-10-17\",		 	 	 \"Statement\":[{\"Sid\":\"AllowPushPullIAMRole\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:user\/IAMusername\"},\"Action\":[\"ecr:BatchGetImage\",\"ecr:BatchCheckLayerAvailability\",\"ecr:CompleteLayerUpload\",\"ecr:GetDownloadUrlForLayer\",\"ecr:InitiateLayerUpload\",\"ecr:PutImage\",\"ecr:UploadLayerPart\"]}]}", 
       "lifecyclePolicy": "{\"rules\":[{\"rulePriority\":1,\"description\":\"Expire images older than 14 days\",\"selection\":{\"tagStatus\":\"any\",\"countType\":\"sinceImagePushed\",\"countUnit\":\"days\",\"countNumber\":14},\"action\":{\"type\":\"expire\"}}]}",
       "customRoleArn": "arn:aws:iam::111122223333:role/myRole"
   }
   ```

1. 使用下列命令來建立儲存庫建立範本。請確定您在`repository-creation-template.json`下列範例中指定在上一個步驟中建立的組態檔案名稱，以取代 。

   ```
   aws ecr create-repository-creation-template \
       --cli-input-json file://{{repository-creation-template.json}}
   ```

------