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

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 (AmazonECR).

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.

  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 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\"}"
  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 Elastic Beanstalk usando referências dinâmicas ao  AWS Secrets Manager. Para obter mais informações sobre referências secretsmanager dinâmicas, consulte Recuperar um AWS Secrets Manager segredo em um AWS CloudFormation recurso no Guia do AWS Secrets Manager usuário.

    nota

    USER e PASSWD no script devem corresponder às mesmas strings usadas no comando secretsmanager create-secret anterior.

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
  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 e, em seguida, efetuar login no repositório. Ele armazena o nome do usuário no script variável USER. 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 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.

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

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

  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 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 arquivo Dockerrun.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.