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á.
Este tutorial e seu aplicativo de exemplo nodejs-example-dynamo.zip orientam você pelo processo de implantação de um aplicativo Node.js que usa o AWS SDK para JavaScript em Node.js para interagir com o serviço Amazon DynamoDB. Você criará uma tabela do DynamoDB que está em um banco de dados desacoplado ou externo do ambiente AWS Elastic Beanstalk. Você também configurará o aplicativo para usar um banco de dados desacoplado. Em um ambiente de produção, é uma prática recomendada usar um banco de dados desacoplado do ambiente Elastic Beanstalk para que seja independente do ciclo de vida do ambiente. Essa prática também permite que você execute implantações azul/verde.
O aplicativo de exemplo ilustra o seguinte:
-
Uma tabela do DynamoDB que armazena dados de texto fornecidos pelo usuário.
-
Os arquivos de configuração para criar a tabela.
-
Um tópico do Amazon Simple Notification Service.
-
O uso de um arquivo package.json para instalar pacotes durante a implantação.
Seções
Pré-requisitos
Este tutorial requer os seguintes pré-requisitos:
-
Os tempos de execução do Node.js
-
O software gerenciador de pacotes Node.js padrão, npm
-
O gerador de linha de comando Express
-
A Elastic Beanstalk Command Line Interface (EB CLI)
Para obter detalhes sobre como instalar os três primeiros componentes listados e configurar seu ambiente de desenvolvimento local, consulte Configurar seu ambiente de desenvolvimento Node.js para o Elastic Beanstalk. Para este tutorial, você não precisa instalar o AWS SDK para Node.js, que também é mencionado no tópico referenciado.
Para obter detalhes sobre como instalar e configurar a EB CLI, consulte Instalar a interface de linha de comando do Elastic Beanstalk e Configurar a EB CLI.
Criar um ambiente do Elastic Beanstalk
Seu diretório de aplicativos
Este tutorial usa um diretório chamado nodejs-example-dynamo
para o pacote de origem do aplicativo. Crie o diretório nodejs-example-dynamo
para este tutorial.
~$ mkdir nodejs-example-dynamo
nota
Cada tutorial neste capítulo usa seu próprio diretório para o pacote de origem do aplicativo. O nome do diretório corresponde ao nome do aplicativo de amostra usado pelo tutorial.
Altere seu diretório de trabalho atual para nodejs-example-dynamo
.
~$ cd nodejs-example-dynamo
Agora, vamos configurar um ambiente do Elastic Beanstalk executando a plataforma Node.js e o aplicativo de amostra. Usaremos a interface de linha de comando do Elastic Beanstalk (EB CLI).
Para configurar um repositório EB CLI para seu aplicativo e criar um ambiente Elastic Beanstalk executando a plataforma Node.js
-
Crie um repositório com o comando eb init.
~/nodejs-example-dynamo$
eb init --platform
node.js
--region<region>
Esse comando cria um arquivo de configuração em uma pasta chamada
.elasticbeanstalk
que especifica as configurações para a criação de ambientes para a aplicação e cria uma aplicação do Elastic Beanstalk com nome baseado na pasta atual. -
Crie um ambiente executando um aplicativo de exemplo com o comando eb create.
~/nodejs-example-dynamo$
eb create --sample
nodejs-example-dynamo
Esse comando cria um ambiente com balanceamento de carga com as configurações padrão da plataforma do Node.js e os seguintes recursos:
-
Instância do EC2: uma máquina virtual do Amazon Elastic Compute Cloud (Amazon EC2) configurada para executar aplicações Web na plataforma escolhida.
Cada plataforma executa um conjunto específico de software, arquivos de configuração e scripts para oferecer suporte a uma versão de linguagem, framework, contêiner da web específicos ou a uma combinação deles. A maioria das plataformas usa o Apache ou o NGINX como um proxy reverso que fica na frente da aplicação Web, encaminha solicitações para ela, atende ativos estáticos e gera logs de acesso e de erro.
-
Grupo de segurança de instância: um grupo de segurança do Amazon EC2 configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP do load balancer chegue à instância do EC2 que executa seu aplicativo Web. Por padrão, o tráfego não é permitido em outras portas.
-
Balanceador de carga: um balanceador de carga do Elastic Load Balancing configurado para distribuir solicitações para as instâncias que executam a aplicação. Um load balancer também elimina a necessidade de expor suas instâncias diretamente à Internet.
-
Grupo de segurança do balanceador de carga: um grupo de segurança do Amazon EC2 configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP da Internet acesse o load balancer. Por padrão, o tráfego não é permitido em outras portas.
-
Grupo de Auto Scaling: grupo de Auto Scaling configurado para substituir uma instância se ela for encerrada ou ficar indisponível.
-
Bucket do Amazon S3: um local de armazenamento do seu código-fonte, logs e outros artefatos criados quando o Elastic Beanstalk é utilizado.
-
Alarmes do Amazon CloudWatch: dois alarmes do CloudWatch que monitoram a carga nas instâncias do ambiente e são acionados quando ela está muito alta ou muito baixa. Quando um alarme é acionado, o seu grupo de Auto Scaling pode aumentar ou diminuir.
-
Pilha do AWS CloudFormation: o Elastic Beanstalk usa o AWS CloudFormation para iniciar os recursos em seu ambiente e propagar alterações de configuração. Os recursos são definidos em um modelo que você pode visualizar no console do AWS CloudFormation
. -
Nome de domínio: um nome de domínio que encaminha para a aplicação Web no formato
subdomínio
.região
.elasticbeanstalk.com.Segurança de domínios
Para aumentar a segurança de suas aplicações do Elastic Beanstalk, o domínio elasticbeanstalk.com é registrado na Lista Pública de Sufixos (PSL)
. Se precisar definir cookies confidenciais no nome de domínio padrão para suas aplicações Elastic Beanstalk, recomendamos usar cookies com um prefixo
__Host-
para maior segurança. Essa prática defende seu domínio contra tentativas de falsificação de solicitação entre sites (CSRF). Para obter mais informações, consulte a página Set-Cookiena Mozilla Developer Network.
-
-
Quando a criação do ambiente for concluída, use o comando eb open para abrir o URL do ambiente no navegador padrão.
~/nodejs-example-dynamo$
eb open
Agora você criou um ambiente Node.js Elastic Beanstalk com um aplicativo de amostra. Você pode atualizá-lo com seu próprio aplicativo. Em seguida, atualizamos o aplicativo de exemplo para usar a framework do Express.
Adicionar permissões às instâncias do seu ambiente
Seu aplicativo é executado em uma ou mais instâncias do EC2 por trás de um load balancer, atendendo a solicitações HTTP da Internet. Quando ele recebe uma solicitação que o obriga a usar os produtos da AWS, a aplicação usa as permissões da instância que executa para acessar esses serviços.
A aplicação demonstrativa usa as permissões de instância para gravar dados em uma tabela do DynamoDB e enviar notificações para um tópico do Amazon SNS com o SDK for JavaScript in Node.js. Adicione as políticas gerenciadas a seguir ao perfil da instância padrão para conceder às instâncias do EC2 no ambiente permissão para acessar o DynamoDB e o Amazon SNS:
-
AmazonDynamoDBFullAccess
-
AmazonSNSFullAccess
Para adicionar políticas ao perfil da instância padrão
-
Abra a página Roles (Funções)
no console do IAM. -
Escolha aws-elasticbeanstalk-ec2-role.
-
Na guia Permissions (Permissões), escolha Attach policies (Anexar políticas).
-
Selecione a política gerenciada para os serviços adicionais que o seu aplicativo utiliza. Para este tutorial, selecione
AmazonSNSFullAccess
eAmazonDynamoDBFullAccess
. -
Escolha Anexar política.
Consulte Gerenciar perfis de instância do Elastic Beanstalk para saber mais sobre o gerenciamento de perfis de instância.
Implante o aplicativo de exemplo
Agora seu ambiente está pronto para você implantar e executar o aplicativo de exemplo deste tutorial: nodejs-example-dynamo.zip.
Para implantar e executar o aplicativo de exemplo do tutorial
-
Altere seu diretório de trabalho atual para o diretório do aplicativo
nodejs-example-dynamo
.~$
cd nodejs-example-dynamo
-
Baixe e extraia o conteúdo do pacote de origem da aplicação de exemplo nodejs-exemplo-dynamo.zip para o diretório de aplicações
nodejs-example-dynamo
. -
Implante o aplicativo de exemplo em seu ambiente Elastic Beanstalk com o comando eb deploy.
~/nodejs-example-dynamo$
eb deploy
nota
Por padrão, o comando
eb deploy
cria um arquivo ZIP da pasta do seu projeto. Você pode configurar a EB CLI para implantar um artefato do seu processo de compilação, em vez de criar um arquivo ZIP da pasta do projeto. Para ter mais informações, consulte Implantar um artefato, em vez da pasta do projeto. -
Quando a criação do ambiente for concluída, use o comando eb open para abrir o URL do ambiente no navegador padrão.
~/nodejs-example-dynamo$
eb open
O site coleta informações de contato do usuário e usa uma tabela do DynamoDB para armazenar os dados. Para adicionar uma entrada, escolha Sign up today, insira um nome e um endereço de e-mail e, em seguida, selecione Sign Up!. A aplicação Web grava o conteúdo do formulário na tabela e aciona uma notificação por e-mail do Amazon SNS.
No momento, o tópico do Amazon SNS está configurado com um espaço reservado para notificações de e-mail. Você atualizará a configuração em breve, mas enquanto isso, pode verificar a tabela do DynamoDB e o tópico do Amazon SNS no Console de Gerenciamento da AWS Management Console.
Para visualizar a tabela
-
Abra a página Tables (Tabelas)
no console do DynamoDB. -
Encontre a tabela que o aplicativo criou. O nome começa com awseb e contém StartupSignupsTable.
-
Selecione a tabela, escolha Items e Start search para visualizar todos os itens na tabela.
A tabela contém uma entrada para cada endereço de e-mail enviado no site de inscrição. Além de gravar na tabela, a aplicação envia uma mensagem para um tópico do Amazon SNS que tem duas assinaturas, uma para notificações por e-mail para você e outra para uma fila do Amazon Simple Queue Service que uma aplicação de operador pode ler para processar solicitações e enviar e-mails para os clientes interessados.
Para visualizar o tópico
-
Abra a página Topics (Tópicos)
no console do Amazon SNS. -
Encontre o tópico que o aplicativo criou. O nome começa com awseb e contém NewSignupTopic.
-
Escolha o tópico para visualizar as assinaturas.
O aplicativo (app.js
) define duas rotas. O caminho raiz (/
) retorna uma página da web renderizada a partir de um modelo JavaScript incorporado (EJS) com um formulário que o usuário preenche para registrar seu nome e endereço de e-mail. A submissão do formulário envia uma solicitação POST com os dados do formulário para a rota /signup
, que grava uma entrada na tabela do DynamoDB e publica uma mensagem para o tópico do Amazon SNS para notificar o proprietário da inscrição.
A aplicação demonstrativa inclui os arquivos de configuração que criam a tabela do DynamoDB, o tópico do Amazon SNS e a fila do Amazon SQS usados pela aplicação. Isso permite que você crie um novo ambiente e teste a funcionalidade imediatamente, mas tem a desvantagem de vincular a tabela do DynamoDB ao ambiente. Para um ambiente de produção, você deve criar a tabela do DynamoDB fora do seu ambiente para evitar perdê-lo quando encerrar o ambiente ou atualizar sua configuração.
Criar uma tabela do DynamoDB
Para usar uma tabela do DynamoDB externa com uma aplicação em execução no Elastic Beanstalk primeiro crie uma tabela no DynamoDB. Quando uma instância é criada fora do Elastic Beanstalk, ela é completamente independente do Elastic Beanstalk e dos ambientes do Elastic Beanstalk e não será encerrada pelo Elastic Beanstalk.
Crie uma tabela com as seguintes configurações:
-
Table name (Nome da tabela):
nodejs-tutorial
-
chave primária:
email
-
Tipo de chave primária: string
Como criar uma tabela do DynamoDB
-
Abra a página Tables (Tabelas)
no console de gerenciamento do DynamoDB. -
Escolha Create table.
-
Digite um nome de tabela e chave primária.
-
Escolha o tipo de chave primária.
-
Escolha Criar.
Atualizar os arquivos de configuração do aplicativo
Atualize os arquivos de configuração na origem do aplicativo para usar a tabela nodejs-tutorial em vez de criar uma nova.
Para atualizar o aplicativo de exemplo para uso em produção
-
Altere seu diretório de trabalho atual para o diretório do aplicativo
nodejs-example-dynamo
.~$
cd nodejs-example-dynamo
-
Abra
.ebextensions/options.config
e altere os valores das configurações a seguir:-
NewSignupEmail: seu endereço de e-mail.
-
STARTUP_SIGNUP_TABLE: nodejs-tutorial
exemplo .ebextensions/options.config
option_settings: aws:elasticbeanstalk:customoption: NewSignupEmail:
you@example.com
aws:elasticbeanstalk:application:environment: THEME: "flatly" AWS_REGION: '`{"Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE:nodejs-tutorial
NEW_SIGNUP_TOPIC: '`{"Ref" : "NewSignupTopic"}`' aws:elasticbeanstalk:container:nodejs: ProxyServer: nginx aws:elasticbeanstalk:container:nodejs:staticfiles: /static: /static aws:autoscaling:asg: Cooldown: "120" aws:autoscaling:trigger: Unit: "Percent" Period: "1" BreachDuration: "2" UpperThreshold: "75" LowerThreshold: "30" MeasureName: "CPUUtilization"Isso aplica as seguintes configurações para o aplicativo:
-
O endereço de e-mail que o tópico do Amazon SNS usa para notificações é definido como seu endereço ou aquele que você insere no arquivo
options.config
. -
A tabela nodejs-tutorial será usada em vez da criada por
.ebextensions/create-dynamodb-table.config
.
-
-
Remover
.ebextensions/create-dynamodb-table.config
.~/nodejs-tutorial$
rm .ebextensions/create-dynamodb-table.config
Na próxima vez que você implantar o aplicativo, a tabela criada por esse arquivo de configuração será excluída.
-
Implante o aplicativo atualizado em seu ambiente Elastic Beanstalk com o comando eb deploy.
~/nodejs-example-dynamo$
eb deploy
-
Quando a criação do ambiente for concluída, use o comando eb open para abrir o URL do ambiente no navegador padrão.
~/nodejs-example-dynamo$
eb open
Quando você implanta, o Elastic Beanstalk atualiza a configuração do tópico do Amazon SNS e exclui a tabela do DynamoDB que ele criou quando a primeira versão da aplicação foi implantada.
Agora, quando você encerrar o ambiente, a tabela nodejs-tutorial não será excluída. Isso permite que você realize implantações azul/verde, modifique os arquivos de configuração ou desative seu site sem o risco de perda de dados.
Abra seu site em um navegador e verifique se o formulário funciona como esperado. Crie alguma entradas e, depois, verifique o console do DynamoDB para verificar a tabela.
Para visualizar a tabela
-
Abra a página Tables (Tabelas)
no console do DynamoDB. -
Encontre a tabela nodejs-tutorial.
-
Selecione a tabela, escolha Items e Start search para visualizar todos os itens na tabela.
Você também pode ver que o Elastic Beanstalk excluiu a tabela que foi criada anteriormente.
Configurar seu ambiente para alta disponibilidade
Por fim, configure o grupo de Auto Scaling do seu ambiente com uma contagem mínima de instâncias mais alta. Execute pelo menos duas instâncias o tempo todo para impedir que os servidores Web em seu ambiente sejam um ponto único de falha e para permitir que você implante alterações sem colocar seu site fora do serviço.
Para configurar o grupo de Auto Scaling de seu ambiente para alta disponibilidade
Abra o console do Elastic Beanstalk
e, na lista Regions (Regiões), selecione a sua Região da AWS. -
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.
No painel de navegação, escolha Configuration (Configuração).
-
Na categoria de configuração Capacity (Capacidade), escolha Edit (Editar).
-
Na seção Auto Scaling group (Grupo de Auto Scaling) defina Min instances (Mínimo de instâncias) como
2
. -
Para salvar as alterações, escolha Apply (Aplicar) na parte inferior da página.
Limpeza
Ao terminar de trabalhar com o Elastic Beanstalk, você pode encerrar o ambiente. O Elastic Beanstalk termina todos os recursos da AWS associados ao seu ambiente, como instâncias do Amazon EC2, instâncias de banco de dados, balanceadores de carga, grupos de segurança e alarmes.
Para encerrar seu ambiente Elastic Beanstalk do console
Abra o console do Elastic Beanstalk
e, na lista Regions (Regiões), selecione a sua Região da AWS. -
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.
-
Escolha Actions (Ações) e depois Terminate Environment (Encerrar ambiente).
-
Use a caixa de diálogo na tela para confirmar o encerramento do ambiente.
Com o Elastic Beanstalk, é possível criar facilmente um ambiente para a aplicação a qualquer momento.
Você também pode excluir as tabelas externas do DynamoDB que você criou.
Como excluir uma tabela do DynamoDB
-
Abra a página Tables (Tabelas)
no console do DynamoDB. -
Selecione uma tabela.
-
Escolha Actions e, em seguida, escolha Delete table.
-
Escolha Excluir.
Próximas etapas
O aplicativo de exemplo usa os arquivos de configuração para definir as configurações de software e criar recursos da AWS como parte do seu ambiente. Consulte Personalização avançada de ambiente com arquivos de configuração (.ebextensions) para obter mais informações sobre os arquivos de configuração e seu uso.
O aplicativo de exemplo para este tutorial usa a framework da Web Express para Node.js. Para obter mais informações sobre o Express, consulte a documentação oficial em expressjs.com
Por fim, se você planeja usar seu aplicativo em um ambiente de produção, configure um nome de domínio personalizado para seu ambiente e habilite o HTTPS para conexões seguras.