

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

# 將 Helm Chart 推送至 Amazon ECR 私有儲存庫
<a name="push-oci-artifact"></a>

您可以將開放容器計畫 (OCI) 成品推送至 Amazon ECR 儲存庫。若要查看此功能的範例，請使用下列步驟將 Helm Chart 推送至 Amazon ECR。

如需搭配 Amazon EKS 使用 Amazon ECR 託管 Helm Chart 的詳細資訊，請參閱 [在 Amazon EKS 叢集上安裝 Helm Chart](using-helm-charts-eks.md)。

**將 Helm Chart 推送到 Amazon ECR 儲存庫**

1. 安裝 Helm 用戶端的最新版本。這些步驟是使用 Helm 版本 `3.18.6` 進行編寫。為了與 Amazon EKS 支援的 Kubernetes 版本相容，請使用 Helm 3.9 版或更新版本。如需詳細資訊，請參閱[安裝 Helm](https://helm.sh/docs/intro/install/)。

1. 使用下列步驟來建立測試 Helm Chart。如需詳細資訊，請參閱 [Helm Docs - 開始使用](https://helm.sh/docs/chart_template_guide/getting_started/)。

   1. 建立一個名為 `helm-test-chart` 的 Helm Chart 並清除 `templates` 目錄的內容。

      ```
      helm create {{helm-test-chart}}
      rm -rf ./{{helm-test-chart}}/templates/*
      ```

   1. `ConfigMap` 在 `templates` 資料夾中建立 。

      ```
      cd {{helm-test-chart}}/templates
      cat <<EOF > configmap.yaml
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: {{helm-test-chart}}-configmap
      data:
        myvalue: "Hello World"
      EOF
      ```

1. 封裝圖表。輸出將包含您在推送 Helm Chart 時使用的封裝圖表的檔案名稱。

   ```
   cd ../..
   helm package {{helm-test-chart}}
   ```

   Output

   ```
   Successfully packaged chart and saved it to: /Users/{{username}}/{{helm-test-chart}}-0.1.0.tgz
   ```

1. 建立儲存庫以存放 Helm Chart。儲存庫的名稱應與您在步驟 2 中建立 Helm Chart 時使用的名稱相符。如需詳細資訊，請參閱[建立 Amazon ECR 私有儲存庫以存放映像](repository-create.md)。

   ```
   aws ecr create-repository \
        --repository-name {{helm-test-chart}} \
        --region {{us-west-2}}
   ```

1. 將您的 Helm 用戶端驗證到您打算將 Helm Chart 推送到的 Amazon ECR 登錄檔。所用的每個登錄檔皆必須取得身分驗證字符，字符有效期間為 12 個小時。如需詳細資訊，請參閱[Amazon ECR 中的私有登錄檔身分驗證](registry_auth.md)。

   ```
   aws ecr get-login-password \
        --region {{us-west-2}} | helm registry login \
        --username AWS \
        --password-stdin {{aws_account_id}}.dkr.ecr.{{region}}.amazonaws.com
   ```

1. 使用 **helm push** 命令推送 Helm Chart。輸出應該包括 Amazon ECR 儲存庫 URI 和 SHA 摘要。

   ```
   helm push {{helm-test-chart-0.1.0.tgz}} oci://{{aws_account_id}}.dkr.ecr.{{region}}.amazonaws.com/
   ```

1. 描述您的 Helm Chart。

   ```
   aws ecr describe-images \
        --repository-name {{helm-test-chart}} \
        --region {{us-west-2}}
   ```

   在輸出中，確認 `artifactMediaType` 參數指出適當的成品類型。

   ```
   {
       "imageDetails": [
           {
               "registryId": "{{aws_account_id}}",
               "repositoryName": "helm-test-chart",
               "imageDigest": "sha256:dd8aebdda7df991a0ffe0b3d6c0cf315fd582cd26f9755a347a52adEXAMPLE",
               "imageTags": [
                   "0.1.0"
               ],
               "imageSizeInBytes": 1620,
               "imagePushedAt": "2021-09-23T11:39:30-05:00",
               "imageManifestMediaType": "application/vnd.oci.image.manifest.v1+json",
               "artifactMediaType": "application/vnd.cncf.helm.config.v1+json"
           }
       ]
   }
   ```

1. （選用） 如需其他步驟，請安裝 Helm `ConfigMap`並開始使用 Amazon EKS。如需詳細資訊，請參閱[在 Amazon EKS 叢集上安裝 Helm Chart](using-helm-charts-eks.md)。