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

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

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

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

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

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

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 を呼び出すプラットフォームフックスクリプトを使用して、プライベートリポジトリをホストするオンラインレジストリを認証します。これらの設定ステップの詳細な内訳を次に示します。

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

これらのステップを完了するには、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 が必要に応じて認証情報を取得できるようにします。これを行うには、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 名前空間を使用して USER および PASSWD Elastic Beanstalk 環境変数を SSM パラメータストアの値に初期化します。

    注記

    スクリプト内の 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 はすべてのプラットフォームフックスクリプトに対して実行アクセス権限を自動的に付与します。この場合、実行アクセス権限を手動で付与する必要はありません。これらのプラットフォームのバージョンのリストについては、「AWS Elastic Beanstalkガイドリリースノート」の 2022 年 4 月 29 日- Linux プラットフォームリリースノートを参照してください。

    • フックファイルは、バイナリファイル、またはインタプリタパスを含む #! 行で始まるスクリプトファイル (#!/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 2 より前の) Amazon Linux AMI Docker プラットフォームバージョンを使用している場合は、「(Amazon Linux 2 より前の) Amazon Linux AMI での Docker 設定」の関連情報をお読みください。

    認証ファイルの詳細については、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 を使用しない環境。

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

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