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á.
Implantação de um Node.js aplicativo com o DynamoDB no Elastic Beanstalk
Este tutorial e seu aplicativo de exemplo nodejs-example-dynamo.zip orientam você no processo de implantação de um Node.js aplicativo que usa o AWS SDK for JavaScript in 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ê realize blue/green implantações.
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 Node.js execução
-
O software gerenciador de Node.js pacotes 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 mencionado.
Para obter detalhes sobre como instalar e configurar a EB CLI, consulte Instalar a EB CLI com script de configuração (recomendado) 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 Elastic Beanstalk executando a Node.js plataforma 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 --platformnode.js--region<region>Esse comando cria um arquivo de configuração em uma pasta chamada
.elasticbeanstalkque 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 --samplenodejs-example-dynamoEsse comando cria um ambiente de balanceamento de carga com as configurações padrão da Node.js plataforma e os seguintes recursos:
-
Beanstalk Standard — Para um ambiente executado no Amazon Elastic Compute Cloud (Amazon EC2), o Elastic Beanstalk provisiona os seguintes recursos:
-
Instância EC2 — Uma máquina virtual Amazon EC2 configurada para executar aplicativos web na plataforma que você escolher.
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.
-
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.
-
CloudWatch Alarmes da Amazon — Dois CloudWatch alarmes que monitoram a carga nas instâncias em seu ambiente e que são acionados se a carga estiver muito alta ou muito baixa. Quando um alarme é acionado, o seu grupo de Auto Scaling pode aumentar ou diminuir.
-
-
Cluster Beanstalk — Para um ambiente executado no Amazon EKS, o Elastic Beanstalk provisiona os seguintes recursos:
-
Cluster Amazon EKS — Um cluster Amazon EKS que o Elastic Beanstalk cria e opera. Ambientes na mesma conta que usam as mesmas sub-redes compartilham um cluster.
-
Computação — Capacidade de nós fornecida pelo Amazon EKS Auto Mode, que adiciona e remove nós para caber nas réplicas de aplicativos programadas no cluster.
-
Funções do IAM — As funções de cluster e node que você fornece para o Amazon EKS e a função de observabilidade que o Elastic Beanstalk usa para publicar as métricas, os logs e os rastreamentos do ambiente.
Para obter mais informações sobre essa infraestrutura, consulteArquitetura Beanstalk Cluster.
-
-
Balanceador de carga — Um balanceador de carga que distribui as solicitações recebidas em seu aplicativo. Um balanceador de carga também elimina a necessidade de expor seu aplicativo diretamente à Internet.
-
Bucket do Amazon S3: um local de armazenamento do seu código-fonte, logs e outros artefatos criados quando o Elastic Beanstalk é utilizado.
-
CloudFormation stack — O Elastic Beanstalk é usado CloudFormation para iniciar os recursos em seu ambiente e propagar mudanças de configuração. Os recursos são definidos em um modelo que você pode visualizar no console do CloudFormation
. -
Nome de domínio — Um nome de domínio que direciona para seu aplicativo web no formulário
subdomain.region.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 Set-Cookiepágina na Rede de Desenvolvedores da Mozilla.
-
-
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 recebe uma solicitação que exige o uso de AWS serviços, o aplicativo usa as permissões da instância em que é executado para acessar esses serviços.
O aplicativo de amostra usa 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 in. JavaScript 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
AmazonSNSFullAccesseAmazonDynamoDBFullAccess. -
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 deploynota
Por padrão, o comando
eb deploycria 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 obter 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 Console de gerenciamento da AWS.
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 incorporado JavaScript (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 Criar tabela.
-
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.confige altere os valores das configurações a seguir:-
NewSignupEmail— Seu endereço de e-mail.
-
STARTUP_SIGNUP_TABLE: nodejs-tutorial
exemplo. ebextensions/options.configuração
option_settings: aws:elasticbeanstalk:customoption: NewSignupEmail:you@example.comaws:elasticbeanstalk:application:environment: THEME: "flatly" AWS_REGION: '`{"Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE:nodejs-tutorialNEW_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.
-
-
Remova
.ebextensions/create-dynamodb-table.config.~/nodejs-tutorial$rm .ebextensions/create-dynamodb-table.configNa 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 blue/green implantações, modifique arquivos de configuração ou remova seu site sem correr o risco de perder 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 Regiões, selecione seu. Região da AWS -
No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.
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
Depois de terminar de trabalhar com o código de demonstração, você pode encerrar seu ambiente. O Elastic Beanstalk exclui todos os AWS recursos relacionados, como instâncias do Amazon EC2, instâncias de banco de dados, balanceadores de carga, grupos de segurança e alarmes.
Como a remoção de recursos não exclui a aplicação Elastic Beanstalk, é possível criar ambientes para a aplicação a qualquer momento.
Para encerrar seu ambiente Elastic Beanstalk do console
Abra o console do Elastic Beanstalk e
, na lista Regiões, selecione seu. Região da AWS -
No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.
-
Escolha Actions (Ações) e depois Terminate Environment (Encerrar ambiente).
-
Use a caixa de diálogo na tela para confirmar o encerramento do ambiente.
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 arquivos de configuração para definir as configurações do software e criar AWS recursos como parte do seu ambiente. Consulte Personalização avançada do 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 deste tutorial usa a estrutura 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.