Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Uso de imágenes de un repositorio privado en Elastic Beanstalk
En este tema se describe cómo autenticarse en un repositorio de imágenes en línea privado con Elastic Beanstalk. Elastic Beanstalk debe autenticarse con el registro en línea antes de que pueda extraer e implementar las imágenes. Existen varias opciones de configuración.
Uso de imágenes de un repositorio de Amazon ECR
Puede almacenar imágenes personalizadas de Docker en AWS con Amazon Elastic Container Registry
Cuando guarda sus imágenes de Docker en Amazon ECR, Elastic Beanstalk se autentica automáticamente en el registro de Amazon ECR con el perfil de instancia del entorno. Por lo tanto, es necesario que proporcione a las instancias permiso para obtener acceso a las imágenes del repositorio de Amazon ECR. Para ello, añada permisos al perfil de instancia de su entorno adjuntando la política gestionada AmazonEC2ContainerRegistryReadOnly al perfil de instancia. Esto proporciona acceso de solo lectura a todos los repositorios de Amazon ECR de la cuenta. También puede obtener acceso a un único repositorio mediante la siguiente plantilla para crear una política personalizada:
{
"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"
]
}
]
}
Sustituya el nombre de recurso de Amazon (ARN) en la política anterior por el ARN del repositorio.
Debe especificar la información de imagen en el archivo Dockerrun.aws.json
. La configuración será diferente en función de la plataforma que utilice.
En la plataforma Docker gestionada por ECS, utilice la clave image
en un objeto de la definición de contenedor :
"containerDefinitions": [
{
"name": "my-image",
"image": "account-id
.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest
",
Para la plataforma Docker, consulte la imagen por URL. La URL figura en la definición Image
del archivo Dockerrun.aws.json
:
"Image": {
"Name": "account-id
.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest
",
"Update": "true"
},
Uso del almacén de parámetros AWS Systems Manager (SSM)
Puede configurar Elastic Beanstalk para que inicie sesión en su repositorio privado antes de que inicie el proceso de implementación. Esto permite a Elastic Beanstalk acceder a las imágenes desde el repositorio e implementar estas imágenes en su entorno Elastic Beanstalk.
Esta configuración inicia eventos en la fase de precompilación del proceso de implementación de Elastic Beanstalk. Esto se configura en el directorio de configuración .ebextentions. La configuración utiliza scripts de enlace de plataforma que llaman a docker login para la autenticación en el registro en línea que aloja el repositorio privado. A continuación, se presenta un desglose detallado de estos pasos de configuración.
Para configurar Elastic Beanstalk para que se autentique en su repositorio privado con SSM AWS
nota
Debe configurar AWS Systems Manager para realizar estos pasos. Para obtener más información, consulte la AWS Systems Manager User Guide.
-
Cree su estructura de directorios
.ebextensions
de la siguiente manera.├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
Utilice el almacén de parámetros AWS Systems Manager para guardar las credenciales de su repositorio privado para que Elastic Beanstalk pueda recuperarlas cuando sea necesario. Para ello, ejecute el comando put-parameter.
aws ssm put-parameter --name USER --type String --value "username" aws ssm put-parameter --name PASSWD --type String --value "passwd"
-
Cree el siguiente archivo
env.config
y colóquelo en el directorio.ebextensions
como se muestra en la estructura de directorios anterior. Esta configuración utiliza el espacio de nombres aws:elasticbeanstalk:application:environment para inicializar las variables de entornoUSER
yPASSWD
de Elastic Beanstalk en los valores del almacén de parámetros de SSM.nota
USER
yPASSWD
en el script deben coincidir con las mismas cadenas que se utilizan en los comandos ssm put-parameter anteriores.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:ssm:USER:1}}' PASSWD: '{{resolve:ssm:PASSWD:1}}'
-
Cree el siguiente archivo de script
01login.sh
y colóquelo en los siguientes directorios (también se muestra en la estructura de directorios anterior):-
.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
El script
01login.sh
llama al script de la plataforma get-config para recuperar las credenciales del repositorio. Almacena el nombre de usuario en la variableUSER
. En la siguiente línea, recupera la contraseña. En lugar de almacenar la contraseña en una variable, el script envía la contraseña directamente al comando docker login del flujo de entradastdin
. La opción--password-stdin
usa el flujo de entrada, por lo que no tiene que almacenar la contraseña en una variable. Para obtener más información sobre la autenticación con la interfaz de la línea de comandos de Docker, consulte Docker login(Inicio de sesión de Docker) en el sitio web de documentación de Docker. Notas
-
Todos los archivos de script deben tener permiso de ejecución. Utilice chmod +x para configurar el permiso de ejecución de los archivos de enlace. Para todas las versiones de plataformas basadas en Amazon Linux 2 que se publicaron el 29 de abril de 2022 o en fecha posterior, Elastic Beanstalk automáticamente otorga permisos de ejecución a todos los scripts de enlace de plataforma. En este caso, no tiene que otorgar permisos de ejecución manualmente. Para obtener una lista de estas versiones de plataforma, consulte las notas de la versión del 29 de abril de 2022 - Plataforma Linux en la AWS Elastic BeanstalkGuía de notas de la versión.
-
Los archivos de enlace pueden ser archivos binarios o archivos de script y deben comenzar con una línea #! que contenga la ruta del intérprete, como #!/bin/bash.
-
Para obtener más información, consulte Enlaces de la plataforma en Ampliación de plataformas Linux de Elastic Beanstalk.
-
Cuando Elastic Beanstalk pueda autenticarse con el registro en línea que aloja el repositorio privado, se podrán implementar y extraer sus imágenes.
Uso del archivo Dockerrun.aws.json
En esta sección se describe otro enfoque para que Elastic Beanstalk se autentique en un repositorio privado. Con este enfoque, se genera un archivo de autenticación con el comando Docker y, a continuación, se carga el archivo de autenticación en un bucket de Amazon S3. También debe incluir la información del bucket en el archivo Dockerrun.aws.json
.
Para generar y proporcionar un archivo de autenticación a Elastic Beanstalk
-
Genere un archivo de autenticación con el comando docker login. En el caso de los repositorios de Docker Hub, ejecute docker login:
$
docker login
En el caso de otros registros, incluya la URL del servidor del registro:
$
docker login
registry-server-url
nota
Si su entorno de Elastic Beanstalk utiliza la versión de la plataforma Docker AMI de Amazon Linux (precede a Amazon Linux 2), lea la información relevante en Configuración de Docker en la AMI de Amazon Linux (anterior a Amazon Linux 2).
Para obtener más información sobre el archivo de autenticación, consulte Store images on Docker Hub
y docker login en el sitio web de Docker. -
Cargue una copia del archivo de autenticación denominado
.dockercfg
en un bucket de Amazon S3 seguro.-
El bucket de Amazon S3 debe estar alojado en la misma Región de AWS que el entorno que lo está utilizando. Elastic Beanstalk no puede descargar archivos desde un bucket de Amazon S3 alojado en otras regiones.
-
Conceda permisos para la operación
s3:GetObject
al rol de IAM en el perfil de instancia. Para obtener más información, consulte Administración de perfiles de instancia de Elastic Beanstalk.
-
-
Incluya la información del bucket de Amazon S3 en el parámetro
Authentication
en el archivoDockerrun.aws.json
.El siguiente ejemplo muestra el uso de un archivo de autenticación denominado
mydockercfg
en un bucket denominadoamzn-s3-demo-bucket
para utilizar una imagen privada de un registro de terceros. Para ver el número de versión correcto deAWSEBDockerrunVersion
, consulte la nota que sigue al ejemplo.{ "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" }Versiones de Dockerrun.aws.json
El parámetro
AWSEBDockerrunVersion
indica la versión del archivoDockerrun.aws.json
.-
Las plataformas de Docker AL2 y AL2023 utilizan las siguientes versiones del archivo.
Dockerrun.aws.json v3
: entornos que usan Docker Compose.
Dockerrun.aws.json v1
: entornos que no utilizan Docker Compose.
-
ECS sobre Amazon Linux 2 y ECS sobre AL2023 usan el archivo
Dockerrun.aws.json v2
. La plataforma retirada ECS-Multicontainer Docker Amazon Linux AMI (AL1) también utilizaba esta misma versión.
-
Cuando Elastic Beanstalk pueda autenticarse con el registro en línea que aloja el repositorio privado, se podrán implementar y extraer sus imágenes.