

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon ECR プライベートリポジトリへのイメージのプッシュ
<a name="image-push"></a>

Docker イメージ、マニフェストリスト、Open Container Initiative (OCI) イメージと互換アーティファクトをプライベートリポジトリにプッシュできます。

Amazon ECR は、イメージを他のリポジトリにレプリケートする方法を提供します。プライベートレジストリ設定でレプリケーション設定を指定することで、自分のレジストリ内のリージョン間や、異なるアカウント間でレプリケートすることができます。詳細については、「[Amazon ECR でのプライベートレジストリ設定](registry-settings.md)」を参照してください。

**注記**  
現在アーカイブされているイメージをプッシュすると、そのイメージは自動的に復元され、アーカイブから削除されます。イメージのアーカイブと復元の詳細については、「」を参照してください[Amazon ECR でのイメージのアーカイブ](archive_restore_image.md)。

レジストリ BLOB マウントが有効で、マウントパラメータが含まれている場合、Amazon ECR はプッシュオペレーション中にレジストリ内の既存のレイヤーを自動的にチェックします。同じレジストリ内の別のリポジトリにレイヤーがすでに存在する場合、Amazon ECR は重複をアップロードする代わりに既存のレイヤーをマウントします。詳細については、「[Amazon ECR での Blob マウント](blob-mounting.md)」を参照してください。

**Topics**
+ [Amazon ECR プライベートリポジトリにイメージをプッシュするための IAM アクセス許可](image-push-iam.md)
+ [Amazon ECR プライベートリポジトリへの Docker イメージのプッシュ](docker-push-ecr-image.md)
+ [Amazon ECR プライベートリポジトリへのマルチアーキテクチャイメージのプッシュ](docker-push-multi-architecture-image.md)
+ [Amazon ECR プライベートリポジトリへの Helm チャートのプッシュ](push-oci-artifact.md)

# Amazon ECR プライベートリポジトリにイメージをプッシュするための IAM アクセス許可
<a name="image-push-iam"></a>

ユーザーには、Amazon ECR プライベートリポジトリにイメージをプッシュするための IAM アクセス許可が必要です。最小特権の付与に関するベストプラクティスに従って、特定のリポジトリへのアクセスを許可できます。また、すべてのリポジトリへのアクセスを許可することもできます。

ユーザーは、認可トークンをリクエストして、イメージをプッシュする各 Amazon ECR レジストリに対して認証を受ける必要があります。Amazon ECR には、さまざまなレベルでユーザーアクセスを制御するための AWS 管理ポリシーがいくつか用意されています。詳細については、「[AWS Amazon Elastic Container Registry の マネージドポリシー](security-iam-awsmanpol.md)」を参照してください。

独自の IAM ポリシーを作成することもできます。次の IAM ポリシーは、特定のリポジトリにイメージをプッシュするために必要なアクセス許可を付与します。特定のリポジトリのアクセス許可を制限するには、リポジトリの完全な Amazon リソースネーム (ARN) を使用します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:CompleteLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:InitiateLayerUpload",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage",
                "ecr:BatchGetImage"
            ],
            "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/repository-name"
        },
        {
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
        }
    ]
}
```

------

次の IAM ポリシーは、すべてのリポジトリにイメージをプッシュするために必要なアクセス許可を付与します。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                    "ecr:CompleteLayerUpload",
                    "ecr:GetAuthorizationToken",
                    "ecr:UploadLayerPart",
                    "ecr:InitiateLayerUpload",
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:PutImage",
                    "ecr:BatchGetImage"
            ],
            "Resource": "arn:aws:ecr:us-west-2:111122223333:repository/*"
        } 
    ]
}
```

# Amazon ECR プライベートリポジトリへの Docker イメージのプッシュ
<a name="docker-push-ecr-image"></a>

**docker push**コマンドを使用してコンテナイメージを Amazon ECR リポジトリにプッシュできます。

Amazon ECR では、マルチアーキテクチャイメージに使用される Docker マニフェストリストの作成とプッシュもサポートされています。詳細については、「[Amazon ECR プライベートリポジトリへのマルチアーキテクチャイメージのプッシュ](docker-push-multi-architecture-image.md)」を参照してください。

**Docker イメージを Amazon ECR リポジトリにプッシュするには**

イメージをプッシュする前に Amazon ECR リポジトリが存在するか、リポジトリ作成テンプレートが定義されている必要があります。詳細については、「[イメージを保存するための Amazon ECR プライベートリポジトリの作成](repository-create.md)」および「[プルスルーキャッシュ、プッシュ時作成、またはレプリケーションアクション中に作成されたリポジトリを制御するテンプレート](repository-creation-templates.md)」を参照してください。

1. イメージのプッシュ先となる Amazon ECR レジストリに対して Docker クライアントを認証します。認証トークンは、使用するレジストリごとに取得する必要があり、トークンは 12 時間有効です。詳細については、「[Amazon ECR でのプライベートレジストリ認証](registry_auth.md)」を参照してください。

   Amazon ECR レジストリに対して Docker を認証するには、**aws ecr get-login-password** コマンドを実行します。認証トークンを **docker login** コマンドに渡すとき、ユーザー名の `AWS` 値を使用し、認証先の Amazon ECR レジストリの URI を指定します。複数のレジストリに対して認証する場合は、レジストリごとにコマンドを繰り返す必要があります。
**重要**  
エラーが発生した場合は、 AWS CLIの最新バージョンをインストールまたはアップグレードします。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[Installing the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。

   ```
   aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
   ```

1. イメージリポジトリがまだプッシュ先のレジストリに存在しておらず、リポジトリ作成テンプレートが定義されている場合は、リポジトリ作成テンプレートのプレフィックスと目的のリポジトリ名を使用してイメージをプッシュできます。ECR は、リポジトリ作成テンプレートの事前定義された設定を使用して、自動的にリポジトリを作成します。

   一致するリポジトリ作成テンプレートが定義されていない場合は、リポジトリを作成する必要があります。詳細については、[プルスルーキャッシュ、プッシュ時作成、またはレプリケーションアクション中に作成されたリポジトリを制御するテンプレート](repository-creation-templates.md)または[イメージを保存するための Amazon ECR プライベートリポジトリの作成](repository-create.md)を参照してください。

1. プッシュするローカルイメージを識別します。**docker images** コマンドを実行し、システム上のコンテナイメージを一覧表示します。

   ```
   docker images
   ```

   イメージは、結果のコマンド出力で *repository:tag* の値またはイメージ ID によって識別できます。

1. <a name="image-tag-step"></a>Amazon ECR レジストリ、リポジトリ、およびオプションのイメージタグ名を組み合わせたタグをイメージに付与します。レジストリ形式は  `aws_account_id.dkr.ecr.region.amazonaws.com`です。リポジトリ名は、イメージ用に作成したリポジトリと一致する必要があります。イメージタグを省略した場合、タグは `latest` と見なされます。

   次の例では、ローカルイメージに ID * e9ae3c220b23* を としてタグ付けします`aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag`。

   ```
   docker tag e9ae3c220b23 aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag
   ```

1. <a name="image-push-step"></a>**docker push** コマンドを使用してイメージをプッシュします。

   ```
   docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag
   ```

1. (オプション) 追加のタグをイメージに適用し、[Step 4](#image-tag-step) と[Step 5](#image-push-step) を繰り返して、それらのタグを Amazon ECR にプッシュします。

# Amazon ECR プライベートリポジトリへのマルチアーキテクチャイメージのプッシュ
<a name="docker-push-multi-architecture-image"></a>

Docker マニフェストリストを作成してプッシュすることで、マルチアーキテクチャイメージを Amazon ECR リポジトリにプッシュできます。*マニフェストリスト*は、1 つ以上のイメージ名を指定して作成されるイメージのリストです。ほとんどの場合、マニフェストリストは、同じ機能を提供するが異なるオペレーティングシステムまたはアーキテクチャ向けのイメージから作成されます。マニフェストリストは必須ではありません。詳細については、「[Docker マニフェスト](https://docs.docker.com/engine/reference/commandline/manifest/)」を参照してください。

マニフェストリストは、他の Amazon ECR イメージと同様に、Amazon ECS タスク定義または Amazon EKS ポッド仕様でプルまたは参照できます。

 **前提条件** 
+ Docker CLI で実験機能をオンにします。実験機能の詳細については、Docker ドキュメントの「[Experimental features](https://docs.docker.com/engine/reference/commandline/cli/#experimental-features)」を参照してください。
+ イメージをプッシュする前に、Amazon ECR リポジトリが存在している必要があります。詳細については、「[イメージを保存するための Amazon ECR プライベートリポジトリの作成](repository-create.md)」を参照してください。
+ Docker マニフェストを作成する前に、イメージをリポジトリにプッシュする必要があります。イメージをプッシュする方法については、「[Amazon ECR プライベートリポジトリへの Docker イメージのプッシュ](docker-push-ecr-image.md)」を参照してください。

**マルチアーキテクチャ Docker イメージを Amazon ECR リポジトリにプッシュするには**

1. イメージのプッシュ先となる Amazon ECR レジストリに対して Docker クライアントを認証します。認証トークンは、使用するレジストリごとに取得する必要があり、トークンは 12 時間有効です。詳細については、「[Amazon ECR でのプライベートレジストリ認証](registry_auth.md)」を参照してください。

   Amazon ECR レジストリに対して Docker を認証するには、**aws ecr get-login-password** コマンドを実行します。認証トークンを **docker login** コマンドに渡すとき、ユーザー名の `AWS` 値を使用し、認証先の Amazon ECR レジストリの URI を指定します。複数のレジストリに対して認証する場合は、レジストリごとにコマンドを繰り返す必要があります。
**重要**  
エラーが発生した場合は、 AWS CLIの最新バージョンをインストールまたはアップグレードします。詳細については、「*AWS Command Line Interface ユーザーガイド*」の「[Installing the AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。

   ```
   aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
   ```

1. リポジトリ内のイメージをリストし、イメージタグを確認します。

   ```
   aws ecr describe-images --repository-name my-repository
   ```

1. Docker マニフェストリストを作成します。`manifest create` コマンドは、参照されたイメージがリポジトリにすでに存在することを確認し、マニフェストをローカルに作成します。

   ```
   docker manifest create aws_account_id.dkr.ecr.region.amazonaws.com/my-repository aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:image_one_tag aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:image_two
   ```

1. (オプション) Docker マニフェストリストを検査します。これにより、マニフェストリストで参照される各イメージマニフェストのサイズとダイジェストを確認できます。

   ```
   docker manifest inspect aws_account_id.dkr.ecr.region.amazonaws.com/my-repository
   ```

1. Docker マニフェストリストを Amazon ECR リポジトリにプッシュします。

   ```
   docker manifest push aws_account_id.dkr.ecr.region.amazonaws.com/my-repository
   ```

# Amazon ECR プライベートリポジトリへの Helm チャートのプッシュ
<a name="push-oci-artifact"></a>

Open Container Initiative (OCI) アーティファクトを Amazon ECR リポジトリにプッシュできます。この機能の例を確認するには、次の手順を使用して Helm チャートを Amazon ECR にプッシュします。

Amazon ECR でホストされる Helm チャートを Amazon EKS で使用する方法については、「[Amazon EKS クラスターに Helm チャートをインストールする](using-helm-charts-eks.md)」を参照してください。

**Helm チャートを Amazon ECR リポジトリにプッシュするには**

1. Helm クライアントの最新バージョンをインストールします。これらのステップは、Helm バージョン `3.18.6` を使用して作成されました。Amazon EKS でサポートされている Kubernetes バージョンとの互換性を維持するには、Helm バージョン 3.9 以降を使用します。詳細については、「[Installing Helm](https://helm.sh/docs/intro/install/)」を参照してください。

1. 次の手順に従って、テスト Helm チャートを作成します。詳細については、Helm ドキュメントの「[Getting Started](https://helm.sh/docs/chart_template_guide/getting_started/)」を参照してください。

   1. `helm-test-chart` という名前の Helm チャートを作成し、`templates` ディレクトリの内容をクリアします。

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

   1. `templates` フォルダに `ConfigMap` を作成します。

      ```
      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 チャートをプッシュするときに使用する、パッケージ化されたチャートのファイル名が含まれます。

   ```
   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 チャートを格納するリポジトリを作成します。リポジトリの名前は、ステップ 2 で Helm チャートを作成する場合に使用する名前と一致する必要があります。詳しくは、「[イメージを保存するための Amazon ECR プライベートリポジトリの作成](repository-create.md)」を参照してください。

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

1. Helm チャートのプッシュ先となる Amazon ECR レジストリに対して Helm クライアントを認証します。認証トークンは、使用するレジストリごとに取得する必要があり、トークンは 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 チャートをプッシュします。出力には、Amazon ECR リポジトリ URI と SHA ダイジェストが含まれているはずです。

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

1. Helm チャートを説明します。

   ```
   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 チャートをインストールする](using-helm-charts-eks.md)」を参照してください。