Usar imagens de um repositório privado no Elastic Beanstalk - AWS Elastic Beanstalk

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á.

Usar imagens de um repositório privado no Elastic Beanstalk

Este tópico descreve como autenticar em um repositório de imagens online privado com o Elastic Beanstalk. O Elastic Beanstalk deve se autenticar no registro online antes de poder extrair e implantar suas imagens. Há várias opções de configuração.

Usar imagens de um repositório do Amazon ECR

É possível armazenar suas imagens de Docker personalizadas na AWS com o Amazon Elastic Container Registry (Amazon ECR).

Quando você armazena suas imagens do Docker no Amazon ECR, o Elastic Beanstalk autentica automaticamente no registro do Amazon ECR no perfil de instância do ambiente. Portanto, você precisará fornecer às suas instâncias permissão para acessar as imagens no seu repositório do Amazon ECR. Para isso, adicione permissões ao perfil da instância do seu ambiente anexando a política gerenciada AmazonEC2ContainerRegistryReadOnly ao perfil da instância. Isso fornece acesso somente leitura a todos os repositórios do Amazon ECR na sua conta. Você também tem a opção de acessar apenas 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 nome de recurso da Amazon (ARN) na política acima pelo ARN de seu repositório.

Você precisará especificar as informações da imagem no arquivo Dockerrun.aws.json. A configuração será diferente dependendo da plataforma usada.

Para a plataforma Docker gerenciada pelo ECS, use a chave image 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 por URL. O URL vai na definição Image do seu arquivo Dockerrun.aws.json:

"Image": { "Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest", "Update": "true" },

Uso do armazenamento de parâmetros do AWS Systems Manager (SSM)

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 autenticar em seu repositório privado com o AWS SSM
nota

Você precisa configurar o AWS Systems Manager para concluir essas etapas. Para obter mais informações, consulte o Guia do usuário do AWS Systems Manager

  1. 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
  2. Use o armazenamento de parâmetros do AWS Systems Manager para salvar as credenciais do repositório privado para que o Elastic Beanstalk possa recuperar suas credenciais quando necessário. Para fazer isso, execute o comando put-parameter.

    aws ssm put-parameter --name USER --type String --value "username" aws ssm put-parameter --name PASSWD --type String --value "passwd"
  3. 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 ambiente USER e PASSWD do Elastic Beanstalk com os valores no SSM Parameter Store.

    nota

    USER e PASSWD no script devem corresponder às mesmas strings usadas nos comandos ssm put-parameter anteriores.

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:ssm:USER:1}}' PASSWD: '{{resolve:ssm:PASSWD:1}}'
  4. 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. Ele armazena o nome do usuário na variável USER. Na próxima linha, ele recupera a senha. Em vez de armazenar a senha em uma variável, o script envia a senha diretamente para o comando docker login no fluxo de entrada stdin. 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.

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.

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
  1. 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 ambiente do Elastic Beanstalk usar a versão da plataforma Docker da AMI do Amazon Linux (que precede o Amazon Linux 2), leia as informações relevantes em Configuração do Docker na AMI do Amazon Linux (que precede o 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.

  2. 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 na mesma Região da AWS do 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 operação s3:GetObject à função do IAM no perfil da instância. Para obter mais informações, consulte Gerenciar perfis de instância do Elastic Beanstalk.

  3. Inclua as informações do bucket do Amazon S3 no parâmetro Authentication no arquivo Dockerrun.aws.json.

    O exemplo a seguir mostra o uso de um arquivo de autenticação chamado mydockercfg em um bucket chamado amzn-s3-demo-bucket para usar uma imagem privada em um registro de terceiros. Para obter o número de versão correto para o AWSEBDockerrunVersion, consulte a observação que segue o 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 arquivo Dockerrun.aws.json.

    • As plataformas AL2 e AL2023 do Docker 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.

    • ECS em execução no Amazon Linux 2 e ECS em execução no AL2023 usa o arquivo Dockerrun.aws.json v2. A plataforma retirada ECS - A AMI Docker Multicontainer Amazon Linux (AL1) também usava 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.