

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á.

# Implantar uma aplicação Node.js com o DynamoDB no Elastic Beanstalk
<a name="nodejs-dynamodb-tutorial"></a>

Este tutorial e seu aplicativo de exemplo [nodejs-example-dynamo.zip orientam](samples/nodejs-example-dynamo.zip) você pelo processo de implantação de um aplicativo Node.js que usa o AWS SDK JavaScript em Node.js para interagir com o serviço Amazon DynamoDB. Você criará uma tabela do DynamoDB 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](using-features.CNAMESwap.md).

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](ebextensions.md) para criar a tabela.
+ Um tópico do Amazon Simple Notification Service.
+  O uso de um [arquivo package.json](nodejs-platform-dependencies.md#nodejs-platform-packagejson) para instalar pacotes durante a implantação.

**Topics**
+ [Pré-requisitos](#nodejs-dynamodb-tutorial-prereqs)
+ [Criar um ambiente do Elastic Beanstalk](#nodejs-dynamodb-tutorial-launch)
+ [Adicionar permissões às instâncias do seu ambiente](#nodejs-dynamodb-tutorial-role)
+ [Implante o aplicativo de exemplo](#nodejs-dynamodb-tutorial-deploy)
+ [Criar uma tabela do DynamoDB](#nodejs-dynamodb-tutorial-database)
+ [Atualizar os arquivos de configuração do aplicativo](#nodejs-dynamodb-tutorial-update)
+ [Configurar seu ambiente para alta disponibilidade](#nodejs-dynamodb-tutorial-configure)
+ [Limpeza](#nodejs-dynamodb-tutorial-cleanup)
+ [Próximas etapas](#nodejs-dynamodb-tutorial-nextsteps)

## Pré-requisitos
<a name="nodejs-dynamodb-tutorial-prereqs"></a>

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](nodejs-devenv.md). 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 EB CLI com script de configuração (recomendado)](eb-cli3.md#eb-cli3-install) e [Configurar a EB CLI](eb-cli3-configuration.md).

## Criar um ambiente do Elastic Beanstalk
<a name="nodejs-dynamodb-tutorial-launch"></a>

**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**

1. Crie um repositório com o comando **[**eb init**](eb3-init.md)**.

   ```
   ~/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.

1. Crie um ambiente executando um aplicativo de exemplo com o comando **[**eb create**](eb3-create.md)**.

   ```
   ~/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:
   + **EC2 instância** — Uma máquina virtual Amazon Elastic Compute Cloud (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 da instância** — Um grupo EC2 de segurança da Amazon configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP do balanceador de carga chegue à EC2 instância 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 EC2 de segurança da Amazon 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.
   + ** 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 for muito alta ou muito baixa. Quando um alarme é acionado, o seu grupo de Auto Scaling pode aumentar ou diminuir.
   + **CloudFormation stack** — O Elastic CloudFormation Beanstalk usa para lançar os recursos em seu ambiente e propagar as alterações de configuração. Os recursos são definidos em um modelo que você pode visualizar no [console do CloudFormation](https://console.aws.amazon.com/cloudformation).
   + **Nome de domínio** — Um nome de domínio que é direcionado para seu aplicativo da 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)](https://publicsuffix.org/).  
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-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) na Mozilla Developer Network.

1. Quando a criação do ambiente for concluída, use o comando [**eb open**](eb3-open.md) 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
<a name="nodejs-dynamodb-tutorial-role"></a>

Seu aplicativo é executado em uma ou mais EC2 instâncias por trás de um balanceador de carga, 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 em Node.js. JavaScript Adicione as seguintes políticas gerenciadas ao [perfil de instância](concepts-roles-instance.md) padrão para conceder às EC2 instâncias em seu ambiente permissão para acessar o DynamoDB e o Amazon SNS:
+ **AmazonDynamoDBFullAcesso**
+ **Amazon SNSFull Access**

**Para adicionar políticas ao perfil da instância padrão**

1. Abra a página [Roles (Funções)](https://console.aws.amazon.com/iam/home#roles) no console do IAM.

1. Escolha **aws-elasticbeanstalk-ec2 funções**.

1. Na guia **Permissions (Permissões)**, escolha **Attach policies (Anexar políticas)**.

1. Selecione a política gerenciada para os serviços adicionais que o seu aplicativo utiliza. Para este tutorial, selecione `AmazonSNSFullAccess` e `AmazonDynamoDBFullAccess`. 

1. Escolha **Anexar política**.

Consulte [Gerenciar perfis de instância do Elastic Beanstalk](iam-instanceprofile.md) para saber mais sobre o gerenciamento de perfis de instância.

## Implante o aplicativo de exemplo
<a name="nodejs-dynamodb-tutorial-deploy"></a>

Agora seu ambiente está pronto para você implantar e executar o aplicativo de exemplo deste tutorial: [nodejs-example-dynamo.zip.](samples/nodejs-example-dynamo.zip)

**Para implantar e executar o aplicativo de exemplo do tutorial**

1. Altere seu diretório de trabalho atual para o diretório do aplicativo `nodejs-example-dynamo`.

   ```
   ~$ cd nodejs-example-dynamo
   ```

1. Baixe e extraia o conteúdo do pacote de origem do aplicativo de exemplo [nodejs-example-dynamo.zip](samples/nodejs-example-dynamo.zip) para o diretório do aplicativo. `nodejs-example-dynamo`

1. Implante o aplicativo de exemplo em seu ambiente Elastic Beanstalk com o comando [**eb deploy**](eb3-deploy.md).

   ```
   ~/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 obter mais informações, consulte [Implantar um artefato, em vez da pasta do projeto](eb-cli3-configuration.md#eb-cli3-artifact).

1. Quando a criação do ambiente for concluída, use o comando [**eb open**](eb3-open.md) 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\$1**. A aplicação Web grava o conteúdo do formulário na tabela e aciona uma notificação por e-mail do Amazon SNS.

![\[Startup landing page with teaser message and sign-up button for upcoming product launch.\]](http://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/images/nodejs-dynamodb-tutorial-app.png)


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**

1. Abra a [página Tables (Tabelas)](https://console.aws.amazon.com/dynamodb/home?#tables:) no console do DynamoDB.

1. Encontre a tabela que o aplicativo criou. O nome começa com **awseb e contém**. **StartupSignupsTable**

1. 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**

1. Abra a [página Topics (Tópicos)](https://console.aws.amazon.com/sns/v2/home?#/topics) no console do Amazon SNS.

1. Encontre o tópico que o aplicativo criou. O nome começa com **awseb e contém**. **NewSignupTopic**

1. Escolha o tópico para visualizar as assinaturas.

O aplicativo (`[app.js](https://github.com/awslabs/eb-node-express-sample/blob/master/app.js)`) define duas rotas. O caminho raiz (`/`) retorna uma página da Web renderizada a partir de um modelo Embedded 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](ebextensions.md) 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
<a name="nodejs-dynamodb-tutorial-database"></a>

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**

1. Abra a [página Tables (Tabelas)](https://console.aws.amazon.com/dynamodb/home?#tables:) no console de gerenciamento do DynamoDB.

1. Escolha **Criar tabela**.

1. Digite um **nome de tabela** e **chave primária**.

1. Escolha o tipo de chave primária.

1. Escolha **Criar**.

## Atualizar os arquivos de configuração do aplicativo
<a name="nodejs-dynamodb-tutorial-update"></a>

Atualize os [arquivos de configuração](ebextensions.md) 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**

1. Altere seu diretório de trabalho atual para o diretório do aplicativo `nodejs-example-dynamo`.

   ```
   ~$ cd nodejs-example-dynamo
   ```

1. Abra `.ebextensions/options.config` e altere os valores das configurações a seguir:
   + **NewSignupEmail**— Seu endereço de e-mail.
   + **STARTUP\$1SIGNUP\$1TABLE**: **nodejs-tutorial**

     
**Example .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`.

1. Remova `.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.

1. Implante o aplicativo atualizado em seu ambiente Elastic Beanstalk com o comando [**eb deploy**](eb3-deploy.md).

   ```
   ~/nodejs-example-dynamo$ eb deploy
   ```

1. Quando a criação do ambiente for concluída, use o comando [**eb open**](eb3-open.md) 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**

1. Abra a [página Tables (Tabelas)](https://console.aws.amazon.com/dynamodb/home?#tables:) no console do DynamoDB.

1. Encontre a tabela **nodejs-tutorial**.

1. 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
<a name="nodejs-dynamodb-tutorial-configure"></a>

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**

1. Abra o console do [Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk e, **na** lista Regiões, selecione sua. Região da AWS

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

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

1. Na categoria de configuração **Capacity (Capacidade)**, escolha **Edit (Editar)**.

1. Na seção **Auto Scaling group (Grupo de Auto Scaling)** defina **Min instances (Mínimo de instâncias)** como **2**.

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

## Limpeza
<a name="nodejs-dynamodb-tutorial-cleanup"></a>

Depois de terminar de trabalhar com o código de demonstração, você pode encerrar seu ambiente. [O Elastic Beanstalk exclui todos os recursos AWS relacionados, [como instâncias da EC2 Amazon](using-features.managing.ec2.md), [instâncias de banco de dados, balanceadores de carga[,](using-features.managing.elb.md)](using-features.managing.db.md) grupos de segurança e alarmes.](using-features.alarms.md#using-features.alarms.title) 

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**

1. Abra o console do [Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk e, **na** lista Regiões, selecione sua. Região da AWS

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

1. Escolha **Actions** (Ações) e depois **Terminate Environment** (Encerrar ambiente).

1. 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**

1. Abra a [página Tables (Tabelas)](https://console.aws.amazon.com/dynamodb/home?#tables:) no console do DynamoDB.

1. Selecione uma tabela.

1. Escolha **Actions** e, em seguida, escolha **Delete table**.

1. Escolha **Excluir**.

## Próximas etapas
<a name="nodejs-dynamodb-tutorial-nextsteps"></a>

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 de ambiente com arquivos de configuração (`.ebextensions`)](ebextensions.md) 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](https://expressjs.com).

Por fim, se você planeja usar seu aplicativo em um ambiente de produção, [configure um nome de domínio personalizado](customdomains.md) para seu ambiente e [habilite o HTTPS](configuring-https.md) para conexões seguras.