Elastic Beanstalk のプライベートリポジトリからのイメージの使用 - AWS Elastic Beanstalk

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

Elastic Beanstalk のプライベートリポジトリからのイメージの使用

このトピックでは、Elastic Beanstalk を使用してプライベートオンラインイメージリポジトリを認証する方法について説明します。Elastic Beanstalk は、イメージをプルしてデプロイする前に、オンラインレジストリで認証する必要があります。複数の設定オプションがあります。

Amazon ECRリポジトリからのイメージの使用

カスタム Docker イメージは に保存できます。 AWS Amazon Elastic Container Registry (Amazon ECR) を使用する。

Docker イメージを Amazon に保存するとECR、Elastic Beanstalk は環境のインスタンスプロファイル を使用して Amazon ECRレジストリに対して自動的に認証します。したがって、Amazon ECRリポジトリ内のイメージにアクセスするためのアクセス許可をインスタンスに提供する必要があります。これを行うには、AmazonEC2ContainerRegistryReadOnly 管理ポリシーをインスタンスプロファイルにアタッチして、環境のインスタンスプロファイルにアクセス許可を追加します。これにより、アカウント内のすべての Amazon ECRリポジトリへの読み取り専用アクセスが可能になります。また、次のテンプレートを使用してカスタムポリシーを作成することで、単一のリポジトリにのみアクセスすることもできます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:account-id:repository/repository-name" ], "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

上記のポリシーの Amazon リソースネーム (ARN) をリポジトリARNの に置き換えます。

Dockerrun.aws.json ファイル内のイメージ情報を指定する必要があります。設定は、使用するプラットフォームによって異なります。

ECS マネージド Docker プラットフォーム では、コンテナ定義オブジェクト の imageキーを使用します

"containerDefinitions": [ { "name": "my-image", "image": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest",

Docker プラットフォームについては、 によるイメージを参照してくださいURL。URL は、 Dockerrun.aws.json ファイルImageの定義に含まれます。

"Image": { "Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest", "Update": "true" },

以下を使用 AWS Systems Manager (SSM) パラメータストア

デプロイプロセスを開始する前に、プライベートリポジトリにログインするように Elastic Beanstalk を設定できます。これにより、Elastic Beanstalk はリポジトリからイメージにアクセスし、これらのイメージを Elastic Beanstalk 環境にデプロイできます。

この設定は、Elastic Beanstalk デプロイプロセスのビルド前フェーズでイベントを開始します。.ebextentions 設定ディレクトリでこれをセットアップします。この設定では、docker login を呼び出すプラットフォームフックスクリプトを使用して、プライベートリポジトリをホストするオンラインレジストリを認証します。これらの設定ステップの詳細な内訳を次に示します。

を使用してプライベートリポジトリに対して認証するように Elastic Beanstalk を設定するには AWS SSM
注記

をセットアップする必要があります AWS Systems Manager これらのステップを完了するには、 を使用します。詳細については、『』を参照してください。AWS Systems Manager ユーザーガイド

  1. 次のように .ebextensions ディレクトリ構造を作成します。

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
  2. を使用するAWS Systems Manager Elastic Beanstalk が必要に応じて認証情報を取得できるように、プライベートリポジトリの認証情報を保存する Parameter Store。これを行うには、put-parameter コマンドを実行します。

    aws ssm put-parameter --name USER --type String --value "username" aws ssm put-parameter --name PASSWD --type String --value "passwd"
  3. 次の env.config ファイルを作成し、前述のディレクトリ構造に示すように、.ebextensions ディレクトリに配置します。この設定では、aws:elasticbeanstalk:application:environment 名前空間を使用して、 PASSWD USERおよび Elastic Beanstalk 環境変数を SSM Parameter Store の値に初期化します。

    注記

    スクリプト内の USER および PASSWD は、前述の ssm put-parameter コマンドで使用したものと同じ文字列と一致する必要があります。

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:ssm:USER:1}}' PASSWD: '{{resolve:ssm:PASSWD:1}}'
  4. 次の 01login.sh スクリプトファイルを作成し、次のディレクトリに配置します (前述のディレクトリ構造にも示されています)。

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

    ### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin

    01login.sh スクリプトは get-config プラットフォームスクリプトを呼び出して、リポジトリの認証情報を取得します。また、ユーザー名を USER 変数に格納し、次の行で、パスワードを取得します。このスクリプトは、パスワードを変数に格納せずに、stdin 入力ストリームで docker login コマンドに直接パイプします。--password-stdin オプションでは入力ストリームを使用するため、パスワードを変数に格納する必要はありません。Docker コマンドラインインターフェイスによる認証の詳細については、Docker ドキュメンテーション Web サイトの「docker ログイン」を参照してください。

    メモ
    • すべてのスクリプトファイルには、実行アクセス許可が必要です。フックファイルの実行アクセス許可を設定するために chmod +x を使用します。2022 年 4 月 29 日以降にリリースされたすべての Amazon Linux 2 ベースのプラットフォームバージョンでは、Elastic Beanstalk はすべてのプラットフォームフックスクリプトに対して実行アクセス権限を自動的に付与します。この場合、実行アクセス権限を手動で付与する必要はありません。これらのプラットフォームバージョンのリストについては、 の「2022 年 4 月 29 日 - Linux プラットフォームリリースノート」を参照してください。 AWS Elastic Beanstalk リリースノートガイド

    • フックファイルは、バイナリファイル、またはインタプリタパスを含む #! 行で始まるスクリプトファイル (#!/bin/bash など) です。

    • 詳細については、「Elastic Beanstalk Linux プラットフォームの拡張」の「プラットフォームフック」を参照してください。

Elastic Beanstalk がプライベートリポジトリをホストするオンラインレジストリで認証した後、イメージをデプロイしてプルできます。

Dockerrun.aws.json ファイルの使用

このセクションでは、プライベートリポジトリに対して Elastic Beanstalk を認証する別の方法について説明します。この方法では、Docker コマンドを使用して認証ファイルを生成し、認証ファイルを Amazon S3 バケットにアップロードします。また、Dockerrun.aws.json ファイルにバケット情報を含める必要もあります。

認証ファイルを生成して Elastic Beanstalk に提供するには
  1. docker login コマンドを使用して認証ファイルを生成します。Docker Hub のリポジトリでは、docker login を実行します。

    $ docker login

    他のレジストリの場合は、レジストリサーバーの URL を含めます。

    $ docker login registry-server-url
    注記

    Elastic Beanstalk 環境で Amazon Linux Docker AMI プラットフォームバージョン (Amazon Linux 2 より前) を使用している場合は、「」の関連情報をお読みくださいAmazon Linux での Docker 設定 AMI (Amazon Linux 2 より前)

    認証ファイルの詳細については、Docker ウェブサイトのDocker ハブにイメージを保存するおよびdocker ログインを参照してください。

  2. .dockercfg という名前の認証ファイルのコピーを安全な Amazon S3 バケットにアップロードします。

    • Amazon S3 バケットは同じ でホストされている必要があります AWS リージョン を、それを使用している環境として使用します。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードすることはできません。

    • インスタンスプロファイルのIAMロールに s3:GetObjectオペレーションのアクセス許可を付与します。詳細については、「Elastic Beanstalk インスタンスプロファイルの管理」を参照してください。

  3. Amazon S3 バケット情報を、Authentication ファイルの Dockerrun.aws.json パラメータに含めます。

    次の例は、サードパーティーレジストリでプライベートイメージを使用するように、mydockercfg というバケットに amzn-s3-demo-bucket という認証ファイルを使用する方法を示しています。の正しいバージョン番号についてはAWSEBDockerrunVersion、次の例のメモを参照してください。

    { "AWSEBDockerrunVersion": "version-no", "Authentication": { "Bucket": "amzn-s3-demo-bucket", "Key": "mydockercfg" }, "Image": { "Name": "quay.io/johndoe/private-image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx" }
    Dockerrun.aws.json バージョン

    AWSEBDockerrunVersion パラメータは、Dockerrun.aws.json ファイルのバージョンを示します。

    • Docker AL2および AL2023 プラットフォームでは、次のバージョンの ファイルを使用します。

      • Dockerrun.aws.json v3 — Docker Compose を使用する環境。

      • Dockerrun.aws.json v1 — Docker Compose を使用しない環境。

    • ECS Amazon Linux 2 で実行され、ECSAL2023 で実行されている はDockerrun.aws.json v2、 ファイルを使用します。廃止されたプラットフォーム ECS- 複数コンテナの Docker Amazon Linux AMI (AL1) も同じバージョンを使用しました。

Elastic Beanstalk がプライベートリポジトリをホストするオンラインレジストリで認証した後、イメージをデプロイしてプルできます。