翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Elastic Beanstalk のプライベートリポジトリからのイメージの使用
このトピックでは、Elastic Beanstalk を使用してプライベートオンラインイメージリポジトリを認証する方法について説明します。Elastic Beanstalk は、イメージをプルしてデプロイする前に、オンラインレジストリで認証する必要があります。複数の設定オプションがあります。
Amazon ECRリポジトリからのイメージの使用
カスタム Docker イメージは に保存できます。 AWS Amazon Elastic Container Registry
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 ユーザーガイド
-
次のように
.ebextensions
ディレクトリ構造を作成します。├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
を使用する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"
-
次の
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}}'
-
次の
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 に提供するには
-
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 ログイン を参照してください。 -
.dockercfg
という名前の認証ファイルのコピーを安全な Amazon S3 バケットにアップロードします。-
Amazon S3 バケットは同じ でホストされている必要があります AWS リージョン を、それを使用している環境として使用します。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードすることはできません。
-
インスタンスプロファイルのIAMロールに
s3:GetObject
オペレーションのアクセス許可を付与します。詳細については、「Elastic Beanstalk インスタンスプロファイルの管理」を参照してください。
-
-
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 がプライベートリポジトリをホストするオンラインレジストリで認証した後、イメージをデプロイしてプルできます。