Plataformas personalizadas do Elastic Beanstalk - AWS Elastic Beanstalk

Plataformas personalizadas do Elastic Beanstalk

O AWS Elastic Beanstalk é compatível com plataformas personalizadas. Uma plataforma personalizada é uma personalização mais avançada do que uma imagem personalizada de várias maneiras. Uma plataforma personalizada permite que você desenvolva toda uma nova plataforma do zero, personalizando o sistema operacional, software adicional e scripts que o Elastic Beanstalk executa em instâncias de plataforma. Essa flexibilidade permite que você crie uma plataforma para um aplicativo que usa uma linguagem ou outro software de infraestrutura para o qual o Elastic Beanstalk não oferece uma plataforma gerenciada. Compare isso a imagens personalizadas, em que você modifica uma imagem de máquina da Amazon (AMI) para uso com uma plataforma do Elastic Beanstalk existente, e o Elastic Beanstalk ainda oferece os scripts de plataforma e controla a pilha de software da plataforma. Além disso, com plataformas personalizadas você usa uma maneira automatizada e com scripts de criar e manter a personalização, enquanto com imagens personalizadas você faz as alterações manualmente em uma instância em execução.

nota

As plataformas personalizadas do Elastic Beanstalk oferecem suporte apenas à criação de uma AMI do Amazon Linux de AMIs de base da AMI do Amazon Linux 2, do RHEL 7, do RHEL 6 ou do Ubuntu 16.04 ou de outros sistemas operacionais que não são compatíveis com o recurso de plataformas personalizadas.

Para criar uma plataforma personalizada, você cria uma AMI de um dos sistemas operacionais compatíveis — Ubuntu, RHEL ou Amazon Linux (consulte a entrada flavor em Formato do arquivo platform.yaml para ver os números de versão exatos) — e inclui outras personalizações. Você cria sua própria plataforma do Elastic Beanstalk usando o Packer, que é uma ferramenta de código aberto para a criação de imagens de máquina para várias plataformas, incluindo AMIs para uso com o Amazon Elastic Compute Cloud (Amazon EC2). Uma plataforma do Elastic Beanstalk consiste em uma AMI configurada para executar um conjunto de software que oferece suporte a um aplicativo e metadados que podem incluir opções de configuração personalizadas e definições de opção de configuração padrão.

O Elastic Beanstalk gerencia o Packer como uma plataforma integrada separada, e você não precisa se preocupar com a configuração e as versões do Packer.

Você cria uma plataforma fornecendo ao Elastic Beanstalk um modelo do Packer, e os scripts e arquivos que o modelo invoca para criar uma AMI. Esses componentes são compactados com um platform definition file, que especifica o modelo e os metadados, em um arquivo ZIP conhecido como platform definition archive.

Quando você cria uma plataforma personalizada, inicia um ambiente de uma única instância sem um IP elástico que executa o Packer. O Packer executa outra instância para criar uma imagem. Você pode reutilizar esse ambiente para várias plataformas e várias versões de cada plataforma.

nota

As plataformas personalizadas são específicas à região da AWS. Se você usar o Elastic Beanstalk em várias regiões, deverá criar suas plataformas separadamente em cada região.

Em determinadas circunstâncias, as instâncias executadas pelo Packer não são limpas e precisam ser manualmente encerradas. Para saber como limpar manualmente essas instâncias, consulte Limpeza da instância do Packer.

Os usuários em sua conta podem utilizar suas Plataformas personalizadas especificando um Nome de região da Amazon (ARN) da Plataforma durante a criação do ambiente. Esses ARNs são retornados pelo comando eb platform create que você usou para criar a plataforma personalizada.

Cada vez que você cria sua plataforma personalizada, o Elastic Beanstalk cria uma nova versão da plataforma. Os usuários podem especificar uma plataforma por nome para obter apenas a versão mais recente dela ou incluir um número de versão para obter uma versão específica.

Por exemplo, para implantar a versão mais recente da plataforma personalizada com o ARN MyCustomPlatformARN, que pode ser a versão 3.0, a linha de comando da CLI do EB seria assim:

eb create -p MyCustomPlatformARN

Para implantar a versão 2.1, a linha de comando da CLI do EB seria assim:

eb create -p MyCustomPlatformARN --version 2.1

Você pode aplicar tags a uma versão da plataforma personalizada ao criá-la e editar tags de versões existentes da plataforma personalizada. Para obter mais detalhes, consulte Atribuir tags em versões de plataforma personalizada.

Criar uma plataforma personalizada

Para criar uma Plataforma personalizada, a raiz de seu aplicativo deve incluir um platform definition file, platform.yaml, que define o tipo de construtor usado para criar a Plataforma personalizada. O formato desse arquivo está descrito no tópico Formato do arquivo platform.yaml. Você pode criar sua Plataforma personalizada do zero ou usar uma das Plataformas personalizadas de exemplo como ponto de partida.

Usar uma plataforma personalizada de exemplo

Uma alternativa para criar sua própria plataforma personalizada é usar um dos exemplos de platform definition archive para inicializá-la. Os únicos itens que você precisa configurar nos exemplos para que você possa usá-las são uma AMI de origem e uma região.

nota

Não use uma plataforma personalizada de exemplo não modificada em produção. O objetivo dos exemplos é mostrar algumas das funcionalidades disponíveis em uma plataforma personalizada, mas eles não foram reforçados para uso em produção.

NodePlatform_Ubuntu.zip

Essa Plataforma personalizada é baseada no Ubuntu 16.04 e é compatível com o Node.js 4.4.4. Vamos usar essa plataforma personalizada para os exemplos nesta seção.

NodePlatform_RHEL.zip

Essa Plataforma personalizada é baseada no RHEL 7.2 e é compatível com o Node.js 4.4.4.

NodePlatform_AmazonLinux.zip

Essa Plataforma personalizada é baseada no Amazon Linux 2016.09.1 e é compatível com o Node.js 4.4.4.

TomcatPlatform_Ubuntu.zip

Essa Plataforma personalizada é baseada no Ubuntu 16.04 e é compatível com o Tomcat 7/Java 8.

CustomPlatform_NodeSampleApp.zip

Um exemplo de Node.js que usa express e ejs para exibir uma página da web estática.

CustomPlatform_TomcatSampleApp.zip

Um exemplo de Tomcat que exibe uma página da web estática quando implantado.

Faça download do platform definition archive de exemplo: NodePlatform_Ubuntu.zip. Esse arquivo contém um platform definition file, um modelo do Packer, scripts que o Packer executa durante a criação de imagens e scripts e arquivos de configuração que o Packer copia na instância do construtor durante a criação da plataforma.

exemplo NodePlatform_Ubuntu.zip

|-- builder Contains files used by Packer to create the custom platform |-- custom_platform.json Packer template |-- platform.yaml Platform definition file |-- ReadMe.txt Briefly describes the sample

O platform definition file, platform.yaml, informa ao Elastic Beanstalk o nome do modelo do Packer, custom_platform.json.

version: "1.0" provisioner: type: packer template: custom_platform.json flavor: ubuntu1604

O modelo do Packer instrui o próprio Packer a criar as AMIs para a Plataforma usando uma AMI do Ubuntu como base para a imagem da Plataforma para tipos de instâncias HVM. A seção provisioners instrui o Packer a copiar todos os arquivos na pasta builder dentro do arquivo para a instância e a executar o script builder.sh na instância. Quando os scripts são concluídos, o Packer cria uma imagem da instância modificada.

O Elastic Beanstalk cria três variáveis de ambiente que podem ser usadas para marcar as AMIs no Packer:

AWS_EB_PLATFORM_ARN

O ARN da plataforma personalizada.

AWS_EB_PLATFORM_NAME

O nome da plataforma personalizada.

AWS_EB_PLATFORM_VERSION

A versão da plataforma personalizada.

O arquivo custom_platform.json de exemplo usa essas variáveis para definir os seguintes valores que ele utiliza nos scripts:

  • platform_name, que é definido por platform.yaml

  • platform_version, que é definido por platform.yaml

  • platform_arn, que é definido pelo script de construção principal, builder.sh, exibido no fim do arquivo custom_platform.json de exemplo.

O arquivo custom_platform.json contém duas propriedades para as quais você precisa fornecer valores: source_ami e region. Para obter detalhes sobre a escolha dos valores certos de região e AMI, consulte Atualização do modelo do Packer no repositório eb-custom-platforms-samples GitHub.

exemplo custom_platform.json

{ "variables": { "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}", "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}", "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}" }, "builders": [ { ... "region": "", "source_ami": "", ... } ], "provisioners": [ {...}, { "type": "shell", "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}", "scripts": [ "builder/builder.sh" ] } ] }

Os scripts e outros arquivos que você inclui no platform definition archive variam muito de acordo com as modificações que você deseja fazer na instância. A plataforma de exemplo inclui os seguintes scripts:

  • 00-sync-apt.sh – Comentados: apt -y update. Nós comentamos fora do comando porque ele solicita a entrada ao usuário, que divide a atualização do pacote automatizado. Isso pode ser um problema no Ubuntu. No entanto, executar apt -y update ainda é a melhor prática recomendada. Por esse motivo, nós deixamos o comando no script de exemplo para referência.

  • 01-install-nginx.sh – instala o nginx.

  • 02-setup-platform.sh – instala wget, tree e git. Copia hooks e configurações de registro na instância e cria os seguintes diretórios:

    • /etc/SampleNodePlatform – onde é feito upload do arquivo de configuração do contêiner durante a implantação.

    • /opt/elasticbeanstalk/deploy/appsource/ – onde o script 00-unzip.sh faz upload do código-fonte do aplicativo durante a implantação (consulte a seção Ferramentas de script de plataforma para obter informações sobre esse script).

    • /var/app/staging/ – onde o código-fonte do aplicativo é processado durante a implantação.

    • /var/app/current/ – onde o código-fonte do aplicativo é executado após o processamento.

    • /var/log/nginx/healthd/ – onde o agente de integridade aprimorada grava os logs.

    • /var/nodejs – onde é feito upload dos arquivos Node.js durante a implantação.

Use a EB CLI para criar sua primeira plataforma personalizada com o platform definition archive de exemplo.

Para criar uma plataforma personalizada

  1. Instale a CLI do EB.

  2. Crie um diretório no qual você extrairá a plataforma personalizada de exemplo.

    ~$ mkdir ~/custom-platform
  3. Extraia NodePlatform_Ubuntu.zip no diretório e, em seguida, altere para o diretório extraído.

    ~$ cd ~/custom-platform ~/custom-platform$ unzip ~/NodePlatform_Ubuntu.zip ~/custom-platform$ cd NodePlatform_Ubuntu
  4. Edite o arquivo custom_platform.json e forneça valores para as propriedades source_ami e region. Para obter detalhes, consulte Atualização do modelo do Packer.

  5. Execute eb platform init e siga os prompts para inicializar um repositório da Plataforma.

    Você pode abreviar eb platform como ebp.

    nota

    O Windows PowerShell usa ebp como alias de comando. Se estiver executando a CLI do EB no Windows PowerShell, utilize a forma longa deste comando eb platform.

    ~/custom-platform$ eb platform init

    Esse comando também cria o diretório .elasticbeanstalk no diretório atual e adiciona o arquivo de configuração config.yml ao diretório. Não altere ou exclua esse arquivo, porque o Elastic Beanstalk o utiliza para criar a plataforma personalizada.

    Por padrão, o eb platform init usa o nome da pasta atual como o nome da plataforma personalizada, que é custom-platform neste exemplo.

  6. Execute eb platform create para iniciar um ambiente Packer e obter o ARN da Plataforma personalizada. Você precisará desse valor no futuro quando criar um ambiente com base na plataforma personalizada.

    ~/custom-platform$ eb platform create ...

    Por padrão, o Elastic Beanstalk cria o perfil da instância aws-elasticbeanstalk-custom-platform-ec2-role para Plataformas personalizadas. Em vez disso, se você deseja usar um perfil da instância existente, adicione a opção -ip INSTANCE_PROFILE ao comando eb platform create.

    nota

    O Packer não poderá criar uma Plataforma personalizada se você usar o perfil da instância padrão aws-elasticbeanstalk-ec2-role do Elastic Beanstalk.

    A EB CLI mostra a saída do evento do ambiente Packer até a conclusão da criação. Você pode sair da visualização do evento pressionando Ctrl+C.

  7. Você pode consultar os logs para ver se há erros usando o comando eb platform logs.

    ~/custom-platform$ eb platform logs ...
  8. Você pode verificar o processo mais tarde com eb platform events.

    ~/custom-platform$ eb platform events ...
  9. Verifique o status da sua Plataforma com eb platform status.

    ~/custom-platform$ eb platform status ...

Quando a operação for concluída, você terá uma plataforma que poderá ser usada para executar um ambiente Elastic Beanstalk.

Você pode usar a plataforma personalizada ao criar um ambiente do console. Consulte O assistente de criação de novo ambiente.

Para iniciar um ambiente em sua plataforma personalizada

  1. Crie um diretório para seu aplicativo.

    ~$ mkdir custom-platform-app ~$ cd ~/custom-platform-app
  2. Inicialize um repositório do aplicativo.

    ~/custom-platform-app$ eb init ...
  3. Faça download do aplicativo de exemplo NodeSampleApp.zip.

  4. Extraia o aplicativo de exemplo.

    ~/custom-platform-app$ unzip ~/NodeSampleApp.zip
  5. Execute eb create -p CUSTOM-PLATFORM-ARN, em que CUSTOM-PLATFORM-ARN é o ARN retornado por um comando eb platform create para iniciar um ambiente que executa sua Plataforma personalizada.

    ~/custom-platform-app$ eb create -p CUSTOM-PLATFORM-ARN ...