Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan gambar dari repositori pribadi di Elastic Beanstalk
Topik ini menjelaskan cara mengautentikasi ke repositori gambar online pribadi dengan Elastic Beanstalk. Elastic Beanstalk harus mengautentikasi dengan registri online sebelum dapat menarik dan menyebarkan gambar Anda. Ada beberapa opsi konfigurasi.
Menggunakan gambar dari ECR repositori Amazon
Anda dapat menyimpan gambar Docker kustom Anda di AWS dengan Amazon Elastic Container Registry
Saat Anda menyimpan gambar Docker di AmazonECR, Elastic Beanstalk secara otomatis mengautentikasi registri Amazon dengan profil ECR instans lingkungan Anda. Oleh karena itu, Anda harus memberikan izin kepada instans Anda untuk mengakses gambar di ECR repositori Amazon Anda. Untuk melakukannya, tambahkan izin ke profil instans lingkungan Anda dengan melampirkan kebijakan EC2ContainerRegistryReadOnly terkelola Amazon ke profil instance. Ini menyediakan akses hanya-baca ke semua ECR repositori Amazon di akun Anda. Anda juga memiliki opsi untuk hanya mengakses repositori tunggal dengan menggunakan templat berikut untuk membuat kebijakan khusus:
{
"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"
]
}
]
}
Ganti Amazon Resource Name (ARN) dalam kebijakan di atas dengan repositori Anda. ARN
Anda harus menentukan informasi gambar dalam Dockerrun.aws.json
file Anda. Konfigurasi akan berbeda tergantung pada platform mana yang Anda gunakan.
Untuk platform Docker ECS terkelola, gunakan image
kunci dalam objek definisi kontainer:
"containerDefinitions": [
{
"name": "my-image",
"image": "account-id
.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest
",
Untuk platform Docker lihat gambar olehURL. Yang URL masuk dalam Image
definisi Dockerrun.aws.json
file Anda:
"Image": {
"Name": "account-id
.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest
",
"Update": "true"
},
Menggunakan AWS Systems Manager (SSM) Menyimpan Parameter
Anda dapat mengkonfigurasi Elastic Beanstalk untuk log in ke repositori pribadi Anda sebelum memulai proses deployment. Hal ini memungkinkan Elastic Beanstalk untuk mengakses gambar dari repositori dan menyebarkan gambar-gambar ini ke lingkungan Elastic Beanstalk Anda.
Konfigurasi ini memulai peristiwa di fase prebuild dari proses deployment Elastic Beanstalk. Anda mengatur ini di.ebextentionsDirektori Konfigurasi. Konfigurasi ini menggunakan skrip hook platform yang memanggil docker login untuk mengotentikasi ke registri online yang host repositori privat. laporan rinci dari langkah-langkah konfigurasi berikut ini.
Untuk mengonfigurasi Elastic Beanstalk untuk mengautentikasi ke repositori pribadi Anda dengan AWS SSM
catatan
Anda perlu mengatur AWS Systems Manager untuk menyelesaikan langkah-langkah ini. Untuk informasi lebih lanjut, lihat AWS Systems Manager Panduan Pengguna
-
Membuat
.ebextensions
struktur direktori Anda sebagai berikut.├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
Gunakan AWS Systems ManagerParameter Simpan untuk menyimpan kredensyal repositori pribadi Anda sehingga Elastic Beanstalk dapat mengambil kredensyal Anda bila diperlukan. Untuk ini, jalankanput-parameterPerintah.
aws ssm put-parameter --name USER --type String --value "username" aws ssm put-parameter --name PASSWD --type String --value "passwd"
-
Membuat file
env.config
berikut dan menempatkannya di direktori.ebextensions
seperti yang ditunjukkan dalam struktur direktori sebelumnya. Konfigurasi ini menggunakan namespace aws:elasticbeanstalk:application:environment untuk menginisialisasi variabel lingkungan Elastic Beanstalk dan ke nilai diUSER
Parameter Store.PASSWD
SSMcatatan
USER
danPASSWD
dalam script harus sesuai dengan string yang sama yang digunakan dalam sebelumnyassm put-parameterPerintah.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:ssm:USER:1}}' PASSWD: '{{resolve:ssm:PASSWD:1}}'
-
Membuat file script
01login.sh
berikut dan menempatkan di direktori berikut (juga ditampilkan dalam struktur direktori sebelumnya):-
.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
Skrip memanggil skrip get-configplatform untuk mengambil kredensyal repositori. Ini menyimpan nama pengguna dalamUSER
variabel. Di baris berikutnya, ia mengambil kata sandi. Alih-alih menyimpan kata sandi dalam variabel, skrip menyalurkan kata sandi langsung ke docker login perintah di aliranstdin
input.--password-stdin
Opsi ini menggunakan aliran input, jadi Anda tidak perlu menyimpan kata sandi dalam variabel. Untuk informasi selengkapnya tentang otentikasi dengan antarmuka baris perintah Docker, lihat docker login di situs web dokumentasi Docker. Catatan
-
Semua file script harus memiliki izin eksekusi. Gunakanchmod +xuntuk mengatur izin eksekusi pada file hook Anda. Untuk semua versi platform berbasis Amazon Linux 2 yang dirilis pada atau setelah 29 April 2022, Elastic Beanstalk secara otomatis memberikan izin eksekusi ke semua skrip kait platform. Dalam hal ini Anda tidak perlu memberikan izin eksekusi secara manual. Untuk daftar versi platform ini, lihat 29 April 2022 - Catatan rilis platform Linux di AWS Elastic Beanstalk Panduan Catatan Rilis.
-
File Hook dapat berupa file biner atau file skrip yang dimulai dengan garis #! yang berisi jalur penerjemah mereka, seperti #!/bin/bash.
-
Untuk informasi lebih lanjut, lihat Hook platform pada Memperluas platform Elastic BeanstalkLinux .
-
Setelah Elastic Beanstalk dapat mengotentikasi dengan registri online yang host repositori pribadi, gambar Anda dapat digunakan dan ditarik.
Menggunakan file Dockerrun.aws.json
Bagian ini menjelaskan pendekatan lain untuk mengotentikasi Elastic Beanstalk ke repositori pribadi. Dengan pendekatan ini, Anda menghasilkan file otentikasi dengan perintah Docker, dan kemudian mengunggah file otentikasi ke ember Amazon S3. Anda juga harus menyertakan informasi bucket di file Dockerrun.aws.json
Anda.
Untuk menghasilkan dan menyediakan file otentikasi ke Elastic Beanstalk
-
Menghasilkan file autentikasi dengan perintah docker login. Untuk repositori di Docker Hub, jalankan docker login:
$
docker login
Untuk pendaftar lain, sertakan server URL registri:
$
docker login
registry-server-url
catatan
Jika lingkungan Elastic Beanstalk Anda menggunakan versi platform AMI Amazon Linux Docker (mendahului Amazon Linux 2), baca informasi yang relevan di. Konfigurasi Docker di Amazon Linux AMI (sebelumnya Amazon Linux 2)
Untuk informasi selengkapnya tentang file autentikasi, lihat Simpan gambar di Docker Hub
dan docker login di situs web Docker. -
Unggah salinan file autentikasi yang bernama
.dockercfg
ke bucket aman Amazon S3 .-
Bucket Amazon S3 harus di-host dalam hal yang sama Wilayah AWS sebagai lingkungan yang menggunakannya. Elastic Beanstalk tidak dapat mengunduh file dari bucket Amazon S3 yang di-host di Kawasan lain.
-
Berikan izin untuk
s3:GetObject
operasi ke IAM peran dalam profil instance. Untuk informasi selengkapnya, lihat Mengelola profil instans Elastic Beanstalk.
-
-
Sertakan informasi bucket Amazon S3 di parameter
Authentication
pada fileDockerrun.aws.json
.Contoh berikut menunjukkan penggunaan file otentikasi bernama
mydockercfg
dalam sebuah bucket bernamaamzn-s3-demo-bucket
untuk menggunakan gambar privat di registri pihak ketiga. Untuk nomor versi yang benarAWSEBDockerrunVersion
, lihat catatan yang mengikuti contoh.{ "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" }Versi Dockerrun.aws.json
Parameter
AWSEBDockerrunVersion
menunjukkan versi fileDockerrun.aws.json
.-
Platform Docker AL2 dan AL2 023 menggunakan versi file berikut.
Dockerrun.aws.json v3
— lingkungan yang menggunakan Docker Compose.
Dockerrun.aws.json v1
— lingkungan yang tidak menggunakan Docker Compose.
-
ECSberjalan di Amazon Linux 2 dan ECSberjalan di AL2 023 menggunakan
Dockerrun.aws.json v2
file. Platform pensiunan ECS-Multicontainer Docker Amazon Linux AMI (AL1) juga menggunakan versi yang sama.
-
Setelah Elastic Beanstalk dapat mengotentikasi dengan registri online yang host repositori pribadi, gambar Anda dapat digunakan dan ditarik.