Configurando ambientes Docker do 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á.

Configurando ambientes Docker do Elastic Beanstalk

Este capítulo explica informações adicionais de configuração para todas as ramificações da plataforma Docker suportadas, incluindo a ramificação ECS gerenciada da plataforma Docker. A menos que uma ramificação de plataforma específica ou um componente de ramificação de plataforma seja identificado em uma seção, ela se aplica a todos os ambientes que executam plataformas Docker suportadas e ECS gerenciadas do Docker.

nota

Se o seu ambiente do Elastic Beanstalk usa uma versão da plataforma AMI Amazon Linux Docker (anterior ao Amazon Linux 2), não deixe de ler as informações adicionais em. Configuração do Docker no Amazon Linux AMI (anterior ao Amazon Linux 2)

Configurar o software em ambientes do Docker

É possível usar o console do Elastic Beanstalk para configurar o software em execução nas instâncias do ambiente.

Como configurar o ambiente do Docker no console do Elastic Beanstalk
  1. Abra o console do Elastic Beanstalk e, na lista Regiões, selecione seu Região da AWS.

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. No painel de navegação, escolha Configuration (Configuração).

  4. Na categoria de configuração Updates, monitoring, and logging (Atualizações, monitoramento e logs), escolha Edit (Editar).

  5. Faça as alterações necessárias na configuração.

  6. Para salvar as alterações, escolha Apply (Aplicar) na parte inferior da página.

Para obter informações sobre como definir configurações de software em qualquer ambiente, consulte Propriedades de ambientes e outras configurações de software. As seções a seguir abordam informações específicas do Docker.

Opções de contêiner

A seção Container options (Opções de contêiner) tem opções específicas da plataforma. Para ambientes Docker, ele permite que você escolha se seu ambiente inclui ou não o servidor NGINX proxy.

Ambientes com Docker Compose

Se gerenciar seu ambiente do Docker com o Docker Compose, o Elastic Beanstalk assumirá que você executa um servidor de proxy como um contêiner. Portanto, o padrão é Nenhum para a configuração do servidor proxy, e o Elastic Beanstalk não fornece uma configuração. NGINX

nota

Mesmo se você selecionar NGINXcomo servidor proxy, essa configuração será ignorada em um ambiente com o Docker Compose. A configuração Proxy server (Servidor de proxy) ainda é padrão para None (Nenhum).

Como o proxy do servidor NGINX web está desativado para o Docker na plataforma Amazon Linux 2 com o Docker Compose, você deve seguir as instruções para gerar registros para melhorar os relatórios de saúde. Para obter mais informações, consulte Geração de registros para relatórios de saúde aprimorados com o Docker Compose.

Propriedades de ambiente e variáveis de ambiente

A seção Propriedades do ambiente permite que você especifique as configurações do ambiente nas instâncias do Amazon Elastic Compute Cloud (AmazonEC2) que estão executando seu aplicativo. As propriedades de ambiente são passadas para o aplicativo como pares de chave-valor. Em um ambiente do Docker, o Elastic Beanstalk transmite propriedades de ambiente para contêineres como variáveis de ambiente.

O código do aplicativo em execução em um contêiner pode se referir à variável de um ambiente pelo nome e ler seu valor. O código-fonte que lê essas variáveis de ambiente varia de acordo com a linguagem de programação. É possível encontrar instruções para ler valores de variáveis de ambiente nas linguagens de programação compatíveis com as plataformas gerenciadas do Elastic Beanstalk no respectivo tópico de plataforma. Para obter uma lista de links para esses tópicos, consulte Propriedades de ambientes e outras configurações de software.

Ambientes com Docker Compose

Se você gerenciar seu ambiente do Docker com o Docker Compose, deverá fazer alguma configuração adicional para recuperar as variáveis de ambiente nos contêineres. Para que os executáveis em execução no contêiner acessem essas variáveis de ambiente, será necessário fazer referência a eles no docker-compose.yml. Para mais informações, consulte Fazer referência a variáveis de ambiente em contêineres.

Fazer referência a variáveis de ambiente em contêineres

Se você estiver usando a ferramenta Docker Compose na plataforma Docker do Amazon Linux 2, o Elastic Beanstalk gerará um arquivo de ambiente do Docker Compose chamado .env no diretório raiz do projeto de aplicação. Esse arquivo armazena as variáveis de ambiente configuradas para Elastic Beanstalk.

nota

Se você incluir um arquivo .env no pacote de aplicações, o Elastic Beanstalk não gerará um arquivo .env.

Para que um contêiner faça referência às variáveis de ambiente definidas no Elastic Beanstalk, é necessário seguir uma ou ambas as abordagens de configuração.

  • Adicione o arquivo .env gerado pelo Elastic Beanstalk à opção de configuração env_file no arquivo docker-compose.yml.

  • Defina as variáveis de ambiente diretamente no arquivo docker-compose.yml.

Os arquivos a seguir fornecem um exemplo. O arquivo demonstrativo docker-compose.yml mostra as duas abordagens.

  • Se você definir as propriedades de ambiente DEBUG_LEVEL=1 e LOG_LEVEL=error, o Elastic beanstalk gerará o seguinte arquivo .env:

    DEBUG_LEVEL=1 LOG_LEVEL=error
  • Neste arquivo docker-compose.yml, a opção de configuração env_file aponta para o arquivo .env e também define a variável de ambiente DEBUG=1 diretamente no arquivo docker-compose.yml.

    services: web: build: . environment: - DEBUG=1 env_file: - .env
Observações
  • Se você definir a mesma variável de ambiente nos dois arquivos, a variável definida no arquivo docker-compose.yml terá precedência maior do que a variável definida no arquivo .env.

  • Tenha cuidado para não deixar espaços entre o sinal de igual (=) e o valor atribuído à sua variável para evitar que espaços sejam adicionados à string.

Para saber mais sobre variáveis de ambiente no Docker Compose, consulte Variáveis de ambiente no Compose

Usando o recurso de interpolação para variáveis de ambiente com o Docker Compose

A partir de 28 de julho de 2023, data de lançamento da plataforma, a ramificação da plataforma Docker Amazon Linux 2 oferece o recurso de interpolação Docker Compose. Com esse recurso, os valores em um arquivo do Compose podem ser definidos por variáveis e interpolados em tempo de execução. Para obter mais informações sobre esse recurso, consulte Interpolação no site de documentação do Docker.

Importante

Se desejar usar esse atributo, com suas aplicações esteja ciente de que precisará implementar uma abordagem que use hooks de plataforma.

Isso é necessário devido a uma mitigação que implementamos no mecanismo da plataforma. Essa mitigação garante compatibilidade com as versões anteriores para clientes que não conhecem o novo atributo de interpolação e têm aplicações existentes que usam variáveis de ambiente com o caractere $. O mecanismo de plataforma atualizado escapa da interpolação por padrão substituindo o caractere $ por caracteres $$.

Veja a seguir um exemplo de um script de hook de plataforma que é possível configurar para permitir o uso do recurso de interpolação.

#!/bin/bash : ' example data format in .env file key1=value1 key2=value2 ' envfile="/var/app/staging/.env" tempfile=$(mktemp) while IFS= read -r line; do # split each env var string at '=' split_str=(${line//=/ }) if [ ${#split_str[@]} -eq 2 ]; then # replace '$$' with '$' replaced_str=${split_str[1]//\$\$/\$} # update the value of env var using ${replaced_str} line="${split_str[0]}=${replaced_str}" fi # append the updated env var to the tempfile echo "${line}" ≫"${tempfile}" done < "${envfile}" # replace the original .env file with the tempfile mv "${tempfile}" "${envfile}"

Coloque os hooks da plataforma em ambos os diretórios:

  • .platform/confighooks/predeploy/

  • .platform/hooks/predeploy/

Para obter mais informações, consulte Hooks de plataforma no tópico Estender plataformas Linux deste guia.

Geração de registros para relatórios de saúde aprimorados com o Docker Compose

O agente de integridade do Elastic Beanstalk fornece métricas de integridade do sistema operacional e da aplicação para ambientes do Elastic Beanstalk. Ele se baseia em formatos de log do servidor da Web que retransmitem informações em um formato específico.

O Elastic Beanstalk pressupõe que você execute um proxy de servidor da Web como um contêiner. Como resultado, o proxy do servidor NGINX web está desativado para ambientes Docker que executam o Docker Compose. É necessário configurar o servidor para gravar logs no local e no formato usados pelo agente de integridade do Elastic Beanstalk. Isso permite que você faça uso completo dos relatórios de integridade aprimorados, mesmo que o proxy do servidor da Web esteja desabilitado.

Para obter instruções sobre como fazer isso, consulte Configuração do log de servidor web

Registro personalizado do contêiner Docker com o Docker Compose

Para solucionar problemas com eficiência e monitorar seus serviços em contêineres, você pode solicitar registros de instância do Elastic Beanstalk por meio do console de gerenciamento do ambiente ou do EB. CLI Os logs de instância são compostos de logs de pacote e logs de cauda, combinados e empacotados para permitir que você visualize logs e eventos recentes de maneira eficiente e direta.

O Elastic Beanstalk cria diretórios de logs na instância de contêiner, um para cada serviço definido no arquivo docker-compose.yml, em /var/log/eb-docker/containers/<service name>. Se você estiver usando o recurso Docker Compose na plataforma Docker do Amazon Linux 2, poderá montar esses diretórios no local dentro da estrutura do arquivo de contêiner onde os logs são gravados. Quando você monta diretórios de logs para gravar dados de log, o Elastic Beanstalk pode coletar dados de log desses diretórios.

Se as aplicações estiverem em uma plataforma Docker que não esteja usando o Docker Compose, você poderá seguir o procedimento padrão descrito em Registro personalizado do contêiner Docker com o Docker Compose.

Como configurar os arquivos de logs do seu serviço para serem arquivos de cauda e logs de pacote recuperáveis
  1. Edite o arquivo docker-compose.yml.

  2. Na chave volumes do seu serviço, adicione uma montagem de ligação deste modo:

    "${EB_LOG_BASE_DIR}/<service name>:<log directory inside container>

    No arquivo demonstrativo docker-compose.yml abaixo:

    • nginx-proxyé <service name>

    • /var/log/nginxé <log directory inside container>

    services: nginx-proxy: image: "nginx" volumes: - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx"

  • O diretório var/log/nginx contém os logs do serviço nginx-proxy no contêiner e será mapeado para o diretório /var/log/eb-docker/containers/nginx-proxy no host.

  • Todos os logs nesse diretório agora são recuperáveis como logs finais e de pacote por meio da funcionalidade de solicitação de logs de instância do Elastic Beanstalk.

Observações
  • $ {EB_ _ LOG BASE _DIR} é uma variável de ambiente definida pelo Elastic Beanstalk com o valor. /var/log/eb-docker/containers

  • O Elastic Beanstalk cria automaticamente o diretório /var/log/eb-docker/containers/<service name> para cada serviço no arquivo docker-compose.yml.

Imagens de Docker

O Docker e as ramificações ECS gerenciadas da plataforma Docker para o Elastic Beanstalk oferecem suporte ao uso de imagens do Docker armazenadas em um repositório de imagens on-line público ou privado.

Especifique as imagens por nome em Dockerrun.aws.json. Observe as seguintes convenções:

  • As imagens em repositórios oficiais no Docker Hub usam um único nome (por exemplo, ubuntu ou mongo).

  • As imagens em outros repositórios no Docker Hub são qualificadas com um nome de organização (por exemplo, amazon/amazon-ecs-agent).

  • As imagens em outros repositórios online são ainda mais qualificadas por um nome de domínio (por exemplo, quay.io/assemblyline/ubuntu ou account-id.dkr.ecr.us-east-2.amazonaws.com/ubuntu:trusty).

Para ambientes que usam apenas a plataforma Docker, também é possível criar sua própria imagem durante a criação do ambiente com um Dockerfile. Para mais detalhes, consulte Criar imagens personalizadas com um Dockerfile. A plataforma ECS gerenciada do Docker não oferece suporte a essa funcionalidade.

Configurar atualizações gerenciadas para ambientes do Docker

Com as atualizações gerenciadas de plataforma, é possível configurar o ambiente para ser atualizado automaticamente para a versão mais recente de uma plataforma em um agendamento.

No caso de ambientes do Docker, pode ser conveniente decidir se uma atualização automática de plataforma deverá acontecer entre versões do Docker, quando a nova versão da configuração da plataforma inclui uma nova versão do Docker. O Elastic Beanstalk é compatível com atualizações de plataforma gerenciada nas versões do Docker ao atualizar a partir de um ambiente que execute uma versão da plataforma Docker mais recente do que a 2.9.0. Quando uma nova versão de plataforma inclui uma nova versão do Docker, o Elastic Beanstalk incrementa o número da versão de atualização secundária. Portanto, para permitir as atualizações gerenciadas de plataforma entre versões do Docker, habilite essas atualizações para atualizações de versão secundária e de patch. Para evitar as atualizações gerenciadas de plataforma entre versões do Docker, habilite essas atualizações para aplicar somente atualizações de versão de patch.

Por exemplo, o arquivo de configuração a seguir permite atualizações gerenciadas da plataforma às 9h UTC todas as terças-feiras para atualizações de versões secundárias e de patch, permitindo, assim, atualizações gerenciadas em todas as versões do Docker:

exemplo .ebextensions/ .config managed-platform-update
option_settings: aws:elasticbeanstalk:managedactions: ManagedActionsEnabled: true PreferredStartTime: "Tue:09:00" aws:elasticbeanstalk:managedactions:platformupdate: UpdateLevel: minor

Para ambientes que executam versões de plataforma do Docker 2.9.0 ou anterior, o Elastic Beanstalk nunca executará as atualizações gerenciadas de plataforma se a nova versão da configuração da plataforma incluir uma nova versão do Docker.

Namespaces de configuração do Docker

Você pode usar um arquivo de configuração para definir opções de configuração e executar outras tarefas de configuração de instância durante implantações. As opções de configuração podem ser específicas da plataforma ou se aplicar a todas as plataformas no serviço do Elastic Beanstalk como um todo. As opções de configuração são organizadas em namespaces.

nota

Essas informações só se aplicam ao ambiente do Docker que não esteja executando o Docker Compose. Essa opção tem um comportamento diferente com ambientes do Docker que executam o Docker Compose. Para obter mais informações sobre serviços proxy com o Docker Compose, consulte Opções de contêiner.

A plataforma Docker é compatível com as opções nos namespaces a seguir, além das opções compatíveis com todos os ambientes do Elastic Beanstalk:

  • aws:elasticbeanstalk:environment:proxy: escolha o servidor de proxy para o ambiente. O Docker oferece suporte à execução com o servidor de proxy Nginx ou nenhum servidor.

O arquivo de configuração de exemplo a seguir configura um ambiente do Docker para não executar nenhum servidor de proxy.

exemplo .ebextensions/docker-settings.config
option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: none

Configuração do Docker no Amazon Linux AMI (anterior ao Amazon Linux 2)

Se o seu ambiente Docker do Elastic Beanstalk usa uma versão da plataforma Amazon AMI Linux (anterior ao Amazon Linux 2), leia as informações adicionais nesta seção.

Essas informações são relevantes se você estiver usando imagens de um repositório privado. A partir do Docker versão 1.7, o comando docker login alterou o nome do arquivo de autenticação e o formato do arquivo. As versões da plataforma Amazon Linux AMI Docker (anteriores ao Amazon Linux 2) exigem o arquivo de configuração de ~/.dockercfg formato mais antigo.

Com o Docker versão 1.7 e posterior, o comando docker login cria o arquivo de autenticação em ~/.docker/config.json no formato a seguir.

{ "auths":{ "server":{ "auth":"key" } } }

Com o Docker versão 1.6.2 e anterior, o comando docker login cria o arquivo de autenticação em ~/.dockercfg no formato a seguir.

{ "server" : { "auth" : "auth_token", "email" : "email" } }

Para converter um config.json arquivo, remova a auths chave externa, adicione uma email chave e alise o JSON documento para que corresponda ao formato antigo.

Nas versões da plataforma Docker do Amazon Linux 2, o Elastic Beanstalk usa o nome e o formato mais recentes do arquivo de autenticação. Se você estiver usando uma versão da plataforma Docker do Amazon Linux 2, será possível usar o arquivo de autenticação criado pelo comando docker login sem nenhuma conversão.

Para melhorar o desempenho no Amazon LinuxAMI, o Elastic Beanstalk configura EBS dois volumes de armazenamento da Amazon para as instâncias da Amazon do seu ambiente Docker. EC2 Além do volume raiz provisionado para todos os ambientes do Elastic Beanstalk, um segundo volume de 12 GB chamado xvdcz é provisionado para armazenamento de imagens em ambientes do Docker.

Se precisar de mais espaço de armazenamento ou de mais espaço IOPS para imagens do Docker, você pode personalizar o volume de armazenamento de imagens usando a opção de configuração no namespace BlockDeviceMapping aws:autoscaling:launchconfiguration.

Por exemplo, o arquivo de configuração a seguir aumenta o tamanho do volume de armazenamento para 100 GB com 500 provisionadosIOPS:

exemplo .ebextensions/blockdevice-xvdcz.config
option_settings: aws:autoscaling:launchconfiguration: BlockDeviceMappings: /dev/xvdcz=:100::io1:500

Se você usar a opção BlockDeviceMappings para configurar volumes adicionais para seu aplicativo, inclua um mapeamento para xvdcz a fim de garantir que ele seja criado. O exemplo a seguir configura dois volumes, o volume de armazenamento de imagens xvdcz com as configurações padrão e um volume de aplicativo adicional de 24 GB chamado sdh:

exemplo .ebextensions/blockdevice-sdh.config
option_settings: aws:autoscaling:launchconfiguration: BlockDeviceMappings: /dev/xvdcz=:12:true:gp2,/dev/sdh=:24
nota

Quando você altera as configurações nesse namespace, o Elastic Beanstalk substitui todas as instâncias no ambiente por instâncias que executam a nova configuração. Para mais detalhes, consulte Alterações de configuração.