AWS Elastic Beanstalk
Guia do desenvolvedor

Uso do Elastic Beanstalk com o Amazon Relational Database Service

O AWS Elastic Beanstalk fornece suporte para a execução das instâncias do Amazon Relational Database Service (Amazon RDS) no seu ambiente Elastic Beanstalk. Isso funciona muito bem para ambientes de desenvolvimento e teste. No entanto, não é ideal para ambientes de produção porque ele vincula o ciclo de vida da instância de banco de dados ao ciclo de vida do ambiente de seu aplicativo.

nota

Se você ainda não usou uma instância de banco de dados com seu aplicativo, tente adicionar uma a um ambiente de teste com o Console do Elastic Beanstalk primeiro. Isso permite que você verifique se o aplicativo pode ler as propriedades do ambiente, criar uma sequência de conexão e conectar-se a uma instância de banco de dados antes de você adicionar a configuração do grupo de segurança e da Amazon Virtual Private Cloud (Amazon VPC) à combinação. Consulte Adição de um banco de dados ao seu ambiente Elastic Beanstalk para obter detalhes.

Para dissociar sua instância de banco de dados de seu ambiente, você pode executar uma instância de banco de dados no Amazon RDS e configurar seu aplicativo para conectar-se a ela ao iniciar. Isso permite que você conecte vários ambientes a um banco de dados, encerre um ambiente sem afetar o banco de dados e realize atualizações contínuas com implantações blue-green. Para obter um procedimento detalhado, consulte Como desacoplo uma instância do Amazon RDS do ambiente do AWS Elastic Beanstalk sem período de inatividade, problemas de sincronização com o banco de dados ou perda de dados?.

Para permitir que as instâncias do Amazon EC2 em seu ambiente se conectem a um banco de dados externo, você pode configurar o grupo do Auto Scaling do ambiente com um security group adicional. O security group que você anexa ao seu ambiente pode ser o mesmo que é anexado à instância do banco de dados ou um security group separado do qual o security group do banco de dados permite ingresso.

nota

É possível conectar seu ambiente a um banco de dados adicionando uma regra ao security group do banco de dados que permite o ingresso a partir do security group autogerado que o Elastic Beanstalk anexa ao grupo do Auto Scaling de seu ambiente. No entanto, isso cria uma dependência entre os dois security groups. Subsequentemente, quando você tentar encerrar o ambiente, o Elastic Beanstalk não poderá excluir o security group do ambiente, porque o security group do banco de dados é dependente dele.

Após iniciar sua instância de banco de dados e configurar grupos de segurança, você pode passar as informações de conexão (endpoint, senha, etc.) para seu aplicativo usando as propriedades do ambiente. Este é o mesmo mecanismo que o Elastic Beanstalk usa quando você executa uma instância de banco de dados no ambiente.

Para segurança adicional, você pode armazenar suas informações de conexão no Amazon S3 e configurar o Elastic Beanstalk para recuperá-las durante a implantação. Com os arquivos de configuração (.ebextensions), você pode configurar as instâncias em seu ambiente para recuperar arquivos do Amazon S3 com segurança ao implantar seu aplicativo.

Inicialização e conexão a uma instância externa do Amazon RDS em uma VPC padrão

Para usar um banco de dados externo com um aplicativo em execução no Elastic Beanstalk, primeiro execute uma instância de banco de dados com o Amazon RDS. Qualquer instância que você executar com o Amazon RDS será completamente independente do Elastic Beanstalk e de seus ambientes do Elastic Beanstalk e não dependerão do Elastic Beanstalk para configuração. Isso significa que você pode usar qualquer tipo de instância e mecanismo de banco de dados compatíveis com o Amazon RDS, mesmo aqueles que não forem usados pelo Elastic Beanstalk.

Os procedimentos a seguir descrevem o processo para uma VPC padrão. O processo é o mesmo se você estiver usando uma VPC personalizada. Os únicos requisitos adicionais são que o seu ambiente e instância de banco de dados estejam na mesma sub-rede ou em sub-redes que possam se comunicar umas com as outras. Consulte Uso do Elastic Beanstalk com o Amazon Virtual Private Cloud para obter detalhes sobre como configurar uma VPC personalizada para usar com o Elastic Beanstalk.

Para executar uma instância de banco de dados do RDS em uma VPC padrão

  1. Abra o console do RDS.

  2. Escolha Databases no painel de navegação.

  3. Escolha Create database (Criar banco de dados).

  4. Escolha um mecanismo de banco de dados. Escolha Next.

  5. Escolha um caso de uso, se solicitado.

  6. Em Specify DB details (Especificar detalhes de banco de dados), revise as configurações padrão e ajuste conforme necessário. Preste atenção às seguintes opções:

    • Classe de instância de banco de dados – Escolha um tamanho de instância que tem uma quantidade apropriada de memória e energia CPU para sua carga de trabalho.

    • Implantação Multi-AZ – Para alta disponibilidade, defina como Create replica in different zone.

    • Nome de usuário mestre e Senha mestre – O nome de usuário do banco de dados e senha. Anote essas configurações porque você as usará mais tarde.

  7. Escolha Next.

  8. Em Database options (Opções de banco de dados), em Database name (Nome do banco de dados), digite ebdb. Anote o valor de Database port para usar posteriormente.

  9. Verifique as configurações padrão para as opções restantes e selecione Create database (Criar banco de dados).

Em seguida, modifique o security group anexado à sua instância de banco de dados para permitir o tráfego de entrada na porta apropriada. Este é o mesmo security group que você anexará ao seu ambiente Elastic Beanstalk mais tarde, para que a regra que você adicionar conceda permissão de entrada a outros recursos no mesmo security group.

Para modificar as regras de ingresso no security group da instância do RDS

  1. Abra o console do Amazon RDS.

  2. Escolha Databases (Bancos de dados).

  3. Escolha o nome da sua instância de banco de dados para visualizar detalhes.

  4. Na seção Connectivity (Conectividade), observe que Subnets (Sub-redes), Security groups (Grupos de segurança) e Endpoint são exibidos nesta página para que você possa usar essas informações mais tarde.

  5. Em Security (Segurança), é possível ver o grupo de segurança associado à instância de banco de dados. Abra o link para visualizar o security group no console do Amazon EC2.

    
        A seção Connectivity (Conectividade) da página de uma instância de banco de dados no console do Amazon RDS
  6. Nos detalhes do grupo de segurança, escolha a guia Inbound (Entrada).

  7. Selecione Edit.

  8. Escolha Adicionar regra.

  9. Para Tipo, escolha o mecanismo de banco de dados usado pelo aplicativo.

  10. Em Source (Origem), digite sg- para exibir uma lista dos grupos de segurança disponíveis. Escolha o security group atual para permitir que os recursos do security group recebam tráfego na porta de banco de dados de outros recursos do mesmo grupo.

    
        Edite as regras de entrada para um grupo de segurança no console do Amazon EC2
  11. Escolha Salvar.

Em seguida, adicione o security group da instância de banco de dados ao seu ambiente em execução. Esse procedimento faz com que o Elastic Beanstalk reprovisione todas as instâncias em seu ambiente com o security group adicional anexado.

Para adicionar um security group ao seu ambiente

  • Siga um destes procedimentos:

    • Para adicionar um grupo de segurança usando o Console do Elastic Beanstalk

      1. Abra o Console do Elastic Beanstalk.

      2. Navegue até a página de gerenciamento do ambiente.

      3. Escolher configuração.

      4. Na categoria de configuração Instances (Instâncias), selecione Modify (Modificar).

      5. Em EC2 security groups, escolha o grupo de segurança para anexar às instâncias, além do grupo de segurança da instância que o Elastic Beanstalk criará.

      6. Escolha Aplicar.

      7. Leia o aviso e escolha Confirm.

    • Para adicionar um grupo de segurança usando um arquivo de configuração, use o arquivo de exemplo securitygroup-addexisting.config .

Em seguida, passe as informações de conexão para o seu ambiente usando as propriedades de ambiente. Quando você adiciona uma instância de banco de dados ao seu ambiente com o console do Console do Elastic Beanstalk, o Elastic Beanstalk usa propriedades de ambiente como RDS_HOSTNAME para passar informações de conexão ao seu aplicativo. Você pode usar as mesmas propriedades, o que permitirá que você use o mesmo código de aplicativo com instâncias de banco de dados integradas e externas, ou escolher seus próprios nomes de propriedades.

Para configurar as propriedades do ambiente para uma instância de banco de dados do Amazon RDS

  1. Abra o Console do Elastic Beanstalk.

  2. Navegue até a página de gerenciamento do ambiente.

  3. Escolher configuração.

  4. Na categoria de configuração Software, selecione Modify (Modificar).

  5. Na seção Environment properties, defina as variáveis que seu aplicativo lê para construir uma string de conexão. Para compatibilidade com ambientes que têm uma instância de banco de dados RDS integrada, use o seguinte.

    • RDS_HOSTNAME – O nome de host da instância de banco de dados.

      Rótulo do console do Amazon RDS – Endpoint (este é o nome do host)

    • RDS_PORT – A porta na qual a instância de banco de dados aceita conexões. O valor padrão varia entre os mecanismos de banco de dados.

      Rótulo do console do Amazon RDS – Porta

    • RDS_DB_NAME – O nome do banco de dados, ebdb.

      Rótulo do console do Amazon RDS – Nome do banco de dados

    • RDS_USERNAME – O nome de usuário que você configurou para seu banco de dados.

      Rótulo do console do Amazon RDS – Username

    • RDS_PASSWORD – A senha que você configurou para seu banco de dados.

    
        Seção Propriedades do ambiente com propriedades de RDS adicionadas
  6. Escolha Aplicar.

Se você ainda não tiver programado o seu aplicativo para ler as propriedades de ambiente e construir uma string de conexão, consulte os seguintes tópicos específicos de cada linguagem para obter instruções:

Finalmente, dependendo de quando seu aplicativo lê as variáveis de ambiente, pode ser necessário reiniciar o servidor de aplicativo nas instâncias em seu ambiente.

Para reiniciar os servidores de aplicativos do ambiente

  1. Abra o Console do Elastic Beanstalk.

  2. Navegue até a página de gerenciamento do ambiente.

  3. Escolha Actions (Ações) e, em seguida, escolha Restart App Server(s) (Reiniciar servidor(es) de aplicativo(s)).

Inicialização e conexão a uma instância externa do Amazon RDS no EC2 Classic

Se você usar o EC2-Classic (não a VPC) com o AWS Elastic Beanstalk, o procedimento será ligeiramente alterado devido às diferenças no funcionamento dos security groups. No EC2-Classic, as instâncias de banco de dados não podem usar security groups do EC2, por isso elas têm um security group de banco de dados que funciona apenas com o Amazon RDS.

Você pode adicionar regras a um security group de banco de dados que permite o ingresso de security groups do EC2, mas não pode anexar um security group de banco de dados ao grupo Auto Scaling de seu ambiente. Para evitar a criação de uma dependência entre o security group do banco de dados e seu ambiente, você deve criar um terceiro security group no Amazon EC2, adicione uma regra no security group do banco de dados para conceder ingresso ao novo security group e atribuí-lo ao grupo do Auto Scaling no seu ambiente Elastic Beanstalk.

Para executar uma instância do RDS no EC2-Classic (não na VPC)

  1. Abra o console de gerenciamento do RDS.

  2. Escolha Create database (Criar banco de dados).

  3. Continue no assistente. Preste atenção nos valores que você inserir para as seguintes opções:

    • Master Username

    • Senha mestre

  4. Quando chegar em Configure advanced settings (Definir configurações avançadas), para as configurações de Network and Security (Rede e segurança), selecione o seguinte:

    • VPCNot in VPC. Se essa opção não estiver disponível, sua conta talvez não seja compatível com o EC2-Classic, ou você pode ter escolhido um tipo de instância que só está disponível na VPC.

    • Zona de disponibilidadeNo Preference

    • Grupos de segurança de banco de dadosCreate new Security Group

  5. Configure as opções restantes e selecione Create database (Criar banco de dados). Preste atenção nos valores que você inserir para as seguintes opções:

    • Database Name

    • Database Port

No EC2-Classic, sua instância de banco de dados terá um security group de banco de dados, em vez de um security group de VPC. Não é possível anexar um security group de banco de dados a seu ambiente do Elastic Beanstalk, portanto, é necessário criar um novo security group que você possa autorizar para acessar a instância de banco de dados e anexá-la a seu ambiente. Vamos nos referir a ele como security group de ligação e o nomearemos como webapp-bridge.

Para criar um security group de ligação

  1. Abra o console do Amazon EC2.

  2. Escolha Security Groups na seção Network & Security do painel de navegação à esquerda.

  3. Escolha Create Security Group.

  4. Em Security group name (Nome do grupo de segurança), digite webapp-bridge.

  5. Em Description, digite Provide access to DB instance from Elastic Beanstalk environment instances.

  6. Para VPC, deixe a padrão selecionada.

  7. Escolha Criar

Em seguida, modifique o security group anexado à sua instância de banco de dados para permitir o tráfego de entrada do security group de ligação.

Para modificar as regras de ingresso no security group da instância do RDS

  1. Abra o console do Amazon RDS.

  2. Escolha Databases (Bancos de dados).

  3. Escolha o nome da sua instância de banco de dados para visualizar detalhes.

  4. Na seção Connectivity (Conectividade), em Security (Segurança), o grupo de segurança associado à instância de banco de dados é exibido. Abra o link para visualizar o security group no console do Amazon EC2.

  5. Nos detalhes do security group, defina Connection Type como EC2 Security Group.

  6. Defina EC2 Security Group Name com o nome do security group de ligação que você criou.

  7. Escolha Authorize.

Em seguida, adicione o security group de ligação ao seu ambiente em execução. Esse procedimento exige que todas as instâncias em seu ambiente sejam reprovidas com o security group adicional anexado.

Para adicionar um security group ao seu ambiente

  • Siga um destes procedimentos:

    • Para adicionar um grupo de segurança usando o Console do Elastic Beanstalk

      1. Abra o Console do Elastic Beanstalk.

      2. Navegue até a página de gerenciamento do ambiente.

      3. Escolher configuração.

      4. Na categoria de configuração Instances (Instâncias), selecione Modify (Modificar).

      5. Em EC2 security groups, escolha o grupo de segurança para anexar às instâncias, além do grupo de segurança da instância que o Elastic Beanstalk criará.

      6. Escolha Aplicar.

      7. Leia o aviso e escolha Confirm.

    • Para adicionar um grupo de segurança usando um arquivo de configuração, use o arquivo de exemplo securitygroup-addexisting.config .

Em seguida, passe as informações de conexão para o seu ambiente usando as propriedades de ambiente. Quando você adiciona uma instância de banco de dados ao seu ambiente com o console do Console do Elastic Beanstalk, o Elastic Beanstalk usa propriedades de ambiente como RDS_HOSTNAME para passar informações de conexão ao seu aplicativo. Você pode usar as mesmas propriedades, o que permitirá que você use o mesmo código de aplicativo com instâncias de banco de dados integradas e externas, ou escolher seus próprios nomes de propriedades.

Para configurar as propriedades de ambiente

  1. Abra o Console do Elastic Beanstalk.

  2. Navegue até a página de gerenciamento do ambiente.

  3. Escolher configuração.

  4. Na categoria de configuração Software, selecione Modify (Modificar).

  5. Na seção Environment Properties, defina as variáveis que seu aplicativo lê para construir uma string de conexão. Para a compatibilidade com ambientes que têm uma instância RDS integrada, use o seguinte:

    • RDS_DB_NAME – O DB Name(Nome do banco de dados) mostrado no console do Amazon RDS.

    • RDS_USERNAME – O nome de usuário mestre que você insere ao adicionar o banco de dados ao seu ambiente.

    • RDS_PASSWORD – A senha mestre que você insere ao adicionar o banco de dados ao seu ambiente.

    • RDS_HOSTNAME – O endpoint da instância de banco de dados mostrada no console do Amazon RDS.

    • RDS_PORT – A porta exibida no console do Amazon RDS.

    Escolha o sinal de mais para adicionar mais propriedades.

  6. Escolha Aplicar

Se você ainda não tiver programado o seu aplicativo para ler as propriedades de ambiente e construir uma string de conexão, consulte os seguintes tópicos específicos de cada linguagem para obter instruções:

Finalmente, dependendo de quando seu aplicativo lê as variáveis de ambiente, pode ser necessário reiniciar o servidor de aplicativo nas instâncias em seu ambiente.

Para reiniciar os servidores de aplicativos do ambiente

  1. Abra o Console do Elastic Beanstalk.

  2. Navegue até a página de gerenciamento do ambiente.

  3. Escolha Actions (Ações) e, em seguida, escolha Restart App Server(s) (Reiniciar servidor(es) de aplicativo(s)).

Armazenar a string de conexão no Amazon S3

Fornecer informações de conexão para o seu aplicativo com propriedades do ambiente é uma boa forma de manter as senhas fora do seu código, mas não é uma solução perfeita. As propriedades de ambiente são detectáveis no console de gerenciamento do ambiente e podem ser visualizadas por qualquer usuário que tenha permissão para descrever definições de configuração em seu ambiente. Dependendo da Plataforma, as propriedades do ambiente também podem aparecer nos logs de instância.

Você pode bloquear suas informações de conexão armazenando-as em um bucket do Amazon S3 controlado por você. As etapas básicas são:

  • Faça upload de um arquivo que contenha sua string de conexão para um bucket do Amazon S3.

  • Conceda ao perfil da instância do EC2 permissão para ler o arquivo.

  • Configure seu aplicativo para fazer download do arquivo durante a implantação.

  • Leia o arquivo no código do seu aplicativo.

Primeiro, crie um bucket para armazenar o arquivo que contém a string de conexão. Neste exemplo, usaremos um arquivo JSON que tem uma única chave e valor. O valor é uma string de conexão JDBC para uma instância de banco de dados PostgreSQL no Amazon RDS.

beanstalk-database.json

{ "connection": "jdbc:postgresql://mydb.b5uacpxznijm.us-west-2.rds.amazonaws.com:5432/ebdb?user=username&password=mypassword" }

As partes destacadas da URL correspondem ao endpoint, à porta, ao nome do banco de dados, ao nome e senha do usuário do banco de dados.

Para criar um bucket e fazer upload de um arquivo

  1. Abra o console do Amazon S3.

  2. Escolha Criar bucket.

  3. Digite um Bucket Name (Nome de bucket) e escolha uma Region (Região).

  4. Escolha Criar.

  5. Abra o bucket e escolha Upload (Fazer upload)

  6. Siga as instruções para fazer upload do arquivo.

Por padrão, sua conta possui o arquivo e tem permissão para gerenciá-lo, mas os usuários e as funções do IAM não têm, a menos que você conceda acesso a eles explicitamente. Conceda às instâncias em seu ambiente do Elastic Beanstalk adicionando uma política ao perfil de instância.

O perfil da instância padrão é chamado de aws-elasticbeanstalk-ec2-role. Se você não souber o nome de seu perfil de instância, poderá localizá-lo na página Configuration (Configuração) no console de gerenciamento do ambiente.

Para adicionar permissões ao perfil de instância

  1. Abra o console do IAM.

  2. Escolha Roles.

  3. Escolha aws-elasticbeanstalk-ec2-role.

  4. Escolha Add inline policy.

  5. Adicione uma política que permite à instância recuperar o arquivo.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "database", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::my-secret-bucket-123456789012/beanstalk-database.json" ] } ] }

    Substitua os nomes de bucket e objeto pelos nomes do seu bucket e do seu objeto.

Em seguida, adicione um arquivo de configuração ao seu código-fonte que diga para o Elastic Beanstalk fazer download do arquivo do Amazon S3 durante a implantação.

~/my-app/.ebextensions/database.config

Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["my-secret-bucket-123456789012"] roleName: "aws-elasticbeanstalk-ec2-role" files: "/tmp/beanstalk-database.json" : mode: "000644" owner: root group: root authentication: "S3Auth" source: https://s3-us-west-2.amazonaws.com/my-secret-bucket-123456789012/beanstalk-database.json

Esse arquivo de configuração faz duas coisas. A chave Resources adiciona um método de autenticação aos metadados do grupo do Auto Scaling do seu ambiente que o Elastic Beanstalk pode usar para acessar o Amazon S3. A chave files diz para o Elastic Beanstalk fazer download do arquivo do Amazon S3 e armazená-lo localmente no /tmp/ durante a implantação.

Implante seu aplicativo com o arquivo de configuração na pasta .ebextensions na raiz do código-fonte. Se você configurar as permissões corretamente, a implantação será bem-sucedida e o arquivo será baixado para todas as instâncias do seu ambiente. Se não, a implantação falhará.

Por fim, adicione o código ao seu aplicativo para ler o arquivo JSON e usar a string de conexão para se conectar ao banco de dados.

Limpeza de uma instância externa do Amazon RDS

Quando você conecta uma instância externa do Amazon RDS ao ambiente do Elastic Beanstalk, a instância de banco de dados não é vinculada ao ciclo de vida de seu ambiente e não é excluída quando você encerra o ambiente. Para garantir que as informações pessoais que você pode ter armazenado na instância de banco de dados não sejam retidas desnecessariamente, exclua todos os registros que não deseja mais ou exclua a instância de banco de dados.