As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usando imagens de um repositório privado no Elastic Beanstalk
Este tópico descreve como se autenticar em um repositório de imagens on-line privado com o Elastic Beanstalk. O Elastic Beanstalk deve se autenticar com o registro on-line antes de extrair e implantar suas imagens. Há várias opções para fazer isso:
-
O ECR repositório da Amazon
-
O AWS Secrets Manager
-
O arquivo
Dockerrun.aws.json
Usando imagens de um ECR repositório da Amazon
Você pode armazenar suas imagens personalizadas do Docker AWS com o Amazon Elastic Container Registry
Quando você armazena suas imagens do Docker na AmazonECR, o Elastic Beanstalk se autentica automaticamente no registro ECR da Amazon com o perfil de instância do seu ambiente. Portanto, você precisará fornecer às suas instâncias permissão para acessar as imagens no seu ECR repositório da Amazon. Para fazer isso, adicione permissões ao perfil de instância do seu ambiente anexando a política EC2ContainerRegistryReadOnly gerenciada da Amazon ao perfil da instância. Isso fornece acesso somente de leitura a todos os ECR repositórios da Amazon em sua conta. Você também tem a opção de acessar somente um único repositório usando o seguinte modelo para criar uma 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"
]
}
]
}
Substitua o Amazon Resource Name (ARN) na política acima pelo ARN do seu repositório.
Você precisará especificar as informações da imagem em seu Dockerrun.aws.json
arquivo. A configuração será diferente dependendo da plataforma usada.
Para a plataforma Docker ECS gerenciada, use a image
chave em um objeto de definição de contêiner:
"containerDefinitions": [
{
"name": "my-image",
"image": "account-id
.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest
",
Para a plataforma Docker, consulte a imagem deURL. URLIsso está na Image
definição do seu Dockerrun.aws.json
arquivo:
"Image": {
"Name": "account-id
.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest
",
"Update": "true"
},
Usando AWS Secrets Manager
Você pode configurar o Elastic Beanstalk para fazer login no repositório privado antes que ele inicie o processo de implantação. Isso permite que o Elastic Beanstalk acesse as imagens do repositório e implante essas imagens no ambiente do Elastic Beanstalk.
Essa configuração inicia eventos na fase de pré-compilação do processo de implantação do Elastic Beanstalk. Você configurou isso no diretório de configuração .ebextentions. A configuração usa scripts de hook de plataforma que chamam docker login para autenticar no registro online que hospeda o repositório privado. Veja a seguir detalhes das etapas de configuração.
Para configurar o Elastic Beanstalk para se autenticar em seu repositório privado com AWS Secrets Manager
nota
Permissões específicas devem ser concedidas para concluir essas etapas. Para obter mais informações, consulte as referências a seguir.
-
Na Etapa 2, você precisará de permissões para criar um segredo. Para obter mais informações, consulte Exemplo: Permissão para criar segredos no AWS Secrets Manager Guia do usuário.
-
Na Etapa 3, você precisará de permissões para recuperar segredos usando referências dinâmicas
secretsmanager
. Para obter mais informações, consulte Exemplo: permissão para recuperar valores de segredos no Guia do usuário do AWS Secrets Manager .
-
Crie sua estrutura de diretórios
.ebextensions
da seguinte forma.├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
Use AWS Secrets Manager para salvar as credenciais do seu repositório privado para que o Elastic Beanstalk possa recuperá-las quando necessário. Para isso, execute o comando AWS CLI create-secret do Secrets Manager.
aws secretsmanager create-secret \ --name
MyTestSecret
\ --description "My image repo credentials created with the CLI.
" \ --secret-string "{\"USER\
":\"EXAMPLE-USERNAME\
",\"PASSWD\
":\"EXAMPLE-PASSWORD\
"}" -
Crie o seguinte arquivo
env.config
e coloque-o no diretório.ebextensions
, como mostrado na estrutura de diretórios anterior. Essa configuração usa o namespace aws:elasticbeanstalk:application:environment para inicializar as variáveis de ambienteUSER
ePASSWD
Elastic Beanstalk usando referências dinâmicas ao AWS Secrets Manager. Para obter mais informações sobre referênciassecretsmanager
dinâmicas, consulte Recuperar um AWS Secrets Manager segredo em um AWS CloudFormation recurso no Guia do AWS Secrets Manager usuário.nota
USER
ePASSWD
no script devem corresponder às mesmas strings usadas no comandosecretsmanager
create-secret anterior.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
-
Crie o seguinte arquivo de script
01login.sh
e coloque-o nos seguintes diretórios (também mostrado na estrutura de diretórios 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
O script
01login.sh
chama o script de plataforma get-config para recuperar as credenciais do repositório e, em seguida, efetuar login no repositório. Ele armazena o nome do usuário no script variávelUSER
. Na próxima linha, ele recupera a senha. Em vez de armazenar a senha em um script variável, o script envia a senha diretamente para o comando docker login no fluxo de entradastdin
. A opção--password-stdin
usa o fluxo de entrada para que você não precise armazenar a senha em uma variável. Para obter mais informações sobre autenticação com a interface de linha de comando do Docker, consulte docker login(login do docker) no site da documentação do Docker. Observações
-
Todos os arquivos de script devem ter permissão de execução. Use chmod +x para definir a permissão de execução em seus arquivos de hook. Em todas as versões da plataforma baseadas no Amazon Linux 2 que foram lançadas a partir de 29 de abril de 2022, o Elastic Beanstalk concede automaticamente permissões de execução para todos os scripts de hook da plataforma. Nesse caso, não é necessário conceder manualmente as permissões de execução. Para obter uma lista dessas versões da plataforma, consulte as notas de versão 29 de abril de 2022 - Plataforma Linux no Guia de notas de versão do AWS Elastic Beanstalk .
-
Os arquivos de hook podem ser arquivos binários ou arquivos de script que começam com uma linha #! contendo seu caminho de interpretador, como #!/bin/bash.
-
Para obter mais informações, consulte Hooks de plataforma em Estender as plataformas do Elastic Beanstalk Linux.
-
Após a autenticação do Elastic Beanstalk com o registro online que hospeda o repositório privado, você pode obter e implantar suas imagens.
Usar o arquivo Dockerrun.aws.json
Esta seção descreve outra abordagem para autenticar o Elastic Beanstalk em um repositório privado. Com essa abordagem, gere um arquivo de autenticação com o comando do Docker e, depois, carregue o arquivo de autenticação em um bucket do Amazon S3. Você também deve incluir as informações do bucket no arquivo Dockerrun.aws.json
.
Como gerar e fornecer um arquivo de autenticação ao Elastic Beanstalk
-
Gere um arquivo de autenticação com o comando docker login. Para repositórios no Docker Hub, execute docker login:
$
docker login
Para outros registros, inclua o URL do servidor de registro:
$
docker login
registry-server-url
nota
Se o seu ambiente do Elastic Beanstalk usa a versão da plataforma AMI Amazon Linux Docker (precede o Amazon Linux 2), leia as informações relevantes em. Configuração do Docker no Amazon Linux AMI (anterior ao Amazon Linux 2)
Para obter mais informações sobre o arquivo de autenticação, consulte Store images on Docker Hub
e docker login no site do Docker. -
Faça upload de uma cópia do arquivo de autenticação chamado
.dockercfg
em um bucket do Amazon S3 seguro.-
O bucket do Amazon S3 deve ser hospedado no Região da AWS mesmo ambiente que o está usando. O Elastic Beanstalk não pode fazer download de arquivos de um bucket do Amazon S3 hospedado em outras regiões.
-
Conceda permissões para a
s3:GetObject
operação à IAM função no perfil da instância. Para obter mais informações, consulte Gerenciar perfis de instância do Elastic Beanstalk.
-
-
Inclua as informações do bucket do Amazon S3 no parâmetro
Authentication
no arquivoDockerrun.aws.json
.O exemplo a seguir mostra o uso de um arquivo de autenticação chamado
mydockercfg
em um bucket chamadoamzn-s3-demo-bucket
para usar uma imagem privada em um registro de terceiros. Para obter o número de versão correto paraAWSEBDockerrunVersion
, consulte a nota a seguir ao exemplo.{ "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" }Versões do Dockerrun.aws.json
O parâmetro
AWSEBDockerrunVersion
indica a versão do arquivoDockerrun.aws.json
.-
As plataformas Docker AL2 e AL2 023 usam as seguintes versões do arquivo.
Dockerrun.aws.json v3
— ambientes que usam o Docker Compose.
Dockerrun.aws.json v1
— ambientes que não usam o Docker Compose.
-
ECSa execução no Amazon Linux 2 e a ECSexecução no AL2 023 usa o
Dockerrun.aws.json v2
arquivo. A plataforma descontinuada ECS- The Multicontainer Docker Amazon AMI Linux AL1 () também usou essa mesma versão.
-
Depois que o Elastic Beanstalk puder autenticar com o registro online que hospeda o repositório privado, as imagens poderão ser implantadas e extraídas.