

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

# Tutoriais CodeDeploy
<a name="tutorials"></a>

Esta seção inclui alguns tutoriais para ajudá-lo a aprender a usar o CodeDeploy.

Os procedimentos nesses tutoriais fornecem sugestões para a localização na qual armazenar arquivos (por exemplo, c:\$1temp) e os nomes a serem fornecidos aos buckets, subpastas ou arquivos (por exemplo, amzn-s3-demo-bucket, HelloWorldApp e CodeDeployDemo-EC2-Trust.json, respectivamente), mas não é necessário usá-los. Certifique-se de substituir os nomes e locais dos seus arquivos enquanto realiza os procedimentos.

**Topics**
+ [Tutorial: Implante WordPress em uma instância do Amazon EC2 (Amazon Linux ou Red Hat Enterprise Linux e Linux, macOS ou Unix)](tutorials-wordpress.md)
+ [Tutorial: implantar um aplicativo "Hello, World\$1" aplicativo com CodeDeploy (Windows Server)](tutorials-windows.md)
+ [Tutorial: Implantar um aplicativo em uma instância local com CodeDeploy (Windows Server, Ubuntu Server ou Red Hat Enterprise Linux)](tutorials-on-premises-instance.md)
+ [Tutorial: Use CodeDeploy para implantar um aplicativo em um grupo do Auto Scaling](tutorials-auto-scaling-group.md)
+ [Tutorial: Use CodeDeploy para implantar um aplicativo a partir de GitHub](tutorials-github.md)
+ [Tutorial: Implantar um aplicativo no Amazon ECS](tutorial-ecs-deployment.md)
+ [Tutorial: Implantar um serviço do Amazon ECS com um teste de validação](tutorial-ecs-deployment-with-hooks.md)
+ [Tutorial: Implemente uma função Lambda atualizada com o modelo CodeDeploy de aplicativo sem AWS servidor](tutorial-lambda-sam.md)

# Tutorial: Implante WordPress em uma instância do Amazon EC2 (Amazon Linux ou Red Hat Enterprise Linux e Linux, macOS ou Unix)
<a name="tutorials-wordpress"></a>

Neste tutorial, você implanta WordPress uma ferramenta de blog e um sistema de gerenciamento de conteúdo de código aberto baseados em PHP e MySQL em uma única instância do Amazon EC2 executando o Amazon Linux ou o Red Hat Enterprise Linux (RHEL).

Não é o que você está procurando?
+ Para praticar a implantação em uma instância do Amazon EC2 que executa o Windows Server, consulte [Tutorial: implantar um aplicativo "Hello, World\$1" aplicativo com CodeDeploy (Windows Server)](tutorials-windows.md).
+ Para praticar a implantação em uma instância on-premises, em vez de uma instância do Amazon EC2, consulte [Tutorial: Implantar um aplicativo em uma instância local com CodeDeploy (Windows Server, Ubuntu Server ou Red Hat Enterprise Linux)](tutorials-on-premises-instance.md).

As etapas deste tutorial são apresentadas sob a perspectiva de uma máquina de desenvolvimento local executando o Linux, macOS ou Unix. Embora possa concluir a maioria dessas etapas em uma máquina local executando o Windows, você precisa adaptar as etapas que fazem referência a comandos, como **chmod** e **wget**, a aplicativos, como o sed, e a caminhos de diretório, como `/tmp`.

Antes de começar este tutorial, você deve atender aos pré-requisitos em [Começando com CodeDeploy](getting-started-codedeploy.md). Isso inclui configurar um usuário, instalar ou atualizar o AWS CLI e criar um perfil de instância do IAM e uma função de serviço.

**Topics**
+ [Etapa 1: Iniciar e configurar uma instância Amazon Linux ou Red Hat Enterprise Linux Amazon EC2](tutorials-wordpress-launch-instance.md)
+ [Etapa 2: configurar seu conteúdo de origem para ser implantado na instância Amazon Linux ou Red Hat Enterprise Linux instância do Amazon EC2](tutorials-wordpress-configure-content.md)
+ [Etapa 3: Faça o upload do seu WordPress aplicativo para o Amazon S3](tutorials-wordpress-upload-application.md)
+ [Etapa 4: implantar seu WordPress aplicativo](tutorials-wordpress-deploy-application.md)
+ [Etapa 5: atualizar e reimplantar seu aplicativo WordPress](tutorials-wordpress-update-and-redeploy-application.md)
+ [Etapa 6: Limpe seu WordPress aplicativo e os recursos relacionados](tutorials-wordpress-clean-up.md)

# Etapa 1: Iniciar e configurar uma instância Amazon Linux ou Red Hat Enterprise Linux Amazon EC2
<a name="tutorials-wordpress-launch-instance"></a>

Para implantar o WordPress aplicativo CodeDeploy, você precisará de uma instância do Amazon EC2 executando o Amazon Linux ou o Red Hat Enterprise Linux (RHEL). A instância do Amazon EC2 requer uma nova regra de segurança de entrada que permita conexões HTTP. Essa regra é necessária para visualizar a WordPress página em um navegador após sua implantação bem-sucedida.

Siga as instruções em [Crie uma instância do Amazon EC2 para CodeDeploy](instances-ec2-create.md). Quando você chegar na parte dessas instruções sobre como atribuir uma tag de instância do Amazon EC2 à instância, certifique-se de especificar a chave da tag de **Name** e o valor da tag de **CodeDeployDemo**. (Se você especificar uma chave de tag ou um valor de tag diferente, as instruções em [Etapa 4: implantar seu WordPress aplicativo](tutorials-wordpress-deploy-application.md) poderão produzir resultados inesperados.)

Depois de seguir as instruções para iniciar a instância do Amazon EC2, retorne a essa página e continue na próxima seção. Não continue em [Crie um aplicativo com CodeDeploy](applications-create.md) como a próxima etapa.

## Conectar-se à instância do Amazon Linux ou RHEL Amazon EC2
<a name="tutorials-wordpress-launch-instance-connect"></a>

Depois que a sua nova instância do Amazon EC2 for iniciada, siga essas instruções para praticar a conexão com ela.

1. Use o comando **ssh** (ou um emulador de terminal compatível com SSH, como o [PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)) para conectar-se à instância do Amazon EC2 do Amazon Linux ou RHEL. Você precisará do endereço DNS público da instância e da chave privada para o par de chaves usado na inicialização da instância do Amazon EC2. Para obter mais informações, consulte [Conectar-se à sua instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-connect-to-instance-linux.html).

   Por exemplo, se o endereço DNS público for **ec2-01-234-567-890.compute-1.amazonaws.com**, e o par de chaves da sua instância do Amazon EC2 para acesso SSH for denominado **codedeploydemo.pem**, você poderá digitar:

   ```
   ssh -i /path/to/codedeploydemo.pem ec2-user@ec2-01-234-567-890.compute-1.amazonaws.com
   ```

   Substitua `/path/to/codedeploydemo.pem` pelo caminho para o seu arquivo `.pem` e substitua o endereço DNS de exemplo pelo endereço de sua instância do Amazon EC2 do Amazon Linux ou RHEL.
**nota**  
Se receber um erro de que as permissões do seu arquivo de chave são muito abertas, será necessário restringir suas permissões para dar acesso apenas ao usuário atual (você). Por exemplo, com o comando **chmod** no Linux, macOS ou Unix, digite:

   ```
   chmod 400 /path/to/codedeploydemo.pem
   ```

1. Depois de entrar, você verá o banner da AMI da instância do Amazon EC2. Para o Amazon Linux, deve ficar assim:

   ```
          __|  __|_  )
          _|  (     /   Amazon Linux AMI
         ___|\___|___|
   ```

1. Agora, você pode sair da instância do Amazon EC2 em execução.
**Atenção**  
Não interrompa ou encerre a instância do Amazon EC2. Caso contrário, CodeDeploy não será possível implantá-lo.

## Adicione uma regra de entrada que permita tráfego HTTP à instância do Amazon EC2 do Amazon Linux ou do RHEL
<a name="tutorials-wordpress-launch-instance-add-inbound-rule"></a>

A próxima etapa confirma que sua instância do Amazon EC2 tem uma porta HTTP aberta para que você possa ver a página inicial do aplicativo WordPress implantado em um navegador. 

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Escolha **Instâncias** e, em seguida, escolha sua instância. 

1. Na guia **Descrição**, em **Grupos de segurança**, escolha **exibir regras de entrada**. 

   Você deve ver uma lista de regras em seu grupo de segurança como a seguinte:

   ```
   Security Groups associated with i-1234567890abcdef0
    Ports     Protocol     Source     launch-wizard-N
    22        tcp          0.0.0.0/0          ✔
   ```

1.  Em **Grupos de segurança**, escolha o grupo de segurança para a sua instância do Amazon EC2. Ele pode se chamar **launch-wizard-*N***. O ***N*** no nome é um número atribuído ao grupo de segurança quando a instância foi criada. 

    Escolha a guia **Entrada**. Se o grupo de segurança da sua instância está configurado corretamente, você deve ver uma regra com os seguintes valores: 
   + **Tipo:** HTTP
   + **Protocolo**: TCP
   + **Port Range**: 80
   + **Origem**: 0.0.0.0/0

1.  Se você não encontrar uma regra com esses valores, use os procedimentos em [Adicionar regras a um grupo de segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule) para adicioná-las a uma nova regra de segurança. 

# Etapa 2: configurar seu conteúdo de origem para ser implantado na instância Amazon Linux ou Red Hat Enterprise Linux instância do Amazon EC2
<a name="tutorials-wordpress-configure-content"></a>

Agora é hora de configurar o conteúdo de origem do seu aplicativo, para que você tenha algo para implantar na instância.

**Topics**
+ [Obter o código-fonte](#tutorials-wordpress-configure-content-download-code)
+ [Criar scripts para executar seu aplicativo](#tutorials-wordpress-configure-content-create-scripts)
+ [Adicionar um arquivo de especificação de aplicativo](#tutorials-wordpress-configure-content-add-appspec-file)

## Obter o código-fonte
<a name="tutorials-wordpress-configure-content-download-code"></a>

Neste tutorial, você implanta a plataforma de publicação de WordPress conteúdo da sua máquina de desenvolvimento na instância de destino do Amazon EC2. Para obter o WordPress código-fonte, você pode usar chamadas de linha de comando integradas. Ou, se tiver o Git instalado na sua máquina de desenvolvimento, poderá usá-lo como alternativa.

Para essas etapas, presumimos que você baixou uma cópia do WordPress código-fonte para o `/tmp` diretório em sua máquina de desenvolvimento. (É possível escolher qualquer diretório desejado, mas lembre-se de substituir `/tmp` pela localização sempre que esse diretório for especificado nas etapas.)

Escolha uma das duas opções a seguir para copiar os arquivos de WordPress origem para sua máquina de desenvolvimento. A primeira opção usa chamadas integradas de linha de comando. A segunda opção usa o Git.

**Topics**
+ [Para obter uma cópia do WordPress código-fonte (chamadas de linha de comando integradas)](#tutorials-wordpress-configure-content-download-code-command-line)
+ [Para obter uma cópia do WordPress código-fonte (Git)](#tutorials-wordpress-configure-content-download-code-git)

### Para obter uma cópia do WordPress código-fonte (chamadas de linha de comando integradas)
<a name="tutorials-wordpress-configure-content-download-code-command-line"></a>

1. Chame o **wget** comando para baixar uma cópia do WordPress código-fonte, como um arquivo.zip, para o diretório atual:

   ```
   wget https://github.com/WordPress/WordPress/archive/master.zip
   ```

1. Chame os comandos **unzip**, **mkdir**, **cp** e **rm** para:
   + Descompactar o arquivo `master` .zip no `/tmp/WordPress_Temp` diretório (pasta).
   + Copiar seu conteúdo descompactado na pasta de destino `/tmp/WordPress`.
   + Excluir a pasta temporária `/tmp/WordPress_Temp` e o arquivo `master`.

   Execute os comandos um de cada vez:

   ```
   unzip master -d /tmp/WordPress_Temp
   ```

   ```
   mkdir -p /tmp/WordPress
   ```

   ```
   cp -paf /tmp/WordPress_Temp/WordPress-master/* /tmp/WordPress
   ```

   ```
   rm -rf /tmp/WordPress_Temp
   ```

   ```
   rm -f master
   ```

   Isso deixa você com um conjunto limpo de arquivos de WordPress código-fonte na `/tmp/WordPress` pasta.

### Para obter uma cópia do WordPress código-fonte (Git)
<a name="tutorials-wordpress-configure-content-download-code-git"></a>

1. Baixe e instale o [Git](http://git-scm.com) na sua máquina de desenvolvimento.

1. Na pasta `/tmp/WordPress`, chame o comando **git init**. 

1. Chame o **git clone** comando para clonar o WordPress repositório público, fazendo sua própria cópia dele na pasta de `/tmp/WordPress` destino:

   ```
   git clone https://github.com/WordPress/WordPress.git /tmp/WordPress
   ```

   Isso deixa você com um conjunto limpo de arquivos de WordPress código-fonte na `/tmp/WordPress` pasta.

## Criar scripts para executar seu aplicativo
<a name="tutorials-wordpress-configure-content-create-scripts"></a>

Em seguida, crie uma pasta e scripts no diretório. CodeDeploy usa esses scripts para configurar e implantar a revisão do seu aplicativo na instância de destino do Amazon EC2. É possível usar qualquer editor de texto para criar os scripts.

1. Crie um diretório de scripts em sua cópia do WordPress código-fonte:

   ```
   mkdir -p /tmp/WordPress/scripts
   ```

1. Crie um arquivo `install_dependencies.sh` no `/tmp/WordPress/scripts`. Adicione as seguintes linhas ao arquivo. Este script `install_dependencies.sh` instala Apache, MySQL e PHP. Ele também adiciona suporte do MySQL ao PHP.

   ```
   #!/bin/bash
   sudo amazon-linux-extras install php7.4
   sudo yum install -y httpd mariadb-server php
   ```

1. Crie um arquivo `start_server.sh` no `/tmp/WordPress/scripts`. Adicione as seguintes linhas ao arquivo. Este script `start_server.sh` inicia Apache e MySQL.

   ```
   #!/bin/bash
   systemctl start mariadb.service
   systemctl start httpd.service
   systemctl start php-fpm.service
   ```

1. Crie um arquivo `stop_server.sh` no `/tmp/WordPress/scripts`. Adicione as seguintes linhas ao arquivo. Este script `stop_server.sh` para Apache e MySQL.

   ```
   #!/bin/bash
   isExistApp="pgrep httpd"
   if [[ -n $isExistApp ]]; then
   systemctl stop httpd.service
   fi
   isExistApp=pgrep mysqld
   if [[ -n $isExistApp ]]; then
   systemctl stop mariadb.service
   fi
   isExistApp=pgrep php-fpm
   if [[ -n $isExistApp ]]; then
   systemctl stop php-fpm.service
   
   fi
   ```

1. Crie um arquivo `create_test_db.sh` no `/tmp/WordPress/scripts`. Adicione as seguintes linhas ao arquivo. Esse `create_test_db.sh` script usa o MySQL para criar um **test** banco de dados WordPress para uso.

   ```
   #!/bin/bash
   mysql -uroot <<CREATE_TEST_DB
   CREATE DATABASE IF NOT EXISTS test;
   CREATE_TEST_DB
   ```

1. Finalmente, crie um script `change_permissions.sh` em `/tmp/WordPress/scripts`. Ele é usado para alterar as permissões de pastas no Apache.
**Importante**  
 Este script mostra permissões atualizadas na pasta `/tmp/WordPress` para que qualquer pessoa possa gravar nele. Isso é necessário para que ele WordPress possa gravar em seu banco de dados durante[Etapa 5: atualizar e reimplantar seu aplicativo WordPress](tutorials-wordpress-update-and-redeploy-application.md). Depois que o WordPress aplicativo estiver configurado, execute o comando a seguir para atualizar as permissões para uma configuração mais segura:  

   ```
   chmod -R 755 /var/www/html/WordPress
   ```

   ```
   #!/bin/bash
   chmod -R 777 /var/www/html/WordPress
   ```

1. Dê todas as permissões executáveis de scripts. Na linha de comando, digite:

   ```
   chmod +x /tmp/WordPress/scripts/*
   ```

## Adicionar um arquivo de especificação de aplicativo
<a name="tutorials-wordpress-configure-content-add-appspec-file"></a>

Em seguida, adicione um arquivo de especificação do aplicativo (AppSpec arquivo), um arquivo formatado em [YAML](http://www.yaml.org) usado por to: CodeDeploy 
+ Mapear os arquivos de origem na sua revisão de aplicativo para os respectivos destinos na instância do Amazon EC2 de destino.
+ Especificar permissões personalizadas para arquivos implantados.
+ Especificar os scripts a serem executados na instância do Amazon EC2 de destino durante a implantação.

O AppSpec arquivo deve ser nomeado`appspec.yml`. Ele deve ser colocado no diretório raiz do código-fonte do aplicativo. Neste tutorial, o diretório raiz é `/tmp/WordPress`.

Com seu editor de texto, crie um arquivo chamado `appspec.yml`. Adicione as seguintes linhas ao arquivo:

```
version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html/WordPress
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: scripts/change_permissions.sh
      timeout: 300
      runas: root
  ApplicationStart:
    - location: scripts/start_server.sh
    - location: scripts/create_test_db.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 300
      runas: root
```

CodeDeploy usa esse AppSpec arquivo para copiar todos os arquivos da `/tmp/WordPress` pasta na máquina de desenvolvimento para a `/var/www/html/WordPress` pasta na instância do Amazon EC2 de destino. Durante a implantação, CodeDeploy executa os scripts especificados como `root` na `/var/www/html/WordPress/scripts` pasta na instância de destino do Amazon EC2 em eventos específicos durante o ciclo de vida da implantação, como e. **BeforeInstall** **AfterInstall** Se algum desses scripts levar mais de 300 segundos (5 minutos) para ser executado, CodeDeploy interrompe a implantação e marca a implantação como falhada.

Para obter mais informações sobre essas configurações, consulte o [CodeDeploy AppSpec referência de arquivo](reference-appspec-file.md).

**Importante**  
Os locais e números de espaços entre cada um dos itens desse arquivo são importantes. Se o espaçamento estiver incorreto, CodeDeploy gera um erro que pode ser difícil de depurar. Para obter mais informações, consulte [AppSpec Espaçamento de arquivos](reference-appspec-file.md#reference-appspec-file-spacing).

# Etapa 3: Faça o upload do seu WordPress aplicativo para o Amazon S3
<a name="tutorials-wordpress-upload-application"></a>

Agora você preparará e enviará seu conteúdo de origem para um local a partir do qual CodeDeploy possa implantá-lo. As instruções a seguir mostram como provisionar um bucket do Amazon S3, preparar os arquivos da revisão de aplicativo para o bucket, agrupar os arquivos da revisão e, em seguida, enviá-la para esse bucket.

**nota**  
Embora não seja abordado neste tutorial, você pode usá-lo CodeDeploy para implantar aplicativos de GitHub repositórios para instâncias. Para obter mais informações, consulte [Integrando com CodeDeploy GitHub](integrations-partners-github.md).

**Topics**
+ [Provisionar um bucket do Amazon S3](#tutorials-wordpress-upload-application-create-s3-bucket)
+ [Preparar os arquivos do aplicativo para o bucket](#tutorials-wordpress-upload-application-prepare-application-files)
+ [Agrupar os arquivos do aplicativo em um único arquivamento e enviar o arquivamento](#tutorials-wordpress-upload-application-bundle-and-push-archive)

## Provisionar um bucket do Amazon S3
<a name="tutorials-wordpress-upload-application-create-s3-bucket"></a>

Crie um contêiner de armazenamento, ou *bucket*, no Amazon S3, ou use um bucket existente. Certifique-se de que você possa carregar a revisão no bucket e de que as instâncias do Amazon EC2 usadas nas implantações possam baixá-la desse bucket.

Você pode usar o AWS CLI console do Amazon S3 ou o Amazon S3 para criar um bucket do Amazon APIs S3. Depois de criar o bucket, certifique-se de dar permissões de acesso a ele e à sua conta do AWS .

**nota**  
Os nomes dos buckets devem ser exclusivos no Amazon S3 para todas as contas AWS . Se não for possível usar **amzn-s3-demo-bucket**, tente um nome de bucket diferente, como **amzn-s3-demo-bucket**, seguido por um traço e suas iniciais ou algum outro identificador exclusivo. Em seguida, certifique-se de substituir o nome do bucket por **amzn-s3-demo-bucket** sempre que essa identificação aparecer neste tutorial.  
O bucket do Amazon S3 deve ser criado na mesma AWS região em que suas instâncias de destino do Amazon EC2 são lançadas. Por exemplo, se você criar o bucket na região Leste dos EUA (Norte da Virgínia), suas instâncias do Amazon EC2 de destino devem ser lançadas na região Leste dos EUA (Norte da Virgínia).

**Topics**
+ [Como criar um bucket do Amazon S3 (CLI)](#tutorials-wordpress-upload-application-create-s3-bucket-cli)
+ [Como criar um bucket do Amazon S3 (console)](#tutorials-wordpress-upload-application-create-s3-bucket-console)
+ [Conceda permissões ao bucket e à conta do Amazon S3 AWS](#tutorials-wordpress-upload-application-create-s3-bucket-grant-permissions)

### Como criar um bucket do Amazon S3 (CLI)
<a name="tutorials-wordpress-upload-application-create-s3-bucket-cli"></a>

Chame o comando **mb** para criar um bucket do Amazon S3 denominado **amzn-s3-demo-bucket**:

```
aws s3 mb s3://amzn-s3-demo-bucket --region region
```

### Como criar um bucket do Amazon S3 (console)
<a name="tutorials-wordpress-upload-application-create-s3-bucket-console"></a>

1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No console do Amazon S3, escolha **Criar bucket**.

1. Na caixa **Nome do bucket**, digite um nome para o bucket.

1. Na lista **Região**, escolha a região de destino e escolha **Criar**.

### Conceda permissões ao bucket e à conta do Amazon S3 AWS
<a name="tutorials-wordpress-upload-application-create-s3-bucket-grant-permissions"></a>

Você deve ter permissões para fazer upload no bucket do Amazon S3. Você pode especificar essas permissões por meio de uma política de bucket do Amazon S3. Por exemplo, na seguinte política de bucket do Amazon S3, o uso do caractere curinga (\$1) permite que `111122223333` a AWS conta faça upload de arquivos para qualquer diretório no bucket do Amazon S3 chamado: `amzn-s3-demo-bucket`

```
{
    "Statement": [
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "111122223333"
                ]
            }
        }
    ]
}
```

Para ver o ID AWS da sua conta, consulte [Encontrando o ID AWS da sua conta](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId).

Agora é um bom momento para verificar se o bucket do Amazon S3 permitirá solicitações de download de cada instância participante do Amazon EC2. É possível especificar isso por meio de uma política do bucket do Amazon S3. Por exemplo, na seguinte política de bucket do Amazon S3, usar o caractere curinga (\$1) permite que qualquer instância do Amazon EC2 com um perfil de instância anexado do IAM contendo o ARN `arn:aws:iam::444455556666:role/CodeDeployDemo` faça o download de arquivos de qualquer diretório no bucket do Amazon S3 chamado de `amzn-s3-demo-bucket`:

```
{
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/CodeDeployDemo"
                ]
            }
        }
    ]
}
```

 Para obter informações sobre como gerar e anexar uma política de bucket do Amazon S3, consulte [Exemplos de políticas de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html).

Para obter informações sobre como criar e anexar uma política do IAM, consulte [Trabalhando com políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html#AddingPermissions_Console).

## Preparar os arquivos do aplicativo para o bucket
<a name="tutorials-wordpress-upload-application-prepare-application-files"></a>

Certifique-se de que os arquivos do WordPress aplicativo, o AppSpec arquivo e os scripts estejam organizados em sua máquina de desenvolvimento de forma semelhante à seguinte:

```
/tmp/
  |--WordPress/
      |-- appspec.yml  
      |-- scripts/
      |    |-- change_permissions.sh
      |    |-- create_test_db.sh
      |    |-- install_dependencies.sh
      |    |-- start_server.sh
      |    |-- stop_server.sh
      |-- wp-admin/
      |    |-- (various files...)
      |-- wp-content/
      |    |-- (various files...)
      |-- wp-includes/
      |    |-- (various files...)
      |-- index.php
      |-- license.txt
      |-- readme.html
      |-- (various files ending with .php...)
```

## Agrupar os arquivos do aplicativo em um único arquivamento e enviar o arquivamento
<a name="tutorials-wordpress-upload-application-bundle-and-push-archive"></a>

Agrupe os arquivos do WordPress aplicativo e o AppSpec arquivo em um arquivo compactado (conhecido como *revisão* do aplicativo).

**nota**  
Você pode ser cobrado por armazenar objetos em um bucket e por transferir revisões de aplicativos para dentro e fora de um bucket. Para obter mais informações, consulte [Preço do Amazon S3](https://aws.amazon.com/s3/pricing/). 

1. Na máquina de desenvolvimento, mude para a pasta na qual os arquivos estão armazenados: 

   ```
   cd /tmp/WordPress
   ```
**nota**  
Se você não mudar para essa pasta, o empacotamento de arquivos começará na sua pasta atual. Por exemplo, se a sua pasta atual for `/tmp` em vez de `/tmp/WordPress`, o empacotamento começará com arquivos e subpastas na pasta `tmp`, o que pode incluir mais do que a subpasta `WordPress`.

1. Chame o comando **create-application** para registrar um novo aplicativo denominado **WordPress\$1App**:

   ```
   aws deploy create-application --application-name WordPress_App
   ```

1. Chame o comando CodeDeploy [push](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html) para agrupar os arquivos, fazer o upload das revisões para o Amazon S3 e registrar informações sobre a revisão CodeDeploy carregada, tudo em uma única ação. 

   ```
   aws deploy push \
     --application-name WordPress_App \
     --s3-location s3://amzn-s3-demo-bucket/WordPressApp.zip \
     --ignore-hidden-files
   ```

   Esse comando agrupa os arquivos do diretório atual (excluindo os arquivos ocultos) em um único arquivo chamado**WordPressApp.zip**, carrega a revisão no **amzn-s3-demo-bucket** bucket e registra as informações CodeDeploy sobre a revisão carregada.

# Etapa 4: implantar seu WordPress aplicativo
<a name="tutorials-wordpress-deploy-application"></a>

Agora você implanta o exemplo de revisão do WordPress aplicativo que você carregou no Amazon S3. Você pode usar o console AWS CLI ou o CodeDeploy console para implantar a revisão e monitorar o progresso da implantação. Depois que a revisão do aplicativo for implementada com êxito, confira os resultados.

**Topics**
+ [Implante a revisão do seu aplicativo com CodeDeploy](#tutorials-wordpress-deploy-application-create-deployment)
+ [Monitorar sua implantação e solucionar problemas relacionados](#tutorials-wordpress-deploy-application-monitor)
+ [Verificar sua implantação](#tutorials-wordpress-deploy-application-verify-deployment)

## Implante a revisão do seu aplicativo com CodeDeploy
<a name="tutorials-wordpress-deploy-application-create-deployment"></a>

Use o console AWS CLI ou o console para implantar a revisão do seu aplicativo.

**Topics**
+ [Para implantar sua revisão de aplicativo (CLI)](#tutorials-wordpress-deploy-application-create-deployment-cli)
+ [Para implantar sua revisão de aplicativo (console)](#tutorials-wordpress-deploy-application-create-deployment-console)

### Para implantar sua revisão de aplicativo (CLI)
<a name="tutorials-wordpress-deploy-application-create-deployment-cli"></a>

1. A implantação precisa de um grupo de implantação. No entanto, antes de criar o grupo de implantação, você precisa de um ARN de um perfil de serviço. Um perfil de serviço é um perfil do IAM que dá a um serviço permissão para agir em seu nome. Nesse caso, a função de serviço dá CodeDeploy permissão para acessar suas instâncias do Amazon EC2 para expandir (ler) suas tags de instância do Amazon EC2.

   Você já deve ter seguido as instruções em [Criar um perfil de serviço (CLI)](getting-started-create-service-role.md#getting-started-create-service-role-cli) para criar um perfil de serviço. Para obter o ARN do perfil de serviço, consulte [Obter o ARN do perfil de serviço (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli).

1. Agora que você tem o ARN do perfil de serviço, chame o comando **create-deployment-group** para criar um grupo de implantação chamado **WordPress\$1DepGroup**, associado ao aplicativo chamado **WordPress\$1App**, usando a tag do Amazon EC2 chamada **CodeDeployDemo** e a configuração de implantação chamada **CodeDeployDefault.OneAtATime**:

   ```
   aws deploy create-deployment-group \
     --application-name WordPress_App \
     --deployment-group-name WordPress_DepGroup \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --ec2-tag-filters Key=Name,Value=CodeDeployDemo,Type=KEY_AND_VALUE \
     --service-role-arn serviceRoleARN
   ```

   
**nota**  
O [create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html)comando fornece suporte para a criação de acionadores que resultam no envio de notificações do Amazon SNS aos assinantes do tópico sobre eventos específicos em implantações e instâncias. O comando também oferece suporte a opções para reverter automaticamente as implantações e configurar alarmes para interromper as implantações quando os limites de monitoramento nos alarmes da CloudWatch Amazon forem atingidos. Os comandos para essas ações não estão incluídos neste tutorial.

1. Antes de criar uma implantação, as instâncias do seu grupo de implantação devem ter o CodeDeploy agente instalado. Você pode instalar o agente a partir da linha de comando do AWS Systems Manager , com o seguinte comando:

   ```
   aws ssm create-association \
     --name AWS-ConfigureAWSPackage \
     --targets Key=tag:Name,Values=CodeDeployDemo \
     --parameters action=Install,name=AWSCodeDeployAgent \
     --schedule-expression "cron(0 2 ? * SUN *)"
   ```

   Esse comando cria uma associação no Systems Manager State Manager que instalará o CodeDeploy agente e tentará atualizá-lo às 2:00 de cada manhã de domingo. Para obter mais informações sobre o CodeDeploy agente, consulte [Trabalhando com o CodeDeploy agente](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html). Para obter mais informações sobre o Systems Manager, consulte [O que é o AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html).

1. Agora, chame o comando **create-deployment** para criar uma implantação associada ao aplicativo **WordPress\$1App**, a configuração de implantação **CodeDeployDefault.OneAtATime** e o grupo de implantação **WordPress\$1DepGroup**, usando a revisão de aplicativo **WordPressApp.zip** no bucket **amzn-s3-demo-bucket**:

   ```
   aws deploy create-deployment \
     --application-name WordPress_App \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name WordPress_DepGroup \
     --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=WordPressApp.zip
   ```

### Para implantar sua revisão de aplicativo (console)
<a name="tutorials-wordpress-deploy-application-create-deployment-console"></a>

1. Antes de usar o CodeDeploy console para implantar a revisão do aplicativo, você precisa de um ARN de função de serviço. Um perfil de serviço é um perfil do IAM que dá a um serviço permissão para agir em seu nome. Nesse caso, a função de serviço dá CodeDeploy permissão para acessar suas instâncias do Amazon EC2 para expandir (ler) suas tags de instância do Amazon EC2.

   Você já deve ter seguido as instruções em [Criar um perfil de serviço (console)](getting-started-create-service-role.md#getting-started-create-service-role-console) para criar um perfil de serviço. Para obter o ARN do perfil de serviço, consulte [Obter o ARN do perfil de serviço (console)](getting-started-create-service-role.md#getting-started-get-service-role-console).

1. Agora que você tem o ARN, use o CodeDeploy console para implantar a revisão do seu aplicativo:

   Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicações**.

1. Na lista de aplicativos, escolha **WordPress\$1App**.

1. Na guia **Grupos de implantação**, selecione **Criar um grupo de implantação**.

1. Em **Nome do grupo de implantação**, insira **WordPress\$1DepGroup**.

1. Em **Deployment type**, escolha **In-place deployment**.

1. Em **Configuração do ambiente**, selecione **Instâncias do Amazon EC2**.

1. Em **Configuração do agente com AWS Systems Manager**, mantenha os padrões.

1. Em **Chave**, insira **Name**.

1. Em **Valor**, informe **CodeDeployDemo**.
**nota**  
Depois de digitar**CodeDeployDemo**, um **1** deve aparecer em **Matching instances** para confirmar que CodeDeploy encontrou uma instância correspondente do Amazon EC2.

1. Em **Configuração de implantação**, escolha **CodeDeployDefault. OneAtATime**.

1. Em **Service role ARN (ARN da função de serviço)**, selecione o ARN da função de serviço e, em seguida, escolha **Create deployment group (Criar grupo de implantação)**.

1. Escolha **Criar implantação**.

1. Em **Deployment group (Grupo de implantação)**, selecione **WordPress\$1DepGroup**.

1. Ao lado de **Tipo de repositório**, selecione **Meu aplicativo está armazenado no Amazon S3**. Em **Local da revisão**, insira o local do exemplo de revisão do WordPress aplicativo que você enviou anteriormente para o Amazon S3. Para obter a localização:

   1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. Na lista de buckets, selecione **amzn-s3-demo-bucket** (ou o nome do bucket no qual você fez upload da sua revisão de aplicação). 

   1. Na lista de objetos, escolha **WordPressApp.zip.**

   1. Na guia **Visão geral**, copie o valor do campo **Link** na área de transferência.

      A aparência pode ser semelhante a esta:

      **https://s3.amazonaws.com/amzn-s3-demo-bucket/WordPressApp.zip**

   1. Retorne ao CodeDeploy console e, em **Local da revisão**, cole o valor do campo **Link**.

1. Se uma mensagem aparecer na lista **File type** (Tipo de arquivo), indicando que o tipo de arquivo não pôde ser detectado, escolha **.zip**.

1. (Opcional) Digite um comentário na caixa **Deployment description**. 

1. **Expanda **Substituições de grupos de implantação** e, em **Configuração de implantação, escolha**. CodeDeployDefault OneAtATime**.

1. Selecione **Iniciar implantação**. As informações sobre a implantação recém-criada aparecem na página **Implantações**.

## Monitorar sua implantação e solucionar problemas relacionados
<a name="tutorials-wordpress-deploy-application-monitor"></a>

Use o console AWS CLI ou o console para monitorar e solucionar problemas de sua implantação.

**Topics**
+ [Para monitorar e solucionar problemas de implantação (CLI)](#tutorials-wordpress-deploy-application-monitor-cli)
+ [Para monitorar e solucionar problemas de implantação (console)](#tutorials-wordpress-deploy-application-monitor-console)

### Para monitorar e solucionar problemas de implantação (CLI)
<a name="tutorials-wordpress-deploy-application-monitor-cli"></a>

1. Obtenha o ID de implantação chamando o comando **list-deployments** para o aplicativo chamado **WordPress\$1App** e o grupo de implantação chamado **WordPress\$1DepGroup**:

   ```
   aws deploy list-deployments --application-name WordPress_App --deployment-group-name WordPress_DepGroup --query 'deployments' --output text
   ```

1. Chame o comando **get-deployment** com o ID da implantação:

   ```
   aws deploy get-deployment --deployment-id deploymentID --query 'deploymentInfo.status' --output text
   ```

1. O comando retorna o status geral da implantação. Se a implantação for bem-sucedida, o valor será `Succeeded`.

   Se o status geral for `Failed`, você poderá chamar comandos como [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) e [get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) para solucionar problemas. Para mais opções de solução de problemas, consulte [Analisando arquivos de log para investigar falhas de implantação em instâncias](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures).

### Para monitorar e solucionar problemas de implantação (console)
<a name="tutorials-wordpress-deploy-application-monitor-console"></a>

Na página **Implantações** no CodeDeploy console, você pode monitorar o status da sua implantação na coluna **Status**.

Para obter mais informações sobre a implantação, especialmente se o valor da coluna **Status** tiver qualquer outro valor que não **Succeeded**:

1. Na tabela **Deployments (Implantações)**, selecione o nome da implantação. Depois que uma implantação falhar, uma mensagem descrevendo o motivo da falha será exibida.

1. Na **Instance activity (Atividade da instância)**, mais informações sobre a implantação são exibidas. Depois que uma implantação apresentar falha, você possivelmente conseguirá determinar em quais instâncias do Amazon EC2 e em qual etapa ocorreu a falha.

1. Se quiser realizar outros procedimentos de solução de problemas, use uma técnica como a descrita em [Visualizar detalhes da instância com o CodeDeploy](instances-view-details.md). Você também pode analisar os arquivos de log de implantação em uma instância do Amazon EC2. Para obter mais informações, consulte [Analisando arquivos de log para investigar falhas de implantação em instâncias](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures).

## Verificar sua implantação
<a name="tutorials-wordpress-deploy-application-verify-deployment"></a>

Depois que sua implantação for bem-sucedida, verifique se WordPress a instalação está funcionando. Use o endereço DNS público da instância do Amazon EC2, seguido por `/WordPress`, para visualizar seu site em um navegador da Web. (Para obter o valor DNS público, no console do Amazon EC2, escolha a instância do Amazon EC2 e, na guia **Descrição**, procure o valor de **DNS público**.)

Por exemplo, se o endereço DNS público da sua instância do Amazon EC2 for **ec2-01-234-567-890.compute-1.amazonaws.com**, você usará o seguinte URL:

```
http://ec2-01-234-567-890.compute-1.amazonaws.com/WordPress
```

Ao visualizar o site em seu navegador, você deve ver uma página de WordPress boas-vindas semelhante à seguinte:

![\[WordPress página de boas-vindas\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/WordPress-Welcome-Page-013118.png)


 Se sua instância do Amazon EC2 não tiver uma regra de entrada HTTP adicionada ao seu grupo de segurança, a página de WordPress boas-vindas não aparecerá. Se aparecer uma mensagem indicando que o servidor remoto não está respondendo, certifique-se de que o grupo de segurança de sua instância do Amazon EC2 tenha a regra de entrada. Para obter mais informações, consulte [Adicione uma regra de entrada que permita tráfego HTTP à instância do Amazon EC2 do Amazon Linux ou do RHELAdicionar uma regra de entrada que permita tráfego HTTP à instância do Amazon EC2 do Windows Server.](tutorials-wordpress-launch-instance.md#tutorials-wordpress-launch-instance-add-inbound-rule). 

# Etapa 5: atualizar e reimplantar seu aplicativo WordPress
<a name="tutorials-wordpress-update-and-redeploy-application"></a>

Agora que você implantou com sucesso a revisão do aplicativo, atualize o WordPress código na máquina de desenvolvimento e use-o CodeDeploy para reimplantar o site. Em seguida, você deve ver as alterações de código na instância do Amazon EC2.

**Topics**
+ [Configurar o WordPress site](#tutorials-wordpress-update-and-redeploy-application-configure-and-install)
+ [Modificar o site](#tutorials-wordpress-update-and-redeploy-application-modify-code)
+ [Reimplantar o site](#tutorials-wordpress-update-and-redeploy-application-deploy-updates)

## Configurar o WordPress site
<a name="tutorials-wordpress-update-and-redeploy-application-configure-and-install"></a>

Para ver os efeitos da alteração do código, conclua a configuração do WordPress site para que você tenha uma instalação totalmente funcional.

1. Digite a URL do seu site no navegador. A URL é o endereço DNS público da instância do Amazon EC2 mais a extensão `/WordPress`. Para este WordPress site de exemplo (e exemplo de endereço DNS público da instância Amazon EC2), a URL é. **http://ec2-01-234-567-890.compute-1.amazonaws.com/WordPress**

1. Se você ainda não configurou o site, a página de boas-vindas WordPress padrão é exibida. Escolha **Let's go\$1**.

1. Na página de configuração do banco de dados, digite os seguintes valores para usar o banco de dados MySQL padrão:
   + **Nome do banco de dados**: **test**
   + **Nome de usuário**: **root**
   + **Senha**: deixe em branco.
   + **Host do banco de dados**: **localhost**
   + **Prefixo da tabela**: **wp\$1**

   Escolha **Submit** para configurar o banco de dados.

1. Continue a configuração do site. Na página de **boas-vindas**, preencha os valores desejados e escolha **Instalar WordPress**. Quando a instalação estiver concluída, faça login no seu painel.

**Importante**  
 Durante a implantação do WordPress aplicativo, o **change\$1permissions.sh** script atualizou as permissões da `/tmp/WordPress` pasta para que qualquer pessoa possa gravar nela. Agora é um bom momento para executar o comando a seguir e restringir permissões para que apenas você, o proprietário, possa gravar nele:  

```
chmod -R 755 /var/www/html/WordPress
```

## Modificar o site
<a name="tutorials-wordpress-update-and-redeploy-application-modify-code"></a>

Para modificar o WordPress site, acesse a pasta do aplicativo em sua máquina de desenvolvimento:

```
cd /tmp/WordPress
```

Para modificar algumas das cores do site, no arquivo `wp-content/themes/twentyfifteen/style.css`, use um editor de texto ou **sed** para alterar `#fff` para `#768331`. 

No Linux ou outros sistemas com o GNU **sed**, use:

```
sed -i 's/#fff/#768331/g' wp-content/themes/twentyfifteen/style.css
```

No macOS, Unix ou outros sistemas com o BSD **sed**, use:

```
sed -i '' 's/#fff/#768331/g' wp-content/themes/twentyfifteen/style.css
```

## Reimplantar o site
<a name="tutorials-wordpress-update-and-redeploy-application-deploy-updates"></a>

Agora que você modificou o código do site, use o Amazon S3 CodeDeploy para reimplantar o site.

Agrupe e carregue as alterações no Amazon S3, conforme descrito em [Agrupar os arquivos do aplicativo em um único arquivamento e enviar o arquivamento](tutorials-wordpress-upload-application.md#tutorials-wordpress-upload-application-bundle-and-push-archive). (Ao seguir essas instruções, lembre-se de que não é necessário criar um aplicativo.) Especifique a mesma chave de antes para a nova revisão (**WordPressApp.zip**). Faça upload dela no mesmo bucket do Amazon S3 criado anteriormente (por exemplo, **amzn-s3-demo-bucket**).

Use o AWS CLI, o CodeDeploy console ou o CodeDeploy APIs para reimplantar o site.

**Topics**
+ [Para redistribuir o site (CLI)](#tutorials-wordpress-update-and-redeploy-application-deploy-updates-cli)
+ [Para reimplantar o site (console)](#tutorials-wordpress-update-and-redeploy-application-deploy-updates-console)

### Para redistribuir o site (CLI)
<a name="tutorials-wordpress-update-and-redeploy-application-deploy-updates-cli"></a>

Chame o comando **create-deployment** para criar uma implantação com base na revisão recém-carregada. Use o aplicativo **WordPress\$1App**, a configuração de implantação **CodeDeployDefault.OneAtATime**, o grupo de implantação **WordPress\$1DepGroup**, e a revisão **WordPressApp.zip** no bucket **amzn-s3-demo-bucket**:

```
 aws deploy create-deployment \
  --application-name WordPress_App \
  --deployment-config-name CodeDeployDefault.OneAtATime \
  --deployment-group-name WordPress_DepGroup \  
  --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=WordPressApp.zip
```

Você pode verificar o status da implantação conforme descrito em [Monitorar sua implantação e solucionar problemas relacionados](tutorials-wordpress-deploy-application.md#tutorials-wordpress-deploy-application-monitor).

Depois CodeDeploy de reimplantar o site, visite novamente o site em seu navegador para verificar se as cores foram alteradas. (Talvez seja necessário atualizar o navegador.) Se as cores mudaram, parabéns\$1 Você modificou e reimplantou seu site com sucesso\$1

### Para reimplantar o site (console)
<a name="tutorials-wordpress-update-and-redeploy-application-deploy-updates-console"></a>

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicações**.

1. Na lista de aplicativos, escolha **WordPress\$1App**.

1. Na guia **Grupos de implantação**, escolha **WordPress\$1DepGroup**.

1. Escolha **Criar implantação**. 

1. Na página **Create deployment**:

   1. Em **Deployment group (Grupo de implantação)**, selecione **WordPress\$1DepGroup**.

   1. Na área **Tipo de repositório**, selecione **Meu aplicativo está armazenado no Amazon S3** e copie o link do Amazon S3 da revisão para a caixa **Local de revisão**. Para encontrar o valor do link: 

      1. Em uma guia separada do navegador:

         Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

          Navegue até **amzn-s3-demo-bucket**, abra-o e, depois, selecione sua revisão: **WordPressApp.zip**. 

      1.  Se o painel **Propriedades** não estiver visível no console do Amazon S3, escolha o botão **Propriedades**. 

      1.  No painel **Propriedades**, copie o valor do campo **Link** na caixa **Local da revisão** no CodeDeploy console. 

   1. Se uma mensagem aparecer informando que o tipo de arquivo não pôde ser detectado, escolha **.zip**. 

   1. Deixe a caixa **Descrição da implantação** em branco.

   1. **Expanda as **substituições do grupo de implantação** e, em **Configuração de implantação, escolha**. CodeDeployDefault OneAtATime**.

   1. Selecione **Iniciar implantação**. As informações sobre a implantação recém-criada aparecem na página **Implantações**.

   1. Você pode verificar o status da implantação conforme descrito em [Monitorar sua implantação e solucionar problemas relacionados](tutorials-wordpress-deploy-application.md#tutorials-wordpress-deploy-application-monitor).

      Depois CodeDeploy de reimplantar o site, visite novamente o site em seu navegador para verificar se as cores foram alteradas. (Talvez seja necessário atualizar o navegador.) Se as cores mudaram, parabéns\$1 Você modificou e reimplantou seu site com sucesso\$1

# Etapa 6: Limpe seu WordPress aplicativo e os recursos relacionados
<a name="tutorials-wordpress-clean-up"></a>

Agora você atualizou o WordPress código com sucesso e reimplantou o site. Para evitar cobranças contínuas pelos recursos criados para este tutorial, você deve excluir o seguinte:
+ Qualquer CloudFormation pilha (ou encerre qualquer instância do Amazon EC2, se você as criou fora do). CloudFormation
+ Qualquer bucket do Amazon S3.
+ O aplicativo `WordPress_App` no CodeDeploy.
+ A associação AWS Systems Manager do gerente estadual para o CodeDeploy agente.

Você pode usar o AWS CLI, o CloudFormation, o Amazon S3, o Amazon EC2 CodeDeploy e os consoles, ou AWS APIs o para realizar a limpeza.

**Topics**
+ [Para limpar recursos (CLI)](#tutorials-wordpress-clean-up-cli)
+ [Para limpar recursos (console)](#tutorials-wordpress-clean-up-console)
+ [Próximas etapas](#tutorials-wordpress-clean-up-whats-next)

## Para limpar recursos (CLI)
<a name="tutorials-wordpress-clean-up-cli"></a>

1. Se você usou nosso CloudFormation modelo para este tutorial, chame o **delete-stack** comando na pilha chamada**CodeDeployDemoStack**. Isso encerrará todas as instâncias do Amazon EC2 acompanhantes e excluirá todos os perfis do IAM acompanhantes que essa pilha criou:

   ```
   aws cloudformation delete-stack --stack-name CodeDeployDemoStack
   ```

1. Para excluir o bucket do Amazon S3, chame o comando **rm** com a opção **--recursive** para o bucket denominado **amzn-s3-demo-bucket**. Isso excluirá o bucket e todos os seus objetos:

   ```
   aws s3 rm s3://amzn-s3-demo-bucket --recursive --region region
   ```

1. Para excluir o aplicativo `WordPress_App`, chame o comando **delete-application**. Isso também excluirá todos os registros do grupo de implantação associados e os registros de implantação do aplicativo:

   ```
   aws deploy delete-application --application-name WordPress_App
   ```

1. Para excluir a associação do gerenciador de estados do Systems Manager, chame o comando **delete-association**.

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   Você pode obter o *association-id* chamando o **describe-association** comando.

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

Se você não usou a CloudFormation pilha para este tutorial, chame o **terminate-instances** comando para encerrar todas as instâncias do Amazon EC2 que você criou manualmente. Forneça o ID da instância do Amazon EC2 a ser encerrada:

```
aws ec2 terminate-instances --instance-ids instanceId
```

## Para limpar recursos (console)
<a name="tutorials-wordpress-clean-up-console"></a>

Se você usou nosso CloudFormation modelo para este tutorial, exclua a CloudFormation pilha associada.

1. Faça login no Console de gerenciamento da AWS e abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na caixa **Filtro**, digite o nome da CloudFormation pilha que você criou anteriormente (por exemplo,**CodeDeployDemoStack**).

1. Marque a caixa ao lado do nome da pilha. No menu **Ações**, escolha **Excluir pilha**.

   CloudFormation exclui a pilha, encerra todas as instâncias acompanhantes do Amazon EC2 e exclui todas as funções do IAM associadas.

Para encerrar instâncias do Amazon EC2 que você criou fora de CloudFormation uma pilha:

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Na lista **INSTÂNCIAS**, escolha **Instâncias**.

1. Na caixa de pesquisa, digite o nome da instância do Amazon EC2 que você deseja encerrar (por exemplo, **CodeDeployDemo**) e depois pressione Enter.

1. Escolha o nome da instância do Amazon EC2

1. No menu **Ações**, selecione **Estado da instância** e escolha **Encerrar**. Quando solicitado, escolha **Sim, Encerrar**. 

Repita essas etapas para cada instância.

Para excluir o bucket do Amazon S3:

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Na lista de buckets, navegue e escolha o nome do bucket do Amazon S3 que você criou anteriormente (por exemplo, **amzn-s3-demo-bucket**).

1. Antes de poder excluir um bucket, você deve excluir seu conteúdo. Selecione todos os arquivos no bucket, como **WordPressApp.zip**. No menu **Ações**, escolha **Excluir**. Quando solicitado a confirmar a exclusão, escolha **OK**. 

1. Depois que o bucket estiver vazio, você poderá excluí-lo. Na lista de buckets, escolha a linha do bucket (mas não o nome do bucket). Escolha **Excluir bucket** e quando solicitado a confirmar, escolha **OK**. 

Para excluir o `WordPress_App` aplicativo de CodeDeploy:

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicações**.

1. Na lista de aplicativos, escolha **WordPress\$1App**.

1. Na página **Detalhes da aplicação**, escolha **Excluir aplicativo**.

1. Quando solicitado, digite o nome do aplicativo para confirmar que você deseja excluí-lo e, em seguida, escolha **Excluir**. 

Para excluir a associação do gerenciador de estados do Systems Manager:

1. Abra o AWS Systems Manager console em https://console.aws.amazon.com /systems-manager.

1. No painel de navegação, escolha **State Manager**.

1. Escolha a associação criada e selecione **Excluir**.

## Próximas etapas
<a name="tutorials-wordpress-clean-up-whats-next"></a>

Se você chegou até aqui, parabéns\$1 Você concluiu com êxito uma implantação do CodeDeploy e, depois, atualizou o código do seu site e o reimplantou. 

# Tutorial: implantar um aplicativo "Hello, World\$1" aplicativo com CodeDeploy (Windows Server)
<a name="tutorials-windows"></a>

Neste tutorial, você implanta uma única página da web em uma única instância do Amazon EC2 do Windows Server que executa o IIS (Serviços de Informações da Internet) como seu servidor web. Essa página da web exibe um "Hello, World\$1" simples mensagem.

Não é o que você está procurando?
+ Em vez disso, para praticar a implantação em uma instância Amazon EC2 do Amazon Linux ou Red Hat Enterprise Linux (RHEL), consulte [Tutorial: Implante WordPress em uma instância do Amazon EC2 (Amazon Linux ou Red Hat Enterprise Linux e Linux, macOS ou Unix)](tutorials-wordpress.md).
+ Para praticar a implantação em uma instância local, consulte [Tutorial: Implantar um aplicativo em uma instância local com CodeDeploy (Windows Server, Ubuntu Server ou Red Hat Enterprise Linux)](tutorials-on-premises-instance.md).

As etapas deste tutorial são apresentadas sob a perspectiva do Windows. Embora você possa concluir a maioria dessas etapas em uma máquina local executando o Linux, macOS ou Unix, é necessário adaptar as etapas que fazem referência a caminhos de diretório baseados no Windows, como `c:\temp`. Além disso, se quiser se conectar à instância do Amazon EC2, você precisará de um aplicativo cliente que possa conectar via protocolo RDP à instância do Amazon EC2 que executa o Windows Server. (O Windows inclui um aplicativo cliente de conexão RDP por padrão.)

Antes de começar este tutorial, você deve preencher os pré-requisitos[Começando com CodeDeploy](getting-started-codedeploy.md), incluindo configurar seu usuário, instalar ou atualizar o e criar um perfil de instância do AWS CLI IAM e uma função de serviço.

**Topics**
+ [Etapa 1: execute uma instância do Amazon EC2 do Windows Server](tutorials-windows-launch-instance.md)
+ [Etapa 2: configurar seu conteúdo de origem para implantar na instância do Amazon EC2 do Windows Server](tutorials-windows-configure-content.md)
+ [Etapa 3: carregar seu aplicativo "Hello, World\$1" no Amazon S3](tutorials-windows-upload-application.md)
+ [Etapa 4: implantar seu aplicativo Hello World](tutorials-windows-deploy-application.md)
+ [Etapa 5: atualizar e reimplantar o aplicativo "Hello, World\$1" aplicação](tutorials-windows-update-and-redeploy-application.md)
+ [Etapa 6: limpar seu aplicativo "Hello, World\$1" e os recursos relacionados](tutorials-windows-clean-up.md)

# Etapa 1: execute uma instância do Amazon EC2 do Windows Server
<a name="tutorials-windows-launch-instance"></a>

Para implantar o aplicativo Hello World com CodeDeploy, você precisa de uma instância do Amazon EC2 executando o Windows Server.

Siga as instruções em [Crie uma instância do Amazon EC2 para CodeDeploy](instances-ec2-create.md). Quando estiver pronto para atribuir uma tag de instância do Amazon EC2 à instância, especifique a chave da tag de **Name** e o valor da tag de **CodeDeployDemo** (Se você especificar uma chave de tag ou um valor de tag diferente, as instruções em [Etapa 4: implantar seu aplicativo Hello World](tutorials-windows-deploy-application.md) poderão produzir resultados inesperados.)

Depois de iniciar a instância do Amazon EC2, retorne a essa página e continue na próxima seção. Não continue em [Crie um aplicativo com CodeDeploy](applications-create.md) como próxima etapa.

## Conecte-se à sua instância Amazon EC2
<a name="tutorials-windows-launch-instance-connect"></a>

Depois que a sua instância do Amazon EC2 for iniciada, siga essas instruções para praticar a conexão com ela. 

**nota**  
Nestas instruções, partimos do princípio de que você esteja executando o Windows e o aplicativo cliente de Conexão de Área de Trabalho do Windows. Para obter informações, consulte [Estabelecendo uma conexão com a sua instância do Windows usando o RDP](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html). Talvez seja necessário adaptar essas instruções para outros sistemas operacionais ou outros aplicativos cliente de conexão RDP.

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. No painel de navegação, em **Instâncias**, escolha **Instâncias**. 

1. Navegue e escolha sua instância do Windows Server na lista.

1. Selecione **Conectar**.

1. Selecione **Get Password (Obter senha)** e, em seguida, selecione **Choose File (Selecionar arquivo)**.

1. Procure e escolha o arquivo de par de chaves da instância do Amazon EC2 associado à instância do Amazon EC2 no Windows Server e escolha **Abrir**.

1. Escolha **Decrypt Password**. Anote a senha que é exibida. Você vai precisar dele na etapa 10.

1. Escolha **Download Remote Desktop File** e abra o arquivo.

1. Se você for solicitado a se conectar, continue mesmo que o editor da conexão remota não possa ser identificado.

1. Digite a senha que você anotou na etapa 7 e continue. (Se seu aplicativo cliente de conexão RDP solicitar um nome de usuário, digite **Administrator**.)

1. Se você for solicitado a se conectar, continue mesmo que a identidade do computador remoto não possa ser verificada. 

1. Quando você estiver conectado, a área de trabalho da instância do Amazon EC2 que executa o Windows Server será exibida.

1. Agora você pode desconectar-se da instância do Amazon EC2.
**Atenção**  
Não interrompa ou encerre a instância. Caso contrário, não será CodeDeploy possível implantá-lo.

## Adicionar uma regra de entrada que permita tráfego HTTP à instância do Amazon EC2 do Windows Server.
<a name="tutorials-windows-launch-instance-add-inbound-rule"></a>

A próxima etapa confirma se a instância do Amazon EC2 tem uma porta HTTP aberta para que você possa ver a página da web implantada em sua instância do Amazon EC2 do Windows Server em um navegador. 

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Escolha **Instâncias** e, em seguida, escolha sua instância. 

1. Na guia **Descrição**, em **Grupos de segurança**, escolha **exibir regras de entrada**. 

   Você deve ver uma lista de regras em seu grupo de segurança como a seguinte:

   ```
   Security Groups associated with i-1234567890abcdef0
    Ports     Protocol     Source     launch-wizard-N
    22        tcp          0.0.0.0/0          ✔
   ```

1.  Em **Grupos de segurança**, escolha o grupo de segurança para a sua instância do Amazon EC2. Ele pode se chamar **launch-wizard-*N***. O ***N*** no nome é um número atribuído ao grupo de segurança quando a instância foi criada. 

    Escolha a guia **Entrada**. Se o grupo de segurança da sua instância está configurado corretamente, você deve ver uma regra com os seguintes valores: 
   + **Tipo:** HTTP
   + **Protocolo**: TCP
   + **Port Range**: 80
   + **Origem**: 0.0.0.0/0

1.  Se você não encontrar uma regra com esses valores, use os procedimentos em [Adicionar regras a um grupo de segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule) para adicioná-las a uma nova regra de segurança. 

# Etapa 2: configurar seu conteúdo de origem para implantar na instância do Amazon EC2 do Windows Server
<a name="tutorials-windows-configure-content"></a>

Agora é hora de configurar o conteúdo de origem do seu aplicativo, para que você tenha algo que possa implantar na instância do Amazon EC2. Para este tutorial, você implantará uma única página da Web na instância do Amazon EC2 que executa o Windows Server, que executará o IIS (Serviços de Informações da Internet) como seu servidor web. Essa página da Web exibirá um simples "Hello, World\$1" mensagem.

**Topics**
+ [Criar página da Web](#tutorials-windows-configure-content-download-code)
+ [Crie um script para executar seu aplicativo](#tutorials-windows-configure-content-create-scripts)
+ [Adicionar um arquivo de especificação de aplicativo](#tutorials-windows-configure-content-add-appspec-file)

## Criar página da Web
<a name="tutorials-windows-configure-content-download-code"></a>

1. Crie um subdiretório (subpasta) chamado `HelloWorldApp` na pasta `c:\temp` e, em seguida, mude para essa pasta.

   ```
   mkdir c:\temp\HelloWorldApp
   cd c:\temp\HelloWorldApp
   ```
**nota**  
Não é necessário usar a localização `c:\temp` ou o nome da subpasta `HelloWorldApp`. Se você usar uma localização ou um nome de subpasta diferente, certifique-se de usá-lo ao longo de todo este tutorial.

1. Use um editor de texto para criar um arquivo dentro da pasta. Nomeie o arquivo `index.html`.

   ```
   notepad index.html
   ```

1. Adicione o seguinte código HTML ao arquivo e salve-o em seguida.

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #0188cc;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello, World!</h1></div>
     <div align="center"><h2>You have successfully deployed an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## Crie um script para executar seu aplicativo
<a name="tutorials-windows-configure-content-create-scripts"></a>

Em seguida, você criará um script que CodeDeploy será usado para configurar o servidor web na instância de destino do Amazon EC2.

1. Na mesma subpasta em que o arquivo `index.html` está salvo, use um editor de texto para criar outro arquivo. Nomeie o arquivo `before-install.bat`.

   ```
   notepad before-install.bat
   ```

1. Adicione o seguinte código script em lotes ao arquivo e salve-o em seguida.

   ```
   REM Install Internet Information Server (IIS).
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Import-Module -Name ServerManager
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Install-WindowsFeature Web-Server
   ```

## Adicionar um arquivo de especificação de aplicativo
<a name="tutorials-windows-configure-content-add-appspec-file"></a>

Em seguida, você adicionará um arquivo de especificação do aplicativo (AppSpec arquivo), além da página da Web e do arquivo de script em lote. O AppSpec arquivo é um arquivo formatado em [YAML](http://www.yaml.org) usado por para: CodeDeploy 
+ Mapear os arquivos de origem na sua revisão de aplicativo para os respectivos destinos na instância.
+ Especifique os scripts a serem executados na instância durante a implantação.

O AppSpec arquivo deve ser nomeado`appspec.yml`. Ele deve ser colocado na pasta raiz do código-fonte do aplicativo.

1. Na mesma subpasta em que os arquivos `index.html` e `before-install.bat` estão salvos, use um editor de texto para criar outro arquivo. Nomeie o arquivo `appspec.yml`.

   ```
   notepad appspec.yml
   ```

1. Adicione o seguinte código YAML ao arquivo e salve-o em seguida.

   ```
   version: 0.0
   os: windows
   files:
     - source: \index.html
       destination: c:\inetpub\wwwroot
   hooks:
     BeforeInstall:
       - location: \before-install.bat
         timeout: 900
   ```

CodeDeploy usará esse AppSpec arquivo para copiar o `index.html` arquivo na pasta raiz do código-fonte do aplicativo para a `c:\inetpub\wwwroot` pasta na instância do Amazon EC2 de destino. Durante a implantação, CodeDeploy executará o script em `before-install.bat` lote na instância de destino do Amazon EC2 durante o evento do ciclo de vida da **BeforeInstall** implantação. Se esse script levar mais de 900 segundos (15 minutos) para ser executado, CodeDeploy interromperá a implantação e marcará a implantação na instância do Amazon EC2 como falha.

Para obter mais informações sobre essas configurações, consulte o [CodeDeploy AppSpec referência de arquivo](reference-appspec-file.md).

**Importante**  
Os locais e números de espaços entre cada um dos itens desse arquivo são importantes. Se o espaçamento estiver incorreto, CodeDeploy gerará um erro que pode ser difícil de depurar. Para obter mais informações, consulte [AppSpec Espaçamento de arquivos](reference-appspec-file.md#reference-appspec-file-spacing).

# Etapa 3: carregar seu aplicativo "Hello, World\$1" no Amazon S3
<a name="tutorials-windows-upload-application"></a>

Agora você preparará e enviará seu conteúdo de origem para um local a partir do qual CodeDeploy possa implantá-lo. As instruções a seguir mostram como provisionar um bucket do Amazon S3, preparar os arquivos da revisão de aplicativo para o bucket, agrupar os arquivos da revisão e, em seguida, enviá-la para esse bucket.

**nota**  
Embora não seja abordado neste tutorial, você pode usá-lo CodeDeploy para implantar aplicativos de GitHub repositórios para instâncias. Para obter mais informações, consulte [Integrando com CodeDeploy GitHub](integrations-partners-github.md).

**Topics**
+ [Provisionar um bucket do Amazon S3](#tutorials-windows-upload-application-create-s3-bucket)
+ [Preparar os arquivos do aplicativo para o bucket](#tutorials-windows-upload-application-prepare-application-files)
+ [Agrupar os arquivos do aplicativo em um único arquivamento e enviar o arquivamento](#tutorials-windows-upload-application-bundle-and-push-archive)

## Provisionar um bucket do Amazon S3
<a name="tutorials-windows-upload-application-create-s3-bucket"></a>

Crie um contêiner de armazenamento, ou *bucket*, no Amazon S3, ou use um bucket existente. Certifique-se de que você possa carregar a revisão no bucket e de que as instâncias do Amazon EC2 usadas nas implantações possam baixá-la desse bucket.

Você pode usar o AWS CLI console do Amazon S3 ou o Amazon S3 para criar um bucket do Amazon APIs S3. Depois de criar o bucket, certifique-se de dar permissões de acesso a ele e ao seu usuário do CodeDeploy.

**nota**  
Os nomes dos buckets devem ser exclusivos no Amazon S3 para todas as contas AWS . Se não for possível usar **amzn-s3-demo-bucket**, tente um nome de bucket diferente, como **amzn-s3-demo-bucket**, seguido por um traço e suas iniciais ou algum outro identificador exclusivo. Em seguida, certifique-se de substituir o nome do bucket por **amzn-s3-demo-bucket** sempre que essa identificação aparecer neste tutorial.  
O bucket do Amazon S3 deve ser criado na mesma AWS região em que suas instâncias de destino do Amazon EC2 são lançadas. Por exemplo, se você criar o bucket na região Leste dos EUA (Norte da Virgínia), suas instâncias do Amazon EC2 de destino devem ser lançadas na região Leste dos EUA (Norte da Virgínia).

**Topics**
+ [Como criar um bucket do Amazon S3 (CLI)](#tutorials-windows-upload-application-create-s3-bucket-cli)
+ [Como criar um bucket do Amazon S3 (console)](#tutorials-windows-upload-application-create-s3-bucket-console)
+ [Conceda permissões ao bucket do Amazon S3 e à sua conta AWS](#tutorials-windows-upload-application-create-s3-bucket-grant-permission)

### Como criar um bucket do Amazon S3 (CLI)
<a name="tutorials-windows-upload-application-create-s3-bucket-cli"></a>

Chame o comando **mb** para criar um bucket do Amazon S3 denominado **amzn-s3-demo-bucket**:

```
aws s3 mb s3://amzn-s3-demo-bucket --region region
```

### Como criar um bucket do Amazon S3 (console)
<a name="tutorials-windows-upload-application-create-s3-bucket-console"></a>

1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No console do Amazon S3, escolha **Criar bucket**.

1. Na caixa **Nome do bucket**, digite um nome para o bucket.

1. Na lista **Região**, escolha a região de destino e escolha **Criar**.

### Conceda permissões ao bucket do Amazon S3 e à sua conta AWS
<a name="tutorials-windows-upload-application-create-s3-bucket-grant-permission"></a>

Você deve ter permissões para fazer upload no bucket do Amazon S3. Você pode especificar essas permissões por meio de uma política de bucket do Amazon S3. Por exemplo, na seguinte política de bucket do Amazon S3, o uso do caractere curinga (\$1) permite que `111122223333` a AWS conta faça upload de arquivos para qualquer diretório no bucket do Amazon S3 chamado: `amzn-s3-demo-bucket`

```
{
    "Statement": [
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "111122223333"
                ]
            }
        }
    ]
}
```

Para ver o ID AWS da sua conta, consulte [Encontrando o ID AWS da sua conta](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId).

Agora é um bom momento para verificar se o bucket do Amazon S3 permitirá solicitações de download de cada instância participante do Amazon EC2. É possível especificar isso por meio de uma política do bucket do Amazon S3. Por exemplo, na seguinte política de bucket do Amazon S3, usar o caractere curinga (\$1) permite que qualquer instância do Amazon EC2 com um perfil de instância anexado do IAM contendo o ARN `arn:aws:iam::444455556666:role/CodeDeployDemo` faça o download de arquivos de qualquer diretório no bucket do Amazon S3 chamado de `amzn-s3-demo-bucket`:

```
{
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/CodeDeployDemo"
                ]
            }
        }
    ]
}
```

Para obter informações sobre como gerar e anexar uma política de bucket do Amazon S3, consulte [Exemplos de políticas de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html).

O usuário CodeDeploy administrativo que você criou também [Etapa 1: configuração](getting-started-setting-up.md) deve ter permissão para carregar a revisão no bucket do Amazon S3. Uma forma de especificar isso é por meio de uma política do IAM, que você adiciona ao conjunto de permissões do usuário, ou de um perfil do IAM (que você permite que o usuário assuma). A seguinte política do IAM permite que o usuário faça upload de revisões em qualquer lugar do bucket do Amazon S3 denominado `amzn-s3-demo-bucket`:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	   
  "Statement":[
    {
      "Effect":"Allow",
      "Action":["s3:PutObject"],
      "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

------

Para obter informações sobre como criar uma política do IAM, consulte [Criação de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do usuário do IAM*. Para obter informações sobre como adicionar uma política a um conjunto de permissões, consulte [Criar um conjunto de permissões](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

## Preparar os arquivos do aplicativo para o bucket
<a name="tutorials-windows-upload-application-prepare-application-files"></a>

Certifique-se de que a página da web, o AppSpec arquivo e o script estejam organizados em sua máquina de desenvolvimento da seguinte forma:

```
c:\
  |-- temp\
        |--HelloWorldApp\
             |-- appspec.yml
             |-- before-install.bat
             |-- index.html
```

## Agrupar os arquivos do aplicativo em um único arquivamento e enviar o arquivamento
<a name="tutorials-windows-upload-application-bundle-and-push-archive"></a>

Agrupe os arquivos em um arquivamento (conhecido como uma *revisão* de aplicativo).

**nota**  
Você pode ser cobrado por armazenar objetos em um bucket e por transferir revisões de aplicativos para dentro e fora de um bucket. Para obter mais informações, consulte [Preço do Amazon S3](https://aws.amazon.com/s3/pricing/). 

1. Na máquina de desenvolvimento, mude para a pasta na qual os arquivos estão armazenados: 

   ```
   cd c:\temp\HelloWorldApp
   ```
**nota**  
Se você não mudar para essa pasta, o empacotamento de arquivos começará na sua pasta atual. Por exemplo, se a sua pasta atual for `c:\temp`, e não `c:\temp\HelloWorldApp`, o empacotamento começará com os arquivos e as subpastas da pasta `c:\temp`, o que poderá incluir mais do que a subpasta `HelloWorldApp`.

1. Chame o **create-application** comando para registrar um novo aplicativo chamado **HelloWorld\$1App** com CodeDeploy:

   ```
   aws deploy create-application --application-name HelloWorld_App
   ```

1. Chame o comando CodeDeploy [push](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html) para agrupar os arquivos, fazer o upload das revisões para o Amazon S3 e registrar informações sobre a revisão CodeDeploy carregada, tudo em uma única ação. 

   ```
   aws deploy push --application-name HelloWorld_App --s3-location s3://amzn-s3-demo-bucket/HelloWorld_App.zip --ignore-hidden-files
   ```

   Esse comando agrupa os arquivos do diretório atual (excluindo os arquivos ocultos) em um único arquivo chamado`HelloWorld_App.zip`, carrega a revisão no **amzn-s3-demo-bucket** bucket e registra as informações CodeDeploy sobre a revisão carregada.

# Etapa 4: implantar seu aplicativo Hello World
<a name="tutorials-windows-deploy-application"></a>

Agora, você implanta o exemplo da revisão de aplicativo Hello World\$1 que fez o upload no Amazon S3. Você usa o AWS CLI ou o CodeDeploy console para implantar a revisão e monitorar o progresso da implantação. Depois que a revisão do aplicativo for implementada com êxito, confira os resultados.

**Topics**
+ [Implemente a revisão do seu aplicativo com CodeDeploy](#tutorials-windows-deploy-application-create-deployment)
+ [Monitorar sua implantação e solucionar problemas relacionados](#tutorials-windows-deploy-application-monitor)
+ [Verificar sua implantação](#tutorials-windows-deploy-application-verify)

## Implemente a revisão do seu aplicativo com CodeDeploy
<a name="tutorials-windows-deploy-application-create-deployment"></a>

 Você pode implantar seu aplicativo usando a CLI ou o console. 

**Topics**
+ [Para implantar sua revisão de aplicativo (CLI)](#tutorials-windows-deploy-application-create-deployment-cli)
+ [Para implantar sua revisão de aplicativo (console)](#tutorials-windows-deploy-application-create-deployment-console)

### Para implantar sua revisão de aplicativo (CLI)
<a name="tutorials-windows-deploy-application-create-deployment-cli"></a>

1. Primeiro, a implantação precisa de um grupo de implantação. No entanto, antes de criar o grupo de implantação, você precisa de um ARN de um perfil de serviço. Um perfil de serviço é um perfil do IAM que dá a um serviço permissão para agir em seu nome. Nesse caso, a função de serviço dá CodeDeploy permissão para acessar suas instâncias do Amazon EC2 para expandir (ler) suas tags de instância do Amazon EC2.

   Você já deve ter seguido as instruções em [Criar um perfil de serviço (CLI)](getting-started-create-service-role.md#getting-started-create-service-role-cli) para criar um perfil de serviço. Para obter o ARN do perfil de serviço, consulte [Obter o ARN do perfil de serviço (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli).

1. Agora que você tem o ARN de perfil de serviço, chame o comando **create-deployment-group** para criar um grupo de implantação chamado **HelloWorld\$1DepGroup**, associado ao aplicativo chamado **HelloWorld\$1App**, usando a tag de instância do Amazon EC2 chamada **CodeDeployDemo** e a configuração de implantação chamada **CodeDeployDefault.OneAtATime**, com o ARN de perfil de serviço:

   ```
   aws deploy create-deployment-group --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --deployment-config-name CodeDeployDefault.OneAtATime --ec2-tag-filters Key=Name,Value=CodeDeployDemo,Type=KEY_AND_VALUE --service-role-arn serviceRoleARN
   ```
**nota**  
O [create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html)comando fornece suporte para a criação de acionadores que resultam no envio de notificações do Amazon SNS aos assinantes do tópico sobre eventos específicos em implantações e instâncias. O comando também oferece suporte a opções para reverter automaticamente as implantações e configurar alarmes para interromper as implantações quando os limites de monitoramento nos alarmes da CloudWatch Amazon forem atingidos. Os comandos para essas ações não estão incluídos neste tutorial.

1. Antes de criar uma implantação, as instâncias do seu grupo de implantação devem ter o CodeDeploy agente instalado. Você pode instalar o agente a partir da linha de comando do AWS Systems Manager , com o seguinte comando:

   ```
   aws ssm create-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo --parameters action=Install,name=AWSCodeDeployAgent --schedule-expression "cron(0 2 ? * SUN *)" 
   ```

   Esse comando cria uma associação no Systems Manager State Manager que instalará o CodeDeploy agente e tentará atualizá-lo às 2:00 de cada manhã de domingo. Para obter mais informações sobre o CodeDeploy agente, consulte [Trabalhando com o CodeDeploy agente](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html). Para obter mais informações sobre o Systems Manager, consulte [O que é o AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html).

1. Agora, chame o comando **create-deployment** para criar uma implantação associada ao aplicativo **HelloWorld\$1App**, a configuração de implantação **CodeDeployDefault.OneAtATime** e o grupo de implantação **HelloWorld\$1DepGroup**, usando a revisão de aplicativo **HelloWorld\$1App.zip** no bucket **amzn-s3-demo-bucket**:

   ```
   aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
   ```

### Para implantar sua revisão de aplicativo (console)
<a name="tutorials-windows-deploy-application-create-deployment-console"></a>

1. Antes de usar o CodeDeploy console para implantar a revisão do aplicativo, você precisa de um ARN de função de serviço. Um perfil de serviço é um perfil do IAM que dá a um serviço permissão para agir em seu nome. Nesse caso, a função de serviço dá CodeDeploy permissão para acessar suas instâncias do Amazon EC2 para expandir (ler) suas tags de instância do Amazon EC2.

   Você já deve ter seguido as instruções em [Criar um perfil de serviço (console)](getting-started-create-service-role.md#getting-started-create-service-role-console) para criar um perfil de serviço. Para obter o ARN do perfil de serviço, consulte [Obter o ARN do perfil de serviço (console)](getting-started-create-service-role.md#getting-started-get-service-role-console).

1. Agora que você tem o ARN, você pode usar o CodeDeploy console para implantar a revisão do seu aplicativo.

   Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicações**.

1. Escolha **HelloWorld\$1App**.

1. Na guia **Grupos de implantação**, selecione **Criar um grupo de implantação**.

1. Em **Nome do grupo de implantação**, insira **HelloWorld\$1DepGroup**.

1. Em **Service Role (Função do serviço)**, selecione o nome da função do serviço.

1. Em **Tipo de implantação**, selecione **No local**.

1. Em **Configuração do ambiente**, selecione **Instâncias do Amazon EC2**.

1. Em **Configuração do agente com AWS Systems Manager**, mantenha os padrões.

1. Em **Chave**, insira **Name**.

1. Em **Valor**, informe **CodeDeployDemo**.

1. Em **Configuração de implantação**, escolha **CodeDeployDefault. OneAtATime**.

1. Em **Balanceador de carga**, desmarque **Habilitar balanceamento de carga**.

1. Selecione **Criar grupo de implantação**.

1. Escolha **Criar implantação**.

1. No **grupo de implantação**, escolha **HelloWorld\$1 DepGroup**

1. Em **Tipo de revisão**, selecione **Meu aplicativo está armazenado no Amazon S3** e, em seguida, em **Local de revisão**, digite o local da revisão do aplicativo de exemplo Hello World\$1 que você fez upload no Amazon S3 anteriormente. Para obter a localização:

   1. Abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

   1. Na lista de buckets, selecione **amzn-s3-demo-bucket** (ou o nome do bucket no qual você fez upload da sua revisão de aplicação). 

   1. Na lista de objetos, escolha **HelloWorld\$1App.zip**.

   1. Na guia **Overview (Visão geral)**, selecione **Copy path (Copiar caminho)**.

   1. Retorne ao CodeDeploy console e, em **Local da revisão**, cole o valor do campo **Link**.

1. Em **Tipo de arquivo de revisão**, selecione **.zip**. 

1. (Opcional) Insira um comentário em **Deployment description (Descrição da implantação)**.

1. Escolha **Criar implantação**. As informações sobre a implantação recém-criada aparecem na página **Implantações**.

## Monitorar sua implantação e solucionar problemas relacionados
<a name="tutorials-windows-deploy-application-monitor"></a>

Use o console AWS CLI ou o console para monitorar e solucionar problemas de sua implantação.

**Topics**
+ [Para monitorar e solucionar problemas de implantação (CLI)](#tutorials-windows-deploy-application-monitor-cli)
+ [Para monitorar e solucionar problemas de implantação (console)](#tutorials-windows-deploy-application-monitor-console)

### Para monitorar e solucionar problemas de implantação (CLI)
<a name="tutorials-windows-deploy-application-monitor-cli"></a>

1. Obtenha o ID de implantação chamando o comando **list-deployments** para o aplicativo chamado **HelloWorld\$1App** e o grupo de implantação chamado **HelloWorld\$1DepGroup**:

   ```
   aws deploy list-deployments --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --query "deployments" --output text
   ```

1. Chame o comando **get-deployment** com o ID da implantação:

   ```
   aws deploy get-deployment --deployment-id deploymentID --query "deploymentInfo.status" --output text
   ```

1. O comando retorna o status geral da implantação. Se a implantação for bem-sucedida, o valor será `Succeeded`.

   Se o status geral for `Failed`, você poderá chamar comandos como [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) e [get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) para solucionar problemas. Para mais opções de solução de problemas, consulte [Analisando arquivos de log para investigar falhas de implantação em instâncias](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures).

### Para monitorar e solucionar problemas de implantação (console)
<a name="tutorials-windows-deploy-application-monitor-console"></a>

Na página **Implantações** no CodeDeploy console, você pode monitorar o status da sua implantação na coluna **Status**.

Para obter mais informações sobre a implantação, especialmente se o valor da coluna **Status** tiver qualquer outro valor que não **Succeeded**:

1. Na tabela **Deployments (Implantações)**, selecione o ID da implantação. Depois que uma implantação apresentar falha, uma mensagem descrevendo o motivo da falha será exibida na página de detalhes da implantação.

1. Serão exibidas mais informações sobre as instâncias de implantação. Depois que uma implantação apresentar falha, você possivelmente conseguirá determinar em quais instâncias do Amazon EC2 e em qual etapa ocorreu a falha.

1. Se quiser realizar outros procedimentos de solução de problemas, use uma técnica como [Visualizar detalhes da instância com o CodeDeploy](instances-view-details.md). Você também pode analisar os arquivos de log de implantação em uma instância do Amazon EC2. Para obter mais informações, consulte [Analisando arquivos de log para investigar falhas de implantação em instâncias](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures).

## Verificar sua implantação
<a name="tutorials-windows-deploy-application-verify"></a>

Depois que a sua implantação for bem-sucedida, verifique se a sua instalação está funcionando. Use o endereço DNS público da instância do Amazon EC2 para visualizar a página da Web em um navegador da Web. (Para obter o valor DNS público, no console do Amazon EC2, escolha a instância do Amazon EC2 e, na guia **Description**, procure o valor de **DNS público**.)

Por exemplo, se o endereço DNS público da sua instância do Amazon EC2 for **ec2-01-234-567-890.compute-1.amazonaws.com**, você usará o seguinte URL:

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

Se o procedimento for bem-sucedido, você verá uma página da web Hello World\$1.

# Etapa 5: atualizar e reimplantar o aplicativo "Hello, World\$1" aplicação
<a name="tutorials-windows-update-and-redeploy-application"></a>

Agora que você implantou com sucesso a revisão do seu aplicativo, na máquina de desenvolvimento, atualize o código da página da Web e use-o CodeDeploy para reimplantar o site. Após a redistribuição, você poderá ver as alterações na instância do Amazon EC2.

**Topics**
+ [Modificar a página da web](#tutorials-windows-update-and-redeploy-application-modify-code)
+ [Reimplantar o site](#tutorials-windows-update-and-redeploy-application-deploy-updates)

## Modificar a página da web
<a name="tutorials-windows-update-and-redeploy-application-modify-code"></a>

1. Vá para a subpasta `c:\temp\HelloWorldApp` e use um editor de texto para modificar o arquivo `index.html`:

   ```
   cd c:\temp\HelloWorldApp
   notepad index.html
   ```

1. Revise o conteúdo do arquivo `index.html` para alterar a cor do plano de fundo e parte do texto na página da web e depois salve o arquivo:

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello Again, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #66cc00;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello Again, World!</h1></div>
     <div align="center"><h2>You have successfully deployed a revision of an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## Reimplantar o site
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates"></a>

Agora que você modificou o código, use o Amazon S3 e reimplante CodeDeploy a página da web.

Agrupe e carregue as alterações no Amazon S3, conforme descrito em [Agrupar os arquivos do aplicativo em um único arquivamento e enviar o arquivamento](tutorials-windows-upload-application.md#tutorials-windows-upload-application-bundle-and-push-archive). (Ao seguir essas instruções, você não precisa criar um novo aplicativo.) Especifique a mesma chave de antes para a revisão (**HelloWorld\$1App.zip**). Faça upload dela no mesmo bucket do Amazon S3 criado anteriormente (por exemplo, **amzn-s3-demo-bucket**).

Use o console AWS CLI ou o CodeDeploy console para reimplantar o site.

**Topics**
+ [Para redistribuir o site (CLI)](#tutorials-windows-update-and-redeploy-application-deploy-updates-cli)
+ [Para reimplantar o site (console)](#tutorials-windows-update-and-redeploy-application-deploy-updates-console)

### Para redistribuir o site (CLI)
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-cli"></a>

Chame o comando **create-deployment** para criar uma implantação baseada na revisão que fez upload, novamente usando o aplicativo **HelloWorld\$1App**, a configuração de implantação **CodeDeployDefault.OneAtATime**, o grupo de implantação **HelloWorld\$1DepGroup** e a revisão **HelloWorld\$1App.zip** no bucket **amzn-s3-demo-bucket**:

```
 aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
```

Você pode verificar o status da nova implantação conforme descrito em [Monitorar sua implantação e solucionar problemas relacionados](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor).

Quando CodeDeploy tiver reimplantado o site, visite novamente o site em seu navegador para verificar se a cor de fundo e o texto na página da Web foram alterados. (Talvez seja necessário atualizar o navegador.) Se a cor de fundo e o texto tiverem sido alterados, parabéns\$1 Você modificou e reimplantou seu site\$1

### Para reimplantar o site (console)
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-console"></a>

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, selecione **Applications (Aplicativos)**.

1. Na lista de **aplicativos**, escolha **HelloWorld\$1App**.

1. Na guia **Deployments (Implantações)**, escolha **Create deployment (Criar implantação)**.

   1. Na lista **de grupos de implantação**, escolha **HelloWorld\$1 DepGroup**.

   1.  Em **Local de revisão**, digite o link Amazon S3 da revisão.

      Para encontrar o valor do link:

      1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

         Navegue até **amzn-s3-demo-bucket**, abra-o e, depois, selecione a revisão, **HelloWorld\$1App.zip**, no console do Amazon S3.

      1. Se o painel **Propriedades** não estiver visível no console do Amazon S3, escolha o botão **Propriedades**.

      1. No painel **Properties (Propriedades)**, copie o valor do campo **Link**.

      1. Retorne ao CodeDeploy console e cole o link no **local da revisão**.

   1. Em **Tipo de arquivo de revisão**, se uma mensagem aparecer indicando que o tipo de arquivo não pôde ser detectado, selecione **.zip**.

   1. Deixe **Descrição da implantação** em branco.

   1. **Expandir **substituições de grupos de implantação** Na lista de **configuração de implantação**, escolha. CodeDeployDefault OneAtATime**e, em seguida, escolha **Criar implantação**. 

      Você pode verificar o status da implantação conforme descrito em [Monitorar sua implantação e solucionar problemas relacionados](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor).

      Quando CodeDeploy tiver reimplantado o site, visite novamente o site em seu navegador para verificar se a cor de fundo e o texto na página da Web foram alterados. (Talvez seja necessário atualizar o navegador.) Se a cor de fundo e o texto tiverem sido alterados, parabéns\$1 Você modificou e reimplantou seu site\$1

# Etapa 6: limpar seu aplicativo "Hello, World\$1" e os recursos relacionados
<a name="tutorials-windows-clean-up"></a>

Agora, você fez uma atualização bem-sucedida no código de "Hello, World\$1" e reimplantou o site. Para evitar cobranças contínuas pelos recursos criados neste tutorial, exclua o seguinte:
+ Qualquer CloudFormation pilha (ou encerre qualquer instância do Amazon EC2, se você as criou fora do). CloudFormation
+ Qualquer bucket do Amazon S3.
+ O aplicativo `HelloWorld_App` no CodeDeploy.
+ A associação AWS Systems Manager do gerente estadual para o CodeDeploy agente.

Você pode usar o AWS CLI, o CloudFormation, o Amazon S3, o Amazon EC2 CodeDeploy e os consoles, ou AWS APIs o para realizar a limpeza.

**Topics**
+ [Para usar recursos de limpeza (CLI)](#tutorials-windows-clean-up-cli)
+ [Para limpar recursos (console)](#tutorials-windows-clean-up-console)
+ [Próximas etapas](#tutorials-windows-clean-up-whats-next)

## Para usar recursos de limpeza (CLI)
<a name="tutorials-windows-clean-up-cli"></a>

1. Se você usou a CloudFormation pilha neste tutorial, exclua a pilha chamando o **delete-stack** comando na pilha chamada. **CodeDeployDemoStack** Isso encerra todas as instâncias do Amazon EC2 acompanhantes e exclui todos os perfis do IAM acompanhantes originalmente criados pela pilha.

   ```
   aws cloudformation delete-stack --stack-name CodeDeployDemoStack
   ```

1. Para excluir o bucket do Amazon S3, chame o comando **rm** com a opção **--recursive** para o bucket denominado **amzn-s3-demo-bucket**. Isso exclui o bucket e todos os seus objetos.

   ```
   aws s3 rm s3://amzn-s3-demo-bucket --recursive --region region
   ```

1. Para excluir o `HelloWorld_App` aplicativo de CodeDeploy, chame o **delete-application** comando. Isso exclui todos os registros do grupo de implantação associados e os registros de implantação do aplicativo.

   ```
   aws deploy delete-application --application-name HelloWorld_App
   ```

1. Para excluir a associação do gerenciador de estados do Systems Manager, chame o comando **delete-association**.

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   Você pode obter o *association-id* chamando o **describe-association** comando.

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

1. Se você não usou a CloudFormation pilha para este tutorial, chame o **terminate-instances** comando para encerrar as instâncias do Amazon EC2 que você criou manualmente. Forneça o ID da instância do Amazon EC2 a ser encerrada.

   ```
   aws ec2 terminate-instances --instance-ids instanceId
   ```

## Para limpar recursos (console)
<a name="tutorials-windows-clean-up-console"></a>

Se você usou nosso CloudFormation modelo para este tutorial, exclua a CloudFormation pilha associada.

1. Faça login no Console de gerenciamento da AWS e abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na caixa de pesquisa, digite o nome da CloudFormation pilha (por exemplo,**CodeDeployDemoStack**).

1. Marque a caixa ao lado do nome da pilha.

1. No menu **Ações**, escolha **Excluir pilha**. Isso exclui a pilha, encerrará todas as instâncias do Amazon EC2 acompanhantes e excluirá todos os perfis do IAM acompanhantes.

Para encerrar instâncias do Amazon EC2 que você criou fora de CloudFormation uma pilha:

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Na área **Instâncias**, escolha **Instâncias**.

1. Na caixa de pesquisa, digite o nome da instância do Amazon EC2 que você deseja encerrar e pressione **Enter**.

1. Escolha a instância do Amazon EC2.

1. Escolha **Ações**, escolha **Estado da instância** e escolha **Encerrar**. Quando solicitado, escolha **Sim, Encerrar**. Repita essas etapas para qualquer instância do Amazon EC2 adicional.

Para excluir o bucket do Amazon S3:

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Na lista de buckets, navegue e escolha o nome do bucket do Amazon S3 (por exemplo, **amzn-s3-demo-bucket**)

1. Antes de poder excluir um bucket, você deve excluir seu conteúdo. Selecione todos os arquivos no bucket, como **HelloWorld\$1App.zip**. No menu **Ações**, escolha **Excluir**. Quando solicitado a confirmar a exclusão, escolha **OK**. 

1. Depois que o bucket estiver vazio, você poderá excluí-lo. Na lista de buckets, escolha a linha do bucket (mas não o nome do bucket). Escolha **Excluir bucket** e quando solicitado a confirmar, escolha **OK**. 

Para excluir o `HelloWorld_App` aplicativo de CodeDeploy:

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicativos**.

   

1. Selecione **`HelloWorld_App`**.

1. Selecione **Excluir aplicativo**.

1. Quando solicitado, digite **Delete** e escolha **Excluir**. 

Para excluir a associação do gerenciador de estados do Systems Manager:

1. Abra o AWS Systems Manager console em https://console.aws.amazon.com /systems-manager.

1. No painel de navegação, escolha **State Manager**.

1. Escolha a associação criada e selecione **Excluir**.

## Próximas etapas
<a name="tutorials-windows-clean-up-whats-next"></a>

Se você chegou aqui, concluiu com êxito uma implantação com CodeDeploy. Parabéns\$1

# Tutorial: Implantar um aplicativo em uma instância local com CodeDeploy (Windows Server, Ubuntu Server ou Red Hat Enterprise Linux)
<a name="tutorials-on-premises-instance"></a>

Este tutorial ajuda você a ganhar experiência, CodeDeploy orientando você na implantação de uma amostra de revisão de aplicativo em uma única instância local, ou seja, um dispositivo físico que não é uma instância do Amazon EC2, executando Windows Server, Ubuntu Server ou Red Hat Enterprise Linux (RHEL). Para obter informações sobre instâncias locais e como elas funcionam CodeDeploy, consulte[Trabalhando com instâncias locais para CodeDeploy](instances-on-premises.md).

Não é o que você está procurando?
+ Para praticar a implantação em uma instância do Amazon EC2 executando o Amazon Linux ou RHEL, consulte [Tutorial: Implante WordPress em uma instância do Amazon EC2 (Amazon Linux ou Red Hat Enterprise Linux e Linux, macOS ou Unix)](tutorials-wordpress.md).
+ Para praticar a implantação em uma instância do Amazon EC2 executando o Windows Server, consulte [Tutorial: implantar um aplicativo "Hello, World\$1" aplicativo com CodeDeploy (Windows Server)](tutorials-windows.md).

**Topics**
+ [Pré-requisitos](tutorials-on-premises-instance-prerequisites.md)
+ [Etapa 1: configurar a instância on-premises](tutorials-on-premises-instance-1-configure-instance.md)
+ [Etapa 2: criar uma revisão de aplicativo de amostra](tutorials-on-premises-instance-2-create-sample-revision.md)
+ [Etapa 3: agrupar e carregar sua revisão de aplicativo no Amazon S3](tutorials-on-premises-instance-3-bundle-sample-revision.md)
+ [Etapa 4: implantar sua revisão de aplicativo](tutorials-on-premises-instance-4-deploy-sample-revision.md)
+ [Etapa 5: verificar sua implantação](tutorials-on-premises-instance-5-verify-deployment.md)
+ [Etapa 6: limpar os recursos](tutorials-on-premises-instance-6-clean-up-resources.md)

# Pré-requisitos
<a name="tutorials-on-premises-instance-prerequisites"></a>

Antes de iniciar este tutorial, você deve preencher os pré-requisitos em[Começando com CodeDeploy](getting-started-codedeploy.md), que incluem configurar um usuário, instalar ou atualizar o e criar uma função de AWS CLI serviço. Não é necessário criar um perfil de instância do IAM, conforme descrito nos pré-requisitos. Instâncias on-premises não usam perfis de instâncias do IAM.

O dispositivo físico que você configurará como uma instância local deve estar executando um dos sistemas operacionais listados em [Sistemas operacionais suportados pelo CodeDeploy agente](codedeploy-agent.md#codedeploy-agent-supported-operating-systems).

# Etapa 1: configurar a instância on-premises
<a name="tutorials-on-premises-instance-1-configure-instance"></a>

Para poder implantar na sua instância local, você deve configurá-la. Siga as instruções em [Trabalhando com instâncias locais para CodeDeploy](instances-on-premises.md) e retorne para esta página.

## Instale o CodeDeploy agente
<a name="tutorials-on-premises-instance-1-configure-instance-agent"></a>

Depois de configurar sua instância local, siga as etapas para instâncias locais em [Instalar o CodeDeploy agente](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install.html) e volte para esta página.

# Etapa 2: criar uma revisão de aplicativo de amostra
<a name="tutorials-on-premises-instance-2-create-sample-revision"></a>

Nesta etapa, você cria uma revisão do aplicativo de amostra para implantar na instância no local. 

Como é difícil saber quais softwares e atributos já estão instalados (ou podem ser instalados de acordo com as políticas da sua organização) na sua instância on-premises, a revisão de aplicativo de exemplo que oferecemos aqui usa simplesmente scripts em lote (para o Windows Server) ou scripts shell (para o Ubuntu Server e o RHEL) para gravar arquivos de texto em um localização na sua instância on-premises. Um arquivo é gravado para cada um dos vários eventos do ciclo de vida da CodeDeploy implantação, incluindo **Instalação**, **AfterInstall**ApplicationStart****, e. **ValidateService** Durante o evento do ciclo de vida da **BeforeInstall**implantação, um script será executado para remover arquivos antigos gravados durante implantações anteriores dessa amostra e criar um local na sua instância local para gravar os novos arquivos. 

**nota**  
A implantação dessa revisão de aplicativo de amostra poderá falhar se qualquer uma das seguintes condições for verdadeira:  
O usuário que inicia o CodeDeploy agente na instância local não tem permissão para executar scripts.
O usuário não tem permissão para criar ou excluir pastas nas localizações listadas nos scripts.
O usuário não tem permissão para criar arquivos de texto nas localizações listadas nos scripts.

**nota**  
Se você tiver configurado uma instância do Windows Server e quiser implantar uma amostra diferente, convém usar aquela em [Etapa 2: configurar seu conteúdo de origem para implantar na instância do Amazon EC2 do Windows Server](tutorials-windows-configure-content.md) no tutorial [Tutorial: implantar um aplicativo "Hello, World\$1" aplicativo com CodeDeploy (Windows Server)](tutorials-windows.md).  
Se você tiver configurado uma instância do RHEL e quiser implantar uma amostra diferente, convém usar aquela em [Etapa 2: configurar seu conteúdo de origem para ser implantado na instância Amazon Linux ou Red Hat Enterprise Linux instância do Amazon EC2](tutorials-wordpress-configure-content.md) no tutorial [Tutorial: Implante WordPress em uma instância do Amazon EC2 (Amazon Linux ou Red Hat Enterprise Linux e Linux, macOS ou Unix)](tutorials-wordpress.md).  
Atualmente, não existe uma amostra alternativa para o Ubuntu Server.

1. Na sua máquina de desenvolvimento, crie um subdiretório (subpasta) chamado `CodeDeployDemo-OnPrem` que armazenará os arquivos da revisão de aplicativo de amostra e, em seguida, mude para essa subpasta. Para este exemplo, assumimos que você usará `c:\temp` como a pasta raiz para o Windows Server ou a pasta `/tmp` como a pasta raiz para o Ubuntu Server e o RHEL. Se usar uma pasta diferente, certifique-se de usá-la no lugar das pastas acima neste tutorial: 

   Para Windows:

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem
   cd c:\temp\CodeDeployDemo-OnPrem
   ```

   Para Linux, macOS ou Unix:

   ```
   mkdir /tmp/CodeDeployDemo-OnPrem
   cd /tmp/CodeDeployDemo-OnPrem
   ```

1. Na raiz da subpasta `CodeDeployDemo-OnPrem`, use um editor de texto para criar os dois seguintes arquivos `appspec.yml` e `install.txt`:

   `appspec.yml` para Windows Server:

   ```
   version: 0.0
   os: windows
   files:
     - source: .\install.txt
       destination: c:\temp\CodeDeployExample
   hooks:
     BeforeInstall:
       - location: .\scripts\before-install.bat
         timeout: 900
     AfterInstall:
       - location: .\scripts\after-install.bat     
         timeout: 900
     ApplicationStart:
       - location: .\scripts\application-start.bat  
         timeout: 900
     ValidateService:
       - location: .\scripts\validate-service.bat    
         timeout: 900
   ```

   `appspec.yml` para Ubuntu Server e RHEL:

   ```
   version: 0.0
   os: linux
   files:
     - source: ./install.txt
       destination: /tmp/CodeDeployExample
   hooks:
     BeforeInstall:
       - location: ./scripts/before-install.sh
         timeout: 900
     AfterInstall:
       - location: ./scripts/after-install.sh
         timeout: 900
     ApplicationStart:
       - location: ./scripts/application-start.sh
         timeout: 900
     ValidateService:
       - location: ./scripts/validate-service.sh
         timeout: 900
   ```

   Para obter mais informações sobre AppSpec arquivos, consulte [Adicionar um arquivo de especificação do aplicativo a uma revisão do CodeDeploy](application-revisions-appspec-file.md) [CodeDeploy AppSpec referência de arquivo](reference-appspec-file.md) e.

   `install.txt`:

   ```
   The Install deployment lifecycle event successfully completed.
   ```

1. Na raiz da subpasta `CodeDeployDemo-OnPrem`, crie uma subpasta `scripts` e, em seguida, mude para ela:

   Para Windows:

   ```
   mkdir c:\temp\CodeDeployDemo-OnPrem\scripts
   cd c:\temp\CodeDeployDemo-OnPrem\scripts
   ```

   Para Linux, macOS ou Unix:

   ```
   mkdir -p /tmp/CodeDeployDemo-OnPrem/scripts
   cd /tmp/CodeDeployDemo-OnPrem/scripts
   ```

1. Na raiz da subpasta `scripts`, use um editor de texto para criar os quatro seguintes arquivos `before-install.bat`, `after-install.bat`, `application-start.bat` e `validate-service.bat` para Windows Server, ou `before-install.sh`, `after-install.sh`, `application-start.sh` e `validate-service.sh` para Ubuntu Server e RHEL:

   Para Windows Server:

   `before-install.bat`:

   ```
   set FOLDER=%HOMEDRIVE%\temp\CodeDeployExample
   
   if exist %FOLDER% (
     rd /s /q "%FOLDER%"
   )
   
   mkdir %FOLDER%
   ```

   `after-install.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The AfterInstall deployment lifecycle event successfully completed. > after-install.txt
   ```

   `application-start.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ApplicationStart deployment lifecycle event successfully completed. > application-start.txt
   ```

   `validate-service.bat`:

   ```
   cd %HOMEDRIVE%\temp\CodeDeployExample
   
   echo The ValidateService deployment lifecycle event successfully completed. > validate-service.txt
   ```

   Para Ubuntu Server e RHEL:

   `before-install.sh`:

   ```
   #!/bin/bash
   export FOLDER=/tmp/CodeDeployExample
   
   if [ -d $FOLDER ]
   then
    rm -rf $FOLDER
   fi
   
   mkdir -p $FOLDER
   ```

   `after-install.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The AfterInstall deployment lifecycle event successfully completed." > after-install.txt
   ```

   `application-start.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ApplicationStart deployment lifecycle event successfully completed." > application-start.txt
   ```

   `validate-service.sh`:

   ```
   #!/bin/bash
   cd /tmp/CodeDeployExample
   
   echo "The ValidateService deployment lifecycle event successfully completed." > validate-service.txt
   
   unset FOLDER
   ```

1. Somente para o Ubuntu Server e o RHEL, certifique-se de que os quatro scripts de shell tenham permissões de execução:

   ```
   chmod +x ./scripts/*
   ```

# Etapa 3: agrupar e carregar sua revisão de aplicativo no Amazon S3
<a name="tutorials-on-premises-instance-3-bundle-sample-revision"></a>

Para poder implantar sua revisão de aplicativo, você precisará agrupar os arquivos e depois carregar o pacote de arquivos em um bucket do Amazon S3. Siga as instruções em [Crie um aplicativo com CodeDeploy](applications-create.md) e [Envie uma revisão CodeDeploy para o Amazon S3 (somente implantações EC2/locais)](application-revisions-push.md). (Embora você possa dar qualquer nome ao aplicativo e ao grupo de implantação, recomendamos usar `CodeDeploy-OnPrem-App` para o nome do aplicativo e `CodeDeploy-OnPrem-DG` para o nome do grupo de implantação.) Depois de concluir essas instruções, retorna para esta página. 

**nota**  
Como alternativa, você pode carregar o pacote de arquivos em um GitHub repositório e implantá-lo a partir daí. Para obter mais informações, consulte [Integrando com CodeDeploy GitHub](integrations-partners-github.md).

# Etapa 4: implantar sua revisão de aplicativo
<a name="tutorials-on-premises-instance-4-deploy-sample-revision"></a>

Depois de carregar sua revisão de aplicativo em um bucket do Amazon S3, tente implantá-la na sua instância on-premises. Siga as instruções em [Crie uma implantação com CodeDeploy](deployments-create.md) e retorne para esta página.

# Etapa 5: verificar sua implantação
<a name="tutorials-on-premises-instance-5-verify-deployment"></a>

Para verificar se a implantação foi bem-sucedida, siga as instruções em [Exibir detalhes CodeDeploy da implantação](deployments-view-details.md) e retorne para esta página.

Se a implantação foi bem-sucedida, você encontrará quatro arquivos de texto na pasta `c:\temp\CodeDeployExample` (para Windows Server) ou `/tmp/CodeDeployExample` (para Ubuntu Server e RHEL). 

Se a implantação tiver falhado, siga as etapas de solução de problemas em [Visualizar detalhes da instância com o CodeDeploy](instances-view-details.md) e [Solução de problemas de instância](troubleshooting-ec2-instances.md). Faça as correções necessárias, reagrupe e carregue sua revisão de aplicativo. Em seguida, tente a implantação novamente.

# Etapa 6: limpar os recursos
<a name="tutorials-on-premises-instance-6-clean-up-resources"></a>

Para evitar cobranças contínuas pelos recursos criados para este tutorial, exclua o bucket do Amazon S3 caso ele não seja mais utilizado. Você também pode limpar os recursos associados, como os registros do aplicativo e do grupo de implantação CodeDeploy e a instância local.

Você pode usar o AWS CLI ou uma combinação dos consoles Amazon S3 CodeDeploy e do Amazon S3 AWS CLI para limpar recursos. 

## Limpar recursos (CLI)
<a name="tutorials-on-premises-instance-6-clean-up-resources-cli"></a>

**Para excluir o bucket do Amazon S3**
+ Chame o comando [rm](https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html) junto à opção `--recursive` para o bucket (por exemplo, `amzn-s3-demo-bucket`). O bucket e todos os objetos dentro dele serão excluídos. 

  ```
  aws s3 rm s3://your-bucket-name --recursive --region region
  ```

**Para excluir os registros do aplicativo e do grupo de implantação no CodeDeploy**
+ Chame o comando [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) para o aplicativo (por exemplo, `CodeDeploy-OnPrem-App`). Os registros da implantação e do grupo de implantação serão excluídos. 

  ```
  aws deploy delete-application --application-name your-application-name
  ```<a name="tutorials-on-premises-instance-6-clean-up-resources-deregister-cli"></a>

**Para cancelar o registro da instância on-premises e excluir o usuário do IAM**
+ Chame o comando [deregister](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister.html) para a instância on-premises e a região:

  ```
  aws deploy deregister --instance-name your-instance-name --delete-iam-user --region your-region
  ```
**nota**  
Se não quiser excluir o usuário do IAM associado a essa instância on-premises, use a opção `--no-delete-iam-user` como alternativa.

**Para desinstalar o CodeDeploy agente e remover o arquivo de configuração da instância local**
+ Na instância on-premises, chame o comando [desinstalar](https://docs.aws.amazon.com/cli/latest/reference/deploy/uninstall.html):

  ```
  aws deploy uninstall
  ```

Você concluiu todas as etapas para limpar os recursos usados para esse tutorial.

## Limpar recursos (console)
<a name="tutorials-on-premises-instance-6-clean-up-resources-console"></a>

**Para excluir o bucket do Amazon S3**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Escolha o ícone ao lado do bucket que deseja excluir (por exemplo, `amzn-s3-demo-bucket`), mas não escolha o bucket propriamente dito.

1. Escolha **Ações** e, em seguida, escolha **Excluir**. 

1. Quando solicitado a excluir o bucket, escolha **OK**. 

**Para excluir os registros do aplicativo e do grupo de implantação no CodeDeploy**

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação selecione **Applications (Aplicativos)**.

1. Escolha o nome do aplicativo que você deseja excluir (por exemplo, `CodeDeploy-OnPrem-App`) e escolha **Delete application (Excluir aplicativo)**.

1. Quando solicitado, digite o nome do aplicativo para confirmar que você deseja excluí-lo e, em seguida, escolha **Excluir**. 

Você não pode usar o AWS CodeDeploy console para cancelar o registro da instância local ou desinstalar o agente. CodeDeploy Siga as instruções em [Para cancelar o registro da instância on-premises e excluir o usuário do IAM](#tutorials-on-premises-instance-6-clean-up-resources-deregister-cli).

# Tutorial: Use CodeDeploy para implantar um aplicativo em um grupo do Auto Scaling
<a name="tutorials-auto-scaling-group"></a>

Neste tutorial, você usará CodeDeploy para implantar uma revisão do aplicativo em um grupo do Auto Scaling. O Amazon EC2 Auto Scaling lança instâncias do Amazon EC2 usando condições predefinidas e, em seguida, encerra essas instâncias quando elas não são mais necessárias. O Amazon EC2 Auto Scaling CodeDeploy pode ajudar a escalar garantindo que sempre tenha o número correto de instâncias do Amazon EC2 disponíveis para lidar com a carga das implantações. Para obter informações sobre a CodeDeploy integração do Amazon EC2 Auto Scaling com, consulte. [Integração CodeDeploy com o Amazon EC2 Auto Scaling](integrations-aws-auto-scaling.md)

**Topics**
+ [Pré-requisitos](tutorials-auto-scaling-group-prerequisites.md)
+ [Etapa 1: criar e configurar o grupo do Auto Scaling](tutorials-auto-scaling-group-create-auto-scaling-group.md)
+ [Etapa 2: implantar o aplicativo no grupo do Auto Scaling](tutorials-auto-scaling-group-create-deployment.md)
+ [Etapa 3: verificar os resultados](tutorials-auto-scaling-group-verify.md)
+ [Etapa 4: Aumentar o número de instâncias do Amazon EC2 no grupo do Auto Scaling.](tutorials-auto-scaling-group-scale-up.md)
+ [Etapa 5: verificar novamente os resultados](tutorials-auto-scaling-group-reverify.md)
+ [Etapa 6: limpar](tutorials-auto-scaling-group-clean-up.md)

# Pré-requisitos
<a name="tutorials-auto-scaling-group-prerequisites"></a>

Para acompanhar esse tutorial:
+ Conclua todas as etapas[Começando com CodeDeploy](getting-started-codedeploy.md), incluindo configurar AWS CLI e criar um perfil de instância do IAM (**CodeDeployDemo-EC2-Instance-Profile**) e uma função de serviço (**CodeDeployDemo**). Um *perfil de serviço* é um tipo especial de perfil do IAM; que dá a um serviço permissão para agir em seu nome.
+ Se criou grupo do Auto Scaling com um modelo de execução, você deverá adicionar as seguintes permissões:
  +  `ec2:RunInstances` 
  +  `ec2:CreateTags` 
  +  `iam:PassRole` 

  Para obter mais informações sobre como criar modelos de execução, consulte [Etapa 2: Criar um perfil de serviço](getting-started-create-service-role.md), [Criar um modelo de execução para um grupo do Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) e [Executar suporte de modelo](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-launch-template-permissions.html) no *Guia do usuário do Amazon EC2 Auto Scaling*. 
+  Crie e use uma revisão compatível com uma instância do Ubuntu Server CodeDeploy e. Para a revisão, é possível fazer um dos seguintes procedimentos:
  + Crie e use a amostra de revisão [Etapa 2: criar uma revisão de aplicativo de amostra](tutorials-on-premises-instance-2-create-sample-revision.md) no tutorial [Tutorial: Implantar um aplicativo em uma instância local com CodeDeploy (Windows Server, Ubuntu Server ou Red Hat Enterprise Linux)](tutorials-on-premises-instance.md). 
  + Crie uma revisão por conta própria. Consulte [Trabalhando com revisões de aplicativos para CodeDeploy](application-revisions.md).
+ Crie um grupo de segurança chamado **CodeDeployDemo-AS-SG** com a seguinte **regra de entrada**:
  + Tipo: HTTP
  + Origem: Qualquer lugar

  Isso é necessário para visualizar seu aplicativo e verificar o sucesso da implantação. Para obter informações sobre como criar um grupo de segurança, consulte [Criar um grupo de segurança](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#creating-security-group) no *Guia do usuário do Amazon EC2*.

 

# Etapa 1: criar e configurar o grupo do Auto Scaling
<a name="tutorials-auto-scaling-group-create-auto-scaling-group"></a>

Nesta etapa, você criará um grupo do Auto Scaling que contém uma única instância Amazon Linux, RHEL ou Windows Server Amazon EC2. Em uma etapa posterior, você instruirá o Amazon EC2 Auto Scaling a adicionar mais uma instância do Amazon EC2 CodeDeploy e implantará sua revisão nela.

**Topics**
+ [Como criar e configurar o grupo do Auto Scaling (CLI)](#tutorials-auto-scaling-group-create-auto-scaling-group-cli)
+ [Como criar e configurar o grupo do Auto Scaling (console)](#tutorials-auto-scaling-group-create-auto-scaling-group-console)

## Como criar e configurar o grupo do Auto Scaling (CLI)
<a name="tutorials-auto-scaling-group-create-auto-scaling-group-cli"></a>

1. Use o comando **create-launch-template** para criar um modelo de execução do Amazon EC2.

   Antes de chamar esse comando, você precisa do ID de uma AMI que funcione para este tutorial, representado pelo espaço *image-id* reservado. Você também precisa do nome de um par de chaves de instância do Amazon EC2 para permitir o acesso à instância do Amazon EC2, representado pelo espaço reservado. *key-name*

   Para obter o ID de uma AMI que funcione com este tutorial:

   1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. No painel de navegação, em **Instâncias**, escolha **Instâncias** e, em seguida, escolha **Iniciar instância**.

   1. Na guia **Início rápido** da página **Escolha uma imagem de máquina da Amazon**, anote o ID da AMI ao lado do **Amazon Linux 2 AMI**, **Red Hat Enterprise Linux 7.1**, **Ubuntu Server 14.04 LTS** ou **Microsoft Windows Server 2012 R2**. 
**nota**  
Se você tiver uma versão personalizada de uma AMI compatível com o CodeDeploy, selecione-a aqui em vez de navegar pela guia **Quick Start (Início rápido)**. Para obter informações sobre o uso de uma AMI personalizada com CodeDeploy o Amazon EC2 Auto [Usando uma AMI personalizada com o CodeDeploy Amazon EC2 Auto Scaling](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-custom-ami) Scaling, consulte.

   Para o par de chaves da instância do Amazon EC2, use o nome do par de chaves da sua instância do Amazon EC2.

   Chame o comando **create-launch-template**.

   Em máquinas Linux, macOS ou Unix locais:

   ```
   aws ec2 create-launch-template \
     --launch-template-name CodeDeployDemo-AS-Launch-Template \
     --launch-template-data file://config.json
   ```

   Visualize o conteúdo do arquivo `config.json`:

   ```
   { 
     "InstanceType":"t1.micro",
     "ImageId":"image-id",
     "IamInstanceProfile":{
       "Name":"CodeDeployDemo-EC2-Instance-Profile"
     },
     "KeyName":"key-name"
   }
   ```

   Em máquinas locais do Windows:

   ```
   aws ec2 create-launch-template --launch-template-name CodeDeployDemo-AS-Launch-Template --launch-template-data file://config.json
   ```

   Visualize o conteúdo do arquivo `config.json`:

   ```
   { 
     "InstanceType":"t1.micro",
     "ImageId":"image-id",
     "IamInstanceProfile":{
       "Name":"CodeDeployDemo-EC2-Instance-Profile"
     },
     "KeyName":"key-name"
   }
   ```

   Esses comandos, junto com o `config.json` arquivo, criam um modelo de lançamento do Amazon EC2 com o nome do seu grupo CodeDeployDemo-AS-Launch-Template de Auto Scaling, que será criado na etapa seguinte com base no tipo de instância t1.micro do Amazon EC2. Com base em sua entrada para`ImageId`, `IamInstanceProfile`, e `KeyName`, o modelo de execução também especifica a ID da AMI, o nome do perfil de instância associado ao perfil do IAM a ser passado para as instâncias na execução e o par de chaves do Amazon EC2 a ser usado ao se conectar às instâncias.

1.  Chame o comando **create-auto-scaling-group** para criar um grupo do Auto Scaling. Você precisará do nome de uma das zonas de disponibilidade em uma das regiões listadas em [Região e dos endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region) na *Referência geral da AWS*, representados pelo espaço *availability-zone* reservado.
**nota**  
Para ver uma lista de Zonas de disponibilidade em uma região, chame:   

   ```
   aws ec2 describe-availability-zones --region region-name
   ```
Por exemplo, para ver uma lista de Zonas de disponibilidade na região Oeste dos EUA (Oregon), chame:  

   ```
   aws ec2 describe-availability-zones --region us-west-2
   ```
Para obter uma lista dos identificadores de nome da região, consulte [Nomes de bucket do kit de recursos por região](resource-kit.md#resource-kit-bucket-names).

   Em máquinas Linux, macOS ou Unix locais:

   ```
   aws autoscaling create-auto-scaling-group \
     --auto-scaling-group-name CodeDeployDemo-AS-Group \
     --launch-template CodeDeployDemo-AS-Launch-Template,Version='$Latest' \
     --min-size 1 \
     --max-size 1 \
     --desired-capacity 1 \
     --availability-zones availability-zone \
     --tags Key=Name,Value=CodeDeployDemo,PropagateAtLaunch=true
   ```

   Em máquinas locais do Windows:

   ```
   aws autoscaling create-auto-scaling-group --auto-scaling-group-name CodeDeployDemo-AS-Group --launch-template LaunchTemplateName=CodeDeployDemo-AS-Launch-Template,Version="$Latest" --min-size 1 --max-size 1 --desired-capacity 1 --availability-zones availability-zone --tags Key=Name,Value=CodeDeployDemo,PropagateAtLaunch=true
   ```

   Esses comandos criam um grupo do Auto Scaling chamado **CodeDeployDemo-AS-Group** com base no modelo de execução do Amazon EC2 chamado **CodeDeployDemo-AS-Launch-Template**. Esse grupo do Auto Scaling tem apenas uma instância do Amazon EC2 e é criado na Zona de disponibilidade especificada. Cada instância nesse grupo do Auto Scaling terá a tag `Name=CodeDeployDemo`. A tag será usada ao instalar o CodeDeploy agente posteriormente.

1. Chame o comando **describe-auto-scaling-groups** contra **CodeDeployDemo-AS-Group**:

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].[HealthStatus, LifecycleState]" --output text
   ```

   Não prossiga até que os valores retornados mostrem `Healthy` e `InService`.

1.  As instâncias em seu grupo de Auto Scaling devem ter o CodeDeploy agente instalado para serem usadas em CodeDeploy implantações. Instale o CodeDeploy agente chamando o **create-association** comando AWS Systems Manager com as tags que foram adicionadas quando o grupo Auto Scaling foi criado. 

   ```
   aws ssm create-association \
     --name AWS-ConfigureAWSPackage \
     --targets Key=tag:Name,Values=CodeDeployDemo \
      --parameters action=Install, name=AWSCodeDeployAgent \
     --schedule-expression "cron(0 2 ? * SUN *)"
   ```

   Esse comando cria uma associação no Systems Manager State Manager que instalará o CodeDeploy agente em todas as instâncias do grupo Auto Scaling e tentará atualizá-lo às 2h da manhã de domingo. Para obter mais informações sobre o CodeDeploy agente, consulte [Trabalhando com o CodeDeploy agente](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html). Para obter mais informações sobre o Systems Manager, consulte [O que é o AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html).

## Como criar e configurar o grupo do Auto Scaling (console)
<a name="tutorials-auto-scaling-group-create-auto-scaling-group-console"></a>

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Na barra de navegação global, certifique-se de que uma das regiões listadas em [Região e endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region) em *Referência geral da AWS* esteja selecionada. Os recursos do Amazon EC2 Auto Scaling estão vinculados à região que você especifica CodeDeploy e são suportados somente em regiões selecionadas.

1. Na barra de navegação, escolha **Instances** e, em seguida, **Launch Templates**.

1. Escolha **Criar modelo de execução**.

1. Na caixa de diálogo **Nome e descrição do modelo de execução**, para **Nome do modelo de execução**, insira **CodeDeployDemo-AS-Launch-Template**. Mantenha os valores padrão em todos os outros campos.

1. Na caixa de diálogo **Imagem de máquina da Amazon (AMI)**, clique no menu suspenso em **AMI** e escolha uma AMI que funcione com este tutorial:

   1. Na guia **Início rápido** do menu suspenso **AMI**, escolha uma das seguintes opções: **Amazon Linux 2 AMI**, **Red Hat Enterprise Linux 7.1**, **Ubuntu Server 14.04 LTS** ou **Microsoft Windows Server 2012 R2**. 
**nota**  
Se você tiver uma versão personalizada de uma AMI compatível com o CodeDeploy, selecione-a aqui em vez de navegar pela guia **Quick Start (Início rápido)**. Para obter informações sobre o uso de uma AMI personalizada com CodeDeploy o Amazon EC2 Auto [Usando uma AMI personalizada com o CodeDeploy Amazon EC2 Auto Scaling](integrations-aws-auto-scaling.md#integrations-aws-auto-scaling-custom-ami) Scaling, consulte.

1. Em **Tipo de instância**, selecione a lista suspensa e escolha **t1.micro**. É possível usar a barra de pesquisa para encontrá-la mais rapidamente.

1. Na caixa de diálogo **Par de chaves (login)**, selecione **Escolher um par de chaves existente**. Na lista suspensa **Selecione um par de chaves**, selecione o par de chaves de instância do Amazon EC2 criado ou usado nas etapas anteriores.

1. Na caixa de diálogo **Configurações de rede**, escolha **Virtual Public Cloud (VPC)**.

   No menu suspenso **Grupos de segurança**, escolha o grupo de segurança que você criou na seção de [pré-requisitos do tutorial](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-auto-scaling-group-prerequisites.html) (**CodeDeployDemo-AS-SG**).

1. Expanda a caixa de diálogo **Detalhes avançados**. No menu suspenso **Perfil de instância do IAM**, selecione o perfil do IAM que você criou anteriormente (**CodeDeployDemo-EC2-Instance-Profile**) em **Perfil de instância do IAM**.

   Deixe o restante dos padrões.

1. Escolha **Criar modelo de execução**.

1. Na caixa de diálogo **Próximas etapas**, escolha **Criar grupo do Auto Scaling.**

1. Na página **Escolher modelo ou configuração de execução**, para **Nome do grupo do Auto Scaling**, insira **CodeDeployDemo-AS-Group**.

1. Na caixa de diálogo **Modelo de execução**, seu modelo de execução (**CodeDeployDemo-AS-Launch-Template**) deve ser preenchido; caso contrário, selecione-o no menu suspenso. Deixe os padrões e escolha **Próximo**. 

1. Na página **Escolher as opções de execução da instância** na seção **Rede**, para **VPC**, selecione a VPC padrão. Em seguida, para **Zonas de disponibilidade e sub-redes**, escolha uma sub-rede padrão. Você deve criar uma VPC se não puder escolher a padrão. Para obter mais informações, consulte [Conceitos básicos do Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html).

1. Na seção **Instance type requirements** (Requisitos de tipo de instância), use a configuração padrão para simplificar essa etapa. (Não substitua o modelo de execução.) Neste tutorial, você fará o execução apenas das Instâncias sob demanda usando o tipo de instância especificado no modelo de execução.

1. Selecione **Next** (Próximo) para ir até a página **Configure advanced options** (Configurar opções avançadas).

1. Mantenha os outros valores padrão e escolha **Próximo**.

1. Na página **Configurar tamanho do grupo e políticas de escalabilidade**, mantenha os valores padrão de **tamanho do grupo** de 1. Escolha **Próximo**.

1. Ignore a etapa de configuração de notificações e escolha **Próximo**.

1. Na página **Adicionar tags**, adicione uma tag a ser usada ao instalar o CodeDeploy agente posteriormente. Escolha **Adicionar Tag**.

   1. Em **Chave**, insira **Name**.

   1. Em **Valor**, informe **CodeDeployDemo**.

   Escolha **Próximo**.

1. Na página **Revisar**, reveja as configurações do grupo do Auto Scaling e escolha **Criar grupo do Auto Scaling**.

1. Na barra de navegação, com a opção **Grupos do Auto Scaling** selecionada, escolha **CodeDeployDemo-AS-Group** e, em seguida, a guia **Gerenciamento de instâncias**. Não continue até que o valor de **InService**apareça na coluna **Lifecycle** e o valor de **Healthy** apareça na coluna **Health Status**.

1. Instale o CodeDeploy agente seguindo as etapas em [Instalar o CodeDeploy agente](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install.html) e usando as tags da `Name=CodeDeployDemo` instância.

# Etapa 2: implantar o aplicativo no grupo do Auto Scaling
<a name="tutorials-auto-scaling-group-create-deployment"></a>

Nesta etapa, você implantará a revisão na instância única do Amazon EC2 no grupo do Auto Scaling.

**Topics**
+ [Para criar a implantação (CLI)](#tutorials-auto-scaling-group-create-deployment-cli)
+ [Para criar a implantação (console)](#tutorials-auto-scaling-group-create-deployment-console)

## Para criar a implantação (CLI)
<a name="tutorials-auto-scaling-group-create-deployment-cli"></a>

1. Chame o comando **create-application** para criar um aplicativo chamado **SimpleDemoApp**:

   ```
   aws deploy create-application --application-name SimpleDemoApp
   ```

1. Você já deve ter criado um perfil de serviço seguindo as instruções em [Etapa 2: criar uma função de serviço para CodeDeploy](getting-started-create-service-role.md). A função de serviço dará CodeDeploy permissão para acessar suas instâncias do Amazon EC2 para expandir (ler) suas tags. Você precisará do ARN da função de serviço. Para obter o ARN do perfil de serviço, siga as instruções em [Obter o ARN do perfil de serviço (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli).

1. Agora que você tem um ARN de perfil de serviço, chame o comando **create-deployment-group** para criar um grupo de implantação chamado **SimpleDemoDG**, associado ao aplicativo chamado **SimpleDemoApp**, usando o grupo do Auto Scaling chamado **CodeDeployDemo-AS-Group** e a configuração de implantação chamada **CodeDeployDefault.OneAtATime**, com o ARN de perfil de serviço especificado.
**nota**  
O [create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html)comando fornece suporte para a criação de acionadores que resultam no envio de notificações do Amazon SNS aos assinantes do tópico sobre eventos específicos em implantações e instâncias. O comando também oferece suporte a opções para reverter automaticamente as implantações e configurar alarmes para interromper as implantações quando os limites de monitoramento nos alarmes da CloudWatch Amazon forem atingidos. Os comandos para essas ações não estão incluídos neste tutorial.

   Em máquinas Linux, macOS ou Unix locais:

   ```
   aws deploy create-deployment-group \
     --application-name SimpleDemoApp \
     --auto-scaling-groups CodeDeployDemo-AS-Group \
     --deployment-group-name SimpleDemoDG \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --service-role-arn service-role-arn
   ```

   Em máquinas locais do Windows:

   ```
   aws deploy create-deployment-group --application-name SimpleDemoApp --auto-scaling-groups CodeDeployDemo-AS-Group --deployment-group-name SimpleDemoDG --deployment-config-name CodeDeployDefault.OneAtATime --service-role-arn service-role-arn
   ```

1. Chame o comando **create-deployment** para criar uma implantação associada ao aplicativo **SimpleDemoApp**, a configuração de implantação **CodeDeployDefault.OneAtATime**, o grupo de implantação **SimpleDemoDG**, usando a revisão na localização especificada.

   **Para instâncias Amazon Linux e RHEL do Amazon EC2, chamadas de máquinas Linux, macOS ou Unix locais**

    

   ```
   aws deploy create-deployment \
     --application-name SimpleDemoApp \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name SimpleDemoDG \
     --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Linux.zip
   ```

   *bucket-name*é o nome do bucket do Amazon S3 que contém os arquivos do CodeDeploy Resource Kit para sua região. Por exemplo, para a região Leste dos EUA (Ohio), *bucket-name* substitua por`aws-codedeploy-us-east-2`. Para obter uma lista de nomes de buckets, consulte [Nomes de bucket do kit de recursos por região](resource-kit.md#resource-kit-bucket-names).

   **Para instâncias do Amazon Linux e RHEL do Amazon EC2, chamadas de máquinas Windows locais**

    

   ```
   aws deploy create-deployment --application-name SimpleDemoApp --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name SimpleDemoDG --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Linux.zip
   ```

   *bucket-name*é o nome do bucket do Amazon S3 que contém os arquivos do CodeDeploy Resource Kit para sua região. Por exemplo, para a região Leste dos EUA (Ohio), *bucket-name* substitua por`aws-codedeploy-us-east-2`. Para obter uma lista de nomes de buckets, consulte [Nomes de bucket do kit de recursos por região](resource-kit.md#resource-kit-bucket-names).

   **Para instâncias do Windows Server Amazon EC2, chamadas de máquinas Linux, macOS ou Unix locais**

    

   ```
   aws deploy create-deployment \
     --application-name SimpleDemoApp \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name SimpleDemoDG \
     --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Windows.zip
   ```

   *bucket-name*é o nome do bucket do Amazon S3 que contém os arquivos do CodeDeploy Resource Kit para sua região. Por exemplo, para a região Leste dos EUA (Ohio), *bucket-name* substitua por`aws-codedeploy-us-east-2`. Para obter uma lista de nomes de buckets, consulte [Nomes de bucket do kit de recursos por região](resource-kit.md#resource-kit-bucket-names).

   **Para instâncias do Windows Server Amazon EC2, chamadas de máquinas Windows locais**

   ```
   aws deploy create-deployment --application-name SimpleDemoApp --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name SimpleDemoDG --s3-location bucket=bucket-name,bundleType=zip,key=samples/latest/SampleApp_Windows.zip
   ```

   *bucket-name*é o nome do bucket do Amazon S3 que contém os arquivos do CodeDeploy Resource Kit para sua região. Por exemplo, para a região Leste dos EUA (Ohio), *bucket-name* substitua por`aws-codedeploy-us-east-2`. Para obter uma lista de nomes de buckets, consulte [Nomes de bucket do kit de recursos por região](resource-kit.md#resource-kit-bucket-names).
**nota**  
Atualmente, CodeDeploy não fornece uma revisão de amostra para implantação em instâncias do Amazon EC2 do Ubuntu Server. Para criar uma revisão por conta própria, consulte [Trabalhando com revisões de aplicativos para CodeDeploy](application-revisions.md).

1. Chame o comando **get-deployment** para verificar se a implantação foi bem-sucedida.

   Antes de chamar esse comando, será necessário o ID de implantação, que deve ter sido retornado pela chamada para o comando **create-deployment**. Se precisar obter o ID de implantação novamente, chame o comando **list-deployments** contra o aplicativo chamado **SimpleDemoApp** e o grupo de implantação chamado **SimpleDemoDG**.

   ```
   aws deploy list-deployments --application-name SimpleDemoApp --deployment-group-name SimpleDemoDG --query "deployments" --output text
   ```

   Agora, chame o comando **get-deployment** usando o ID de implantação:

   ```
   aws deploy get-deployment --deployment-id deployment-id --query "deploymentInfo.status" --output text
   ```

   Não continue até que o valor retornado seja `Succeeded`.

## Para criar a implantação (console)
<a name="tutorials-auto-scaling-group-create-deployment-console"></a>

1. Você já deve ter criado um perfil de serviço seguindo as instruções em [Etapa 2: criar uma função de serviço para CodeDeploy](getting-started-create-service-role.md). A função de serviço dará CodeDeploy permissão para acessar suas instâncias para expandir (ler) suas tags. Antes de usar o CodeDeploy console para implantar a revisão do aplicativo, você precisará do ARN da função de serviço. Para obter o ARN do perfil de serviço, siga as instruções em [Obter o ARN do perfil de serviço (console)](getting-started-create-service-role.md#getting-started-get-service-role-console). 

1. Agora que você tem o ARN da função de serviço, você pode usar o CodeDeploy console para implantar a revisão do seu aplicativo.

   Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicativos**.

1. Escolha **Criar aplicativo**.

1. Selecione **Custom application (Aplicativo personalizado)**.

1. Em **Nome do aplicativo**, insira **SimpleDemoApp**.

1. Em **Plataforma de computação**, selecione **EC2/On-Premises**.

1. Escolha **Criar aplicativo**.

1. Na guia **Grupos de implantação**, selecione **Criar um grupo de implantação**.

1. Em **Nome do grupo de implantação**, insira **SimpleDemoDG**.

1. Em **Service Role (Função do serviço)**, selecione o nome da função do serviço.

1. Em **Tipo de implantação**, selecione **No local**.

1. Em **Configuração do ambiente**, selecione **Grupos do Auto Scaling** e escolha **CodeDeployDemo-AS-Group**.

1. Em **Configuração de implantação**, escolha **CodeDeployDefault. OneAtATime**.

1. Desmarque **Enable load balancing (Habilitar o balanceamento de carga)**.

1. Selecione **Criar grupo de implantação**. 

1. Na página do grupo de implantação, selecione **Create deployment (Criar implantação)**.

1. Em **Tipo de revisão**, escolha **Meu aplicativo está armazenado no Amazon S3**. 

1. Em **Revision location (Local da revisão)**, insira o local do aplicativo de exemplo para o sistema operacional e região.

   **Para instâncias Amazon Linux e RHEL do Amazon EC2**  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/tutorials-auto-scaling-group-create-deployment.html)

   **Para instâncias do Windows Server Amazon EC2**  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/tutorials-auto-scaling-group-create-deployment.html)

    **Para instâncias do Ubuntu Server Amazon EC2**

   Digite o local da sua revisão de aplicativo personalizada armazenada no Amazon S3.

1. Deixe **Descrição da implantação** em branco.

1. Expanda **Advanced**.

1. Escolha **Criar implantação**. 
**nota**  
Se **Falha** aparecer no lugar de **Bem-sucedido**, convém tentar algumas das técnicas em [Monitorar sua implantação e solucionar problemas relacionados](tutorials-wordpress-deploy-application.md#tutorials-wordpress-deploy-application-monitor) (usando o nome de aplicativo **SimpleDemoApp** e o nome do grupo de implantação **SimpleDemoDG**).

# Etapa 3: verificar os resultados
<a name="tutorials-auto-scaling-group-verify"></a>

Nesta etapa, você verificará se CodeDeploy instalou a **SimpleDemoApp** revisão em uma única instância do Amazon EC2 no grupo Auto Scaling.

**Topics**
+ [Para verificar os resultados (CLI)](#tutorials-auto-scaling-group-verify-cli)
+ [Para verificar os resultados (console)](#tutorials-auto-scaling-group-verify-console)

## Para verificar os resultados (CLI)
<a name="tutorials-auto-scaling-group-verify-cli"></a>

Primeiro, você precisará do DNS público da instância do Amazon EC2.

Use o AWS CLI para obter o DNS público da instância do Amazon EC2 no grupo Auto Scaling chamando o comando. **describe-instances** 

Antes de chamar esse comando, você precisará da ID da instância do Amazon EC2. Para obter o ID, chame **describe-auto-scaling-groups** contra **CodeDeployDemo-AS-Group**, conforme feito anteriormente:

```
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].InstanceId" --output text
```

Agora chame o comando **describe-instances**:

```
aws ec2 describe-instances --instance-id instance-id --query "Reservations[0].Instances[0].PublicDnsName" --output text
```

O valor retornado é o DNS público da instância do Amazon EC2.

Usando um navegador da web, mostre a SimpleDemoApp revisão implantada nessa instância do Amazon EC2, usando uma URL como a seguinte:

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

Se você ver a página de parabéns, você usou com sucesso CodeDeploy a implantação de uma revisão em uma única instância do Amazon EC2 em um grupo de Auto Scaling\$1

Em seguida, adicione uma instância do Amazon EC2 ao grupo do Auto Scaling. Depois que o Amazon EC2 Auto Scaling adicionar a instância do Amazon EC2, implantará sua revisão na nova CodeDeploy instância.

## Para verificar os resultados (console)
<a name="tutorials-auto-scaling-group-verify-console"></a>

Primeiro, você precisará do DNS público da instância do Amazon EC2.

Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

No painel de navegação do Amazon EC2, em **Auto Scaling**, selecione **Grupos do Auto Scaling** e, em seguida, a entrada. **CodeDeployDemo-AS-Group**.

Na guia **Instâncias**, escolha a ID da instância do Amazon EC2 na lista.

Na página **Instâncias**, na guia **Descrição**, anote o valor **DNS público**. A aparência será semelhante à seguinte: **ec2-01-234-567-890.compute-1.amazonaws.com**.

Usando um navegador da web, mostre a SimpleDemoApp revisão implantada nessa instância do Amazon EC2, usando uma URL como a seguinte:

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

Se você ver a página de parabéns, você usou com sucesso CodeDeploy a implantação de uma revisão em uma única instância do Amazon EC2 em um grupo de Auto Scaling\$1

Em seguida, adicione uma instância do Amazon EC2 ao grupo do Auto Scaling. Depois que o Amazon EC2 Auto Scaling adicionar a instância do Amazon EC2, implantará sua revisão na nova CodeDeploy instância do Amazon EC2.

# Etapa 4: Aumentar o número de instâncias do Amazon EC2 no grupo do Auto Scaling.
<a name="tutorials-auto-scaling-group-scale-up"></a>

Nesta etapa, você instrui o grupo do Auto Scaling para criar uma instância adicional do Amazon EC2. Depois que o Amazon EC2 Auto Scaling criar a CodeDeploy instância, implanta sua revisão nela.

**Topics**
+ [Para aumentar a escala horizontalmente o número de instâncias do Amazon EC2 no grupo do Auto Scaling (CLI)](#tutorials-auto-scaling-group-scale-up-cli)
+ [Para aumentar a escala horizontalmente o número de instâncias do Amazon EC2 no grupo de implantação (console)](#tutorials-auto-scaling-group-scale-up-console)

## Para aumentar a escala horizontalmente o número de instâncias do Amazon EC2 no grupo do Auto Scaling (CLI)
<a name="tutorials-auto-scaling-group-scale-up-cli"></a>

1. Chame o comando **update-auto-scaling-group** para aumentar as instâncias do Amazon EC2 no grupo do Auto Scaling chamado **CodeDeployDemo-AS-Group** de um para dois.

   Em máquinas Linux, macOS ou Unix locais:

   ```
   aws autoscaling update-auto-scaling-group \
     --auto-scaling-group-name CodeDeployDemo-AS-Group \
     --min-size 2 \
     --max-size 2 \
     --desired-capacity 2
   ```

   Em máquinas locais do Windows:

   ```
   aws autoscaling update-auto-scaling-group --auto-scaling-group-name CodeDeployDemo-AS-Group --min-size 2 --max-size 2 --desired-capacity 2
   ```

1. Verifique se o grupo do Auto Scaling possui duas instâncias do Amazon EC2. Chame o comando **describe-auto-scaling-groups** contra **CodeDeployDemo-AS-Group**:

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].[HealthStatus, LifecycleState]" --output text
   ```

   Não prossiga até que ambos os valores retornados mostrem `Healthy` e `InService`.

## Para aumentar a escala horizontalmente o número de instâncias do Amazon EC2 no grupo de implantação (console)
<a name="tutorials-auto-scaling-group-scale-up-console"></a>

1. No painel de navegação do Amazon EC2, em **Auto Scaling** selecione **Grupos do Auto Scaling** e, em seguida, a entrada. **CodeDeployDemo-AS-Group**.

1. Escolha **Ações** e, em seguida, escolha **Editar**.

1. Na guia **Details (Detalhes)**, nas caixas **Desired (Desejado)**, **Min (Mín.)** e **Max (Máx.)**, digite **2** e, em seguida, selecione** Save (Salvar)**.

1. Escolha a guia **Instâncias**. A nova instância do Amazon EC2 aparecerá na lista. (Se a instância não aparecer, talvez seja necessário escolher o botão **Atualizar** algumas vezes). Não continue até que o valor de **InService**apareça na coluna **Lifecycle** e o valor de **Healthy** apareça na coluna **Health Status**.

# Etapa 5: verificar novamente os resultados
<a name="tutorials-auto-scaling-group-reverify"></a>

Nesta etapa, você verificará se a SimpleDemoApp revisão foi CodeDeploy instalada na nova instância no grupo Auto Scaling.

**Topics**
+ [Para verificar os resultados da implantação automática (CLI)](#tutorials-auto-scaling-group-reverify-cli)
+ [Para verificar os resultados da implantação automática (console)](#tutorials-auto-scaling-group-reverify-console)

## Para verificar os resultados da implantação automática (CLI)
<a name="tutorials-auto-scaling-group-reverify-cli"></a>

1. Antes de chamar o comando **get-deployment**, será necessário o ID de implantação automática. Para obter o ID, chame o comando **list-deployments** contra o aplicativo chamado **SimpleDemoApp** e o grupo de implantação chamado **SimpleDemoDG**.

   ```
   aws deploy list-deployments --application-name SimpleDemoApp --deployment-group-name SimpleDemoDG --query "deployments" --output text
   ```

   Deve haver duas implantações IDs. Use aquele que você ainda não usou em uma chamada para o comando **get-deployment**:

   ```
   aws deploy get-deployment --deployment-id deployment-id --query "deploymentInfo.[status, creator]" --output text
   ```

   Além do status de implantação, você verá `autoScaling` na saída do comando. (`autoScaling` significa que o Amazon EC2 Auto Scaling criou a implantação.) 

   Não prossiga até que o estado da implantação mostre `Succeeded`.

1. Antes de chamar o comando **describe-instances**, você precisará da ID da nova instância do Amazon EC2. Para obter este ID, faça outra chamada para o comando **describe-auto-scaling-groups** contra **CodeDeployDemo-AS-Group**:

   ```
   aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names CodeDeployDemo-AS-Group --query "AutoScalingGroups[0].Instances[*].InstanceId" --output text
   ```

   Agora faça uma chamada para o comando **describe-instances**:

   ```
   aws ec2 describe-instances --instance-id instance-id --query "Reservations[0].Instances[0].PublicDnsName" --output text
   ```

   Na saída do comando **describe-instances**, anote o DNS público da nova instância do Amazon EC2.

1. Usando um navegador da Web, mostre a revisão do `SimpleDemoApp` implantada nessa instância do Amazon EC2 usando uma URL como a seguinte:

   ```
   http://ec2-01-234-567-890.compute-1.amazonaws.com
   ```

   Se a página de parabéns aparecer, você costumava CodeDeploy implantar uma revisão em uma instância ampliada do Amazon EC2 em um grupo de Auto Scaling\$1

## Para verificar os resultados da implantação automática (console)
<a name="tutorials-auto-scaling-group-reverify-console"></a>

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Implantações**.

   

1. Selecione a ID de implantação da implantação que o Amazon EC2 Auto Scaling criou.

   .

1.  A página **Deployment (Implantação)** exibe informações sobre a implantação. Normalmente, você criaria uma implantação por conta própria, mas o Amazon EC2 Auto Scaling criou uma para você, para implantar sua revisão na nova instância do Amazon EC2.

1. Depois que **Succeeded (Bem-sucedida)** for exibido na parte superior da página, verifique os resultados na instância. Em primeiro lugar, é necessário obter o DNS público da instância:

1. No painel de navegação do Amazon EC2, em **Auto Scaling**, selecione **Grupos do Auto Scaling** e, em seguida, a entrada. **CodeDeployDemo-AS-Group**.

1. Na guia **Instâncias**, escolha a ID da nova instância do Amazon EC2.

1. Na página **Instâncias**, na guia **Descrição**, anote o valor **DNS público**. A aparência será semelhante à seguinte: **ec2-01-234-567-890.compute-1.amazonaws.com**.

Mostre a revisão de `SimpleDemoApp` implantada na instância usando uma URL como a seguinte:

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

Se a página de parabéns aparecer, você costumava CodeDeploy implantar uma revisão em uma instância ampliada do Amazon EC2 em um grupo de Auto Scaling\$1

# Etapa 6: limpar
<a name="tutorials-auto-scaling-group-clean-up"></a>

Nesta etapa, você excluirá o grupo do Auto Scaling para evitar cobranças contínuas pelos recursos usados durante este tutorial. Opcionalmente, você pode excluir a configuração do Auto Scaling CodeDeploy e os registros do componente de implantação.

**Topics**
+ [Para limpar recursos (CLI)](#tutorials-auto-scaling-group-clean-up-cli)
+ [Para limpar recursos (console)](#tutorials-auto-scaling-group-clean-up-console)

## Para limpar recursos (CLI)
<a name="tutorials-auto-scaling-group-clean-up-cli"></a>

1. Excluir o grupo do Auto Scaling chamando o comando **delete-auto-scaling-group** contra **CodeDeployDemo-AS-Group**. Isso também terminará as instâncias do Amazon EC2. 

   ```
   aws autoscaling delete-auto-scaling-group --auto-scaling-group-name CodeDeployDemo-AS-Group --force-delete
   ```

1. Opcionalmente, exclua a configuração de execução do Auto Scaling chamando o comando **delete-launch-template** contra a configuração de execução chamada **CodeDeployDemo-AS-Launch-Template**:

   ```
   aws ec2 delete-launch-template --launch-template-name CodeDeployDemo-AS-Launch-Template
   ```

1. Opcionalmente, exclua o aplicativo CodeDeploy chamando o **delete-application** comando no aplicativo chamado**SimpleDemoApp**. Isso também excluirá todos os registros associados de implantação, grupo de implantação e revisão. 

   ```
   aws deploy delete-application --application-name SimpleDemoApp
   ```

1. Para excluir a associação do gerenciador de estados do Systems Manager, chame o comando **delete-association**.

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   Você pode obter o *association-id* chamando o **describe-association** comando.

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

## Para limpar recursos (console)
<a name="tutorials-auto-scaling-group-clean-up-console"></a>

Para excluir o grupo do Auto Scaling, que também encerra as instâncias do Amazon EC2:

1. 

   Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. No painel de navegação do Amazon EC2, em **Auto Scaling**, selecione **Grupos do Auto Scaling** e, em seguida, a entrada. **CodeDeployDemo-AS-Group**.

1. Escolha **Ações**, **Excluir** e, em seguida, **Sim, excluir**.

(Opcional) Excluir o modelo de execução:

1.  Na barra de navegação, em **Ajuste de escala automático**, selecione **Configurações de execução** e, em seguida, escolha **CodeDeployDemo-AS-Launch-Template**.

1. Escolha **Ações**, **Excluir configuração de execução** e, em seguida, **Sim, excluir**.

1. Opcionalmente, exclua o aplicativo de CodeDeploy. Isso também excluirá todos os registros associados de implantação, grupo de implantação e revisão. Abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

   No painel de navegação, expanda a opção **Implantar** e escolha **Aplicações**.

   

1. Na lista de aplicativos, selecione **SimpleDemoApp**.

1. Na página **Detalhes da aplicação**, escolha **Excluir aplicativo**.

1. Quando solicitado, digite **Delete** e escolha **Excluir**. 

Para excluir a associação do gerenciador de estados do Systems Manager:

1. Abra o AWS Systems Manager console em https://console.aws.amazon.com /systems-manager.

1. No painel de navegação, escolha **State Manager**.

1. Escolha a associação criada e selecione **Excluir**.

# Tutorial: Use CodeDeploy para implantar um aplicativo a partir de GitHub
<a name="tutorials-github"></a>

Neste tutorial, você usa CodeDeploy para implantar uma amostra de revisão do GitHub aplicativo em uma única instância do Amazon EC2 executando o Amazon Linux, uma única instância do Red Hat Enterprise Linux (RHEL) ou uma única instância do Windows Server. Para obter informações sobre GitHub integração com CodeDeploy, consulte[Integrando com CodeDeploy GitHub](integrations-partners-github.md).

**nota**  
Você também pode usar CodeDeploy para implantar uma revisão do aplicativo GitHub em uma instância do Ubuntu Server. Você pode usar a revisão de amostra descrita [Etapa 2: criar uma revisão de aplicativo de amostra](tutorials-on-premises-instance-2-create-sample-revision.md) em[Tutorial: Implantar um aplicativo em uma instância local com CodeDeploy (Windows Server, Ubuntu Server ou Red Hat Enterprise Linux)](tutorials-on-premises-instance.md), ou você pode criar uma revisão compatível com uma instância do Ubuntu Server CodeDeploy e. Para criar sua própria revisão, consulte [Planejar uma revisão para o CodeDeploy](application-revisions-plan.md) e [Adicionar um arquivo de especificação do aplicativo a uma revisão do CodeDeploy](application-revisions-appspec-file.md).

**Topics**
+ [Pré-requisitos](tutorials-github-prerequisites.md)
+ [Etapa 1: configurar uma GitHub conta](tutorials-github-create-github-account.md)
+ [Etapa 2: criar um GitHub repositório](tutorials-github-create-github-repository.md)
+ [Etapa 3: Carregar um aplicativo de amostra no seu GitHub repositório](tutorials-github-upload-sample-revision.md)
+ [Etapa 4: provisionar uma instância](tutorials-github-provision-instance.md)
+ [Etapa 5: criar um aplicativo e um grupo de implantação](tutorials-github-create-application.md)
+ [Etapa 6: implantar o aplicativo na instância](tutorials-github-deploy-application.md)
+ [Etapa 7: monitorar e verificar a implantação](tutorials-github-verify.md)
+ [Etapa 8: Limpeza](tutorials-github-clean-up.md)

# Pré-requisitos
<a name="tutorials-github-prerequisites"></a>

Antes de começar este tutorial, faça o seguinte:
+ Instale o Git na sua máquina local. Para instalar o Git, consulte [Downloads do Git](http://git-scm.com/downloads).
+ Conclua as etapas em [Começando com CodeDeploy](getting-started-codedeploy.md), incluindo a instalação e a configuração da AWS CLI. Isso é especialmente importante se você quiser usar o AWS CLI para implantar uma revisão na instância. GitHub 

# Etapa 1: configurar uma GitHub conta
<a name="tutorials-github-create-github-account"></a>

Você precisará de uma GitHub conta para criar um GitHub repositório onde a revisão será armazenada. Se você já tem uma GitHub conta, vá para[Etapa 2: criar um GitHub repositório](tutorials-github-create-github-repository.md).

1. Vá para [https://github.com/join](https://github.com).

1. Digite um nome de usuário, seu endereço de e-mail e uma senha.

1. Escolha **Inscrever-se GitHub** em e siga as instruções.

# Etapa 2: criar um GitHub repositório
<a name="tutorials-github-create-github-repository"></a>

Você precisará de um GitHub repositório para armazenar a revisão.

Se você já tem um GitHub repositório, não se esqueça de substituir seu nome por **CodeDeployGitHubDemo** todo este tutorial e, em seguida, vá para. [Etapa 3: Carregar um aplicativo de amostra no seu GitHub repositório](tutorials-github-upload-sample-revision.md) 

1. Na [página GitHub inicial](https://github.com/dashboard), faça o seguinte:
   + Em **Seus repositórios**, escolha **Novo repositório**.
   + Na barra de navegação, escolha **Criar novo** (**\$1**) e, em seguida, escolha **Novo repositório**.

1. Na página **Create a new repository**, faça o seguinte:
   + Na caixa de texto **Repository name (Nome do repositório)**, digite **CodeDeployGitHubDemo**.
   + Selecione **Public**.
**nota**  
Selecionar a opção **Público** padrão significa que qualquer pessoa pode ver esse repositório. Você pode selecionar a opção **Private (Privado)** para limitar quem pode ver e confirmar no repositório. 
   + Desmarque a caixa de seleção **Inicializar este repositório com um LEIA-ME**. Você criará um arquivo `README.md` manualmente na próxima etapa.
   + Escolha **Criar repositório**.

1. Siga as instruções para o seu tipo de máquina local de modo a usar a linha de comando para criar o repositório.
**nota**  
Se você ativou a autenticação de dois fatores GitHub, certifique-se de inserir seu token de acesso pessoal em vez de sua senha de GitHub login, caso seja solicitada uma senha. Para obter informações, consulte [Como fornecer seu código de autenticação de dois fatores](https://help.github.com/articles/providing-your-2fa-authentication-code/).

**Em máquinas Linux, macOS ou Unix locais:**

1. No terminal, execute os seguintes comandos, um por vez, onde *user-name* está seu nome de GitHub usuário:

   ```
   mkdir /tmp/CodeDeployGitHubDemo
   ```

   ```
   cd /tmp/CodeDeployGitHubDemo
   ```

   ```
   touch README.md
   ```

   ```
   git init
   ```

   ```
   git add README.md
   ```

   ```
   git commit -m "My first commit"
   ```

   ```
   git remote add origin https://github.com/user-name/CodeDeployGitHubDemo.git
   ```

   ```
   git push -u origin master
   ```

1. Deixe o terminal aberto na localização `/tmp/CodeDeployGitHubDemo`.

**Em máquinas locais do Windows:**

1. Em um prompt de comando em execução como administrador, execute os seguintes comandos, um por vez:

   ```
   mkdir c:\temp\CodeDeployGitHubDemo
   ```

   ```
   cd c:\temp\CodeDeployGitHubDemo
   ```

   ```
   notepad README.md
   ```

1. No bloco de notas, salve o arquivo `README.md`. Feche o Bloco de notas. Execute os seguintes comandos, um por vez, onde *user-name* está seu nome de GitHub usuário:

   ```
   git init
   ```

   ```
   git add README.md
   ```

   ```
   git commit -m "My first commit"
   ```

   ```
   git remote add origin https://github.com/user-name/CodeDeployGitHubDemo.git
   ```

   ```
   git push -u origin master
   ```

1. Deixe a solicitação de comando aberta na localização `c:\temp\CodeDeployGitHubDemo`.

# Etapa 3: Carregar um aplicativo de amostra no seu GitHub repositório
<a name="tutorials-github-upload-sample-revision"></a>

Nesta etapa, você copiará uma revisão de amostra de um bucket público do Amazon S3 para o seu GitHub repositório. (Para simplificar, as revisões de amostra fornecidas para este tutorial são páginas da Web exclusivas.)

**nota**  
Se você usar uma das suas revisões em vez da nossa revisão de amostra, sua revisão deverá:   
Seguir as diretrizes em [Planejar uma revisão para o CodeDeploy](application-revisions-plan.md) e [Adicionar um arquivo de especificação do aplicativo a uma revisão do CodeDeploy](application-revisions-appspec-file.md).
Trabalhar com o tipo de instância correspondente.
Esteja acessível a partir do seu GitHub painel.
Se a sua revisão atender a esses requisitos, avance para [Etapa 5: criar um aplicativo e um grupo de implantação](tutorials-github-create-application.md).  
Se você estiver implantando em uma instância do Ubuntu Server, precisará enviar para o seu GitHub repositório uma revisão compatível com uma instância do Ubuntu Server e. CodeDeploy Para obter mais informações, consulte [Planejar uma revisão para o CodeDeploy](application-revisions-plan.md) e [Adicionar um arquivo de especificação do aplicativo a uma revisão do CodeDeploy](application-revisions-appspec-file.md).

**Topics**
+ [Envie uma amostra de revisão com uma máquina Linux, macOS ou Unix local](#tutorials-github-upload-sample-revision-unixes)
+ [Enviar uma revisão de amostra de uma máquina Windows local](#tutorials-github-upload-sample-revision-windows)

## Envie uma amostra de revisão com uma máquina Linux, macOS ou Unix local
<a name="tutorials-github-upload-sample-revision-unixes"></a>

Com seu terminal ainda aberto, por exemplo, na localização `/tmp/CodeDeployGitHubDemo`, execute os seguintes comandos, um de cada vez: 

**nota**  
Se você planeja implantar em uma instância do Windows Server, substitua `SampleApp_Windows.zip` por `SampleApp_Linux.zip` nos comandos.

```
(Amazon S3 copy command)
```

```
unzip SampleApp_Linux.zip
```

```
rm SampleApp_Linux.zip
```

 

```
git add .
```

```
git commit -m "Added sample app"
```

```
git push
```

Onde *(Amazon S3 copy command)* está uma das seguintes opções: 
+ `aws s3 cp s3://aws-codedeploy-us-east-2/samples/latest/SampleApp_Linux.zip . --region us-east-2` para a região Leste dos EUA (Ohio)
+ `aws s3 cp s3://aws-codedeploy-us-east-1/samples/latest/SampleApp_Linux.zip . --region us-east-1` para a região Leste dos EUA (Norte da Virgínia)
+ `aws s3 cp s3://aws-codedeploy-us-west-1/samples/latest/SampleApp_Linux.zip . --region us-west-1` para a região Oeste dos EUA (Norte da Califórnia)
+ `aws s3 cp s3://aws-codedeploy-us-west-2/samples/latest/SampleApp_Linux.zip . --region us-west-2` para a região Oeste dos EUA (Oregon)
+ `aws s3 cp s3://aws-codedeploy-ca-central-1/samples/latest/SampleApp_Linux.zip . --region ca-central-1` para a região do Canadá (Central)
+ `aws s3 cp s3://aws-codedeploy-eu-west-1/samples/latest/SampleApp_Linux.zip . --region eu-west-1` para a região da Europa (Irlanda) 
+ `aws s3 cp s3://aws-codedeploy-eu-west-2/samples/latest/SampleApp_Linux.zip . --region eu-west-2` para a região da Europa (Londres) 
+ `aws s3 cp s3://aws-codedeploy-eu-west-3/samples/latest/SampleApp_Linux.zip . --region eu-west-3` para a região da Europa (Paris) 
+ `aws s3 cp s3://aws-codedeploy-eu-central-1/samples/latest/SampleApp_Linux.zip . --region eu-central-1` para a região da Europa (Frankfurt)
+ `aws s3 cp s3://aws-codedeploy-il-central-1/samples/latest/SampleApp_Linux.zip . --region il-central-1` para a região de Israel (Tel Aviv)
+ `aws s3 cp s3://aws-codedeploy-ap-east-1/samples/latest/SampleApp_Linux.zip . --region ap-east-1` para a região Ásia-Pacífico (Hong Kong)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-1/samples/latest/SampleApp_Linux.zip . --region ap-northeast-1` para a região Ásia-Pacífico (Tóquio)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-2/samples/latest/SampleApp_Linux.zip . --region ap-northeast-2` para a região Ásia-Pacífico (Seul)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-1/samples/latest/SampleApp_Linux.zip . --region ap-southeast-1` para a região Ásia-Pacífico (Singapura)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-2/samples/latest/SampleApp_Linux.zip . --region ap-southeast-2` para a região Ásia-Pacífico (Sydney)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-4/samples/latest/SampleApp_Linux.zip . --region ap-southeast-4` para a região Ásia-Pacífico (Melbourne)
+ `aws s3 cp s3://aws-codedeploy-ap-south-1/samples/latest/SampleApp_Linux.zip . --region ap-south-1` para a região Ásia-Pacífico (Mumbai)
+ `aws s3 cp s3://aws-codedeploy-sa-east-1/samples/latest/SampleApp_Linux.zip . --region sa-east-1` para a região da América do Sul (São Paulo)

## Enviar uma revisão de amostra de uma máquina Windows local
<a name="tutorials-github-upload-sample-revision-windows"></a>

 Com sua solicitação de comando ainda aberta, por exemplo, na localização `c:\temp\CodeDeployGitHubDemo`, execute os seguintes comandos, um de cada vez:

**nota**  
Se você planeja implantar em uma instância do Amazon Linux ou RHEL, substitua `SampleApp_Linux.zip` por `SampleApp_Windows.zip` nos comandos.

```
(Amazon S3 copy command)
```

Descompacte o conteúdo do arquivo ZIP `the` diretamente no diretório local (por exemplo `c:\temp\CodeDeployGitHubDemo`), e não em um novo subdiretório.

```
git add .
```

```
git commit -m "Added sample app"
```

```
git push
```

Onde *(Amazon S3 copy command)* está uma das seguintes opções: 
+ `aws s3 cp s3://aws-codedeploy-us-east-2/samples/latest/SampleApp_Windows.zip . --region us-east-2` para a região Leste dos EUA (Ohio)
+ `aws s3 cp s3://aws-codedeploy-us-east-1/samples/latest/SampleApp_Windows.zip . --region us-east-1` para a região Leste dos EUA (Norte da Virgínia)
+ `aws s3 cp s3://aws-codedeploy-us-west-1/samples/latest/SampleApp_Windows.zip . --region us-west-1` para a região Oeste dos EUA (Norte da Califórnia)
+ `aws s3 cp s3://aws-codedeploy-us-west-2/samples/latest/SampleApp_Windows.zip . --region us-west-2` para a região Oeste dos EUA (Oregon)
+ `aws s3 cp s3://aws-codedeploy-ca-central-1/samples/latest/SampleApp_Windows.zip . --region ca-central-1` para a região do Canadá (Central)
+ `aws s3 cp s3://aws-codedeploy-eu-west-1/samples/latest/SampleApp_Windows.zip . --region eu-west-1` para a região da Europa (Irlanda)
+ `aws s3 cp s3://aws-codedeploy-eu-west-2/samples/latest/SampleApp_Windows.zip . --region eu-west-2` para a região da Europa (Londres)
+ `aws s3 cp s3://aws-codedeploy-eu-west-3/samples/latest/SampleApp_Windows.zip . --region eu-west-3` para a região da Europa (Paris)
+ `aws s3 cp s3://aws-codedeploy-eu-central-1/samples/latest/SampleApp_Windows.zip . --region eu-central-1` para a região da Europa (Frankfurt)
+ `aws s3 cp s3://aws-codedeploy-il-central-1/samples/latest/SampleApp_Windows.zip . --region il-central-1` para a região de Israel (Tel Aviv)
+ `aws s3 cp s3://aws-codedeploy-ap-east-1/samples/latest/SampleApp_Windows.zip . --region ap-east-1` para a região Ásia-Pacífico (Hong Kong)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-1/samples/latest/SampleApp_Windows.zip . --region ap-northeast-1` para a região Ásia-Pacífico (Tóquio)
+ `aws s3 cp s3://aws-codedeploy-ap-northeast-2/samples/latest/SampleApp_Windows.zip . --region ap-northeast-2` para a região Ásia-Pacífico (Seul)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-1/samples/latest/SampleApp_Windows.zip . --region ap-southeast-1` para a região Ásia-Pacífico (Singapura)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-2/samples/latest/SampleApp_Windows.zip . --region ap-southeast-2` para a região Ásia-Pacífico (Sydney)
+ `aws s3 cp s3://aws-codedeploy-ap-southeast-4/samples/latest/SampleApp_Windows.zip . --region ap-southeast-4` para a região Ásia-Pacífico (Melbourne)
+ `aws s3 cp s3://aws-codedeploy-ap-south-1/samples/latest/SampleApp_Windows.zip . --region ap-south-1` para a região Ásia-Pacífico (Mumbai)
+ `aws s3 cp s3://aws-codedeploy-sa-east-1/samples/latest/SampleApp_Windows.zip . --region sa-east-1` para a região da América do Sul (São Paulo)

Para enviar sua própria revisão a uma instância do Ubuntu Server, copie-a no seu repositório local e depois chame o seguinte:

```
git add .
git commit -m "Added Ubuntu app"
git push
```

# Etapa 4: provisionar uma instância
<a name="tutorials-github-provision-instance"></a>

Nesta etapa, você criará ou configurará a instância na qual implantará o aplicativo de amostra. Você pode implantar em uma instância do Amazon EC2 ou em uma instância local que esteja executando um dos sistemas operacionais suportados pelo. CodeDeploy Para obter mais informações, consulte [Sistemas operacionais suportados pelo CodeDeploy agente](codedeploy-agent.md#codedeploy-agent-supported-operating-systems). (Se você já tiver uma instância configurada para uso em CodeDeploy implantações, vá para a próxima etapa.)

**Como provisionar uma instância**

1. Siga as instruções em [Iniciar uma instância do Amazon EC2 (console)](instances-ec2-create.md#instances-ec2-create-console) para provisionar uma instância.

1. Ao iniciar a instância, lembre-se de especificar uma tag na página **Adicionar tags**. Para obter detalhes sobre como especificar a tag, consulte [Iniciar uma instância do Amazon EC2 (console)](instances-ec2-create.md#instances-ec2-create-console).

**Para verificar se o CodeDeploy agente está sendo executado na instância**
+ Siga as instruções em [Verifique se o CodeDeploy agente está em execução](codedeploy-agent-operations-verify.md) para verificar se o agente está em execução.

Depois de provisionar a instância com sucesso e verificar se o CodeDeploy agente está em execução, vá para a próxima etapa.

# Etapa 5: criar um aplicativo e um grupo de implantação
<a name="tutorials-github-create-application"></a>

Nesta etapa, você usará o CodeDeploy console ou o AWS CLI para criar um aplicativo e um grupo de implantação para implantar a revisão de amostra do seu GitHub repositório.



## Criar um aplicativo e um grupo de implantação (console)
<a name="tutorials-github-create-application-console"></a>

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicativos**.

   

1. Escolha **Create application (Criar aplicativo)** e selecione **Custom application (Aplicativo personalizado)**.

1. Em **Nome do aplicativo**, insira **CodeDeployGitHubDemo-App**.

1. Em **Plataforma de computação**, selecione **EC2/On-Premises**.

1. Escolha **Criar aplicativo**.

1. Na guia **Grupos de implantação**, selecione **Criar um grupo de implantação**.

1. Em **Nome do grupo de implantação**, insira **CodeDeployGitHubDemo-DepGrp**.

1. Em **Função de serviço**, escolha o nome da sua função de CodeDeploy serviço que você criou em [Criar uma função de serviço para CodeDeploy](getting-started-create-service-role.md).

1. Em **Tipo de implantação**, selecione **No local**.

1. Em **Configuração do ambiente**, dependendo do tipo de instância que você estiver usando, selecione **Instâncias do Amazon EC2** ou **Instâncias on-premises**. Em **Key (Chave)** e **Value (Valor)**, digite a chave de tag da instância e o valor que foi aplicado à instância como parte de [Etapa 4: provisionar uma instância](tutorials-github-provision-instance.md).

1. Em **Configuração de implantação**, escolha **CodeDeployDefault. AllatOnce**.

1. Em **Balanceador de carga**, desmarque **Habilitar balanceamento de carga**.

1. Expanda **Advanced**.

1. Em **Alarms (Alarmes)**, selecione **Ignore alarm configuration (Ignorar configuração de alarme)**.

1. Selecione **Create deployment group (Criar grupo de implantação)** e continue na próxima etapa. 

## Criar um aplicativo e um grupo de implantação (CLI)
<a name="tutorials-github-create-application-cli"></a>

1. Chame o comando **create-application** para criar um aplicativo no CodeDeploy chamado `CodeDeployGitHubDemo-App`:

   ```
   aws deploy create-application --application-name CodeDeployGitHubDemo-App
   ```

1. Chame o comando **create-deployment-group** para criar um grupo de implantação chamado `CodeDeployGitHubDemo-DepGrp`:
   + Se você estiver implantando em uma instância do Amazon EC2*ec2-tag-key*, é a chave de tag da instância do Amazon EC2 que foi aplicada à sua instância do Amazon EC2 como parte do. [Etapa 4: provisionar uma instância](tutorials-github-provision-instance.md)
   + Se você estiver implantando em uma instância do Amazon EC2*ec2-tag-value*, é o valor da tag da instância do Amazon EC2 que foi aplicado à sua instância do Amazon EC2 como parte de. [Etapa 4: provisionar uma instância](tutorials-github-provision-instance.md)
   + Se você estiver implantando em uma instância local, *on-premises-tag-key* é a chave de tag da instância local que foi aplicada à sua instância local como parte de. [Etapa 4: provisionar uma instância](tutorials-github-provision-instance.md)
   + Se você estiver implantando em uma instância local, *on-premises-tag-value* é o valor da tag da instância local que foi aplicado à sua instância local como parte de. [Etapa 4: provisionar uma instância](tutorials-github-provision-instance.md)
   + *service-role-arn*é o ARN da função de serviço para a função de serviço que você criou em [Criar uma função de serviço](getting-started-create-service-role.md) para. CodeDeploy (Siga as instruções em [Obter o ARN do perfil de serviço (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli) para localizar o ARN da função de serviço.)

   ```
   aws deploy create-deployment-group --application-name CodeDeployGitHubDemo-App --ec2-tag-filters Key=ec2-tag-key,Type=KEY_AND_VALUE,Value=ec2-tag-value --on-premises-tag-filters Key=on-premises-tag-key,Type=KEY_AND_VALUE,Value=on-premises-tag-value --deployment-group-name CodeDeployGitHubDemo-DepGrp --service-role-arn service-role-arn
   ```
**nota**  
O [create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html)comando fornece suporte para a criação de acionadores que resultam no envio de notificações do Amazon SNS aos assinantes do tópico sobre eventos específicos em implantações e instâncias. O comando também oferece suporte a opções para reverter automaticamente as implantações e configurar alarmes para interromper as implantações quando os limites de monitoramento nos alarmes da CloudWatch Amazon forem atingidos. Os comandos para essas ações não estão incluídos neste tutorial.

# Etapa 6: implantar o aplicativo na instância
<a name="tutorials-github-deploy-application"></a>

Nesta etapa, você usa o CodeDeploy console ou o AWS CLI para implantar a revisão de amostra do seu GitHub repositório na sua instância. 



## Para implantar a revisão (console)
<a name="tutorials-github-deploy-application-console"></a>

1. Na página **Deployment group details (Detalhes do grupo de implantação)**, selecione **Create deployment (Criar implantação)**.

1. Em **Deployment group (Grupo de implantação)**, selecione **`CodeDeployGitHubDemo-DepGrp`**.

1. Em **Tipo de revisão**, escolha **GitHub**.

1. Em **Connect to GitHub**, faça o seguinte:
   + Para criar uma conexão entre CodeDeploy aplicativos e uma GitHub conta, saia GitHub em uma guia separada do navegador da Web. Em **GitHub Conta**, insira um nome para identificar essa conexão e escolha **Conectar GitHub** a. A página da web solicita que você autorize CodeDeploy a interação com o aplicativo GitHub chamado. `CodeDeployGitHubDemo-App` Continue na etapa 5.
   + Para usar uma conexão que você já criou, na **GitHubconta**, selecione seu nome e escolha **Conectar GitHub** a. Continue na etapa 7.
   + Para criar uma conexão com uma GitHub conta diferente, saia GitHub em uma guia separada do navegador. Escolha **Conectar a uma GitHub conta diferente** e, em seguida, escolha **Conectar GitHub** a. Continue na etapa 5.

1. Siga as instruções na página de **login** para fazer login com sua GitHub conta.

1. Na página para **Autorizar aplicativo**, escolha **Autorizar aplicativo**. 

1. Na página CodeDeploy **Criar implantação**, em **Nome do repositório**, insira o nome de GitHub usuário que você usou para entrar, seguido por uma barra (`/`), seguida pelo nome do repositório em que você enviou a revisão do aplicativo (por exemplo,). ***my-github-user-name*/CodeDeployGitHubDemo**

   Caso não tenha certeza do valor que deve ser digitado ou se quiser especificar um repositório diferente:

   1. Em uma guia separada do navegador, acesse seu [GitHub painel](https://github.com/dashboard).

   1. Em **Seus repositórios**, passe o ponteiro do mouse sobre o nome do repositório de destino. Uma dica de ferramenta aparece, exibindo o nome GitHub do usuário ou da organização, seguido por uma barra (`/`), seguida pelo nome do repositório. Digite esse valor em **Repository name (Nome do repositório)**.
**nota**  
Se o nome do repositório de destino não for exibido em **Seus repositórios**, use a GitHub caixa **Pesquisar** para encontrar o repositório de destino e o nome GitHub do usuário ou da organização.

1. Na caixa **ID da confirmação**, insira a ID da confirmação associada ao envio da revisão do seu aplicativo para GitHub.

   Caso não tenha certeza do valor que deve ser digitado:

   1. Em uma guia separada do navegador, acesse seu [GitHub painel](https://github.com/dashboard).

   1. Em **Your repositories (Seus repositórios)**, selecione **CodeDeployGitHubDemo**.

   1. Na lista de confirmações, localize e copie a ID da confirmação associada ao envio da revisão do seu aplicativo para GitHub. Em geral, esse ID tem 40 caracteres de comprimento e é formado por letras e números. (Não use a versão mais curta do ID de confirmação, que é normalmente os 10 primeiros caracteres da versão mais longa.)

   1. Cole o ID de confirmação na caixa **ID de confirmação**.

1. Escolha **Implantar** e continue até a próxima etapa. 

## Para implantar a revisão (CLI)
<a name="tutorials-github-deploy-application-cli"></a>

Antes de chamar qualquer AWS CLI comando que interaja com GitHub (como o **create-deployment** comando, que você chamará em seguida), você deve dar CodeDeploy permissão para usar sua conta de GitHub usuário GitHub para interagir com o `CodeDeployGitHubDemo-App` aplicativo. Atualmente, você deve usar o console do CodeDeploy para fazer isso.

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicações**.

   

1. Selecione **CodeDeployGitHubDemo-App**.

1. Na guia **Implantações**, selecione **Criar implantação**.
**nota**  
Você não criará uma nova implantação. Atualmente, essa é a única maneira de dar CodeDeploy permissão para interagir GitHub em nome de sua conta de GitHub usuário.

1. Em **Grupo de implantação**, escolha **CodeDeployGitHubDemo- DepGrp**.

1. Em **Tipo de revisão**, escolha **GitHub**.

1. Em **Connect to GitHub**, faça o seguinte:
   + Para criar uma conexão entre CodeDeploy aplicativos e uma GitHub conta, saia GitHub em uma guia separada do navegador da Web. Em **GitHub Conta**, digite um nome para identificar essa conexão e escolha **Conectar GitHub** a. A página da web solicita que você autorize CodeDeploy a interação com GitHub o aplicativo chamado. `CodeDeployGitHubDemo-App` Continue na etapa 8.
   + Para usar uma conexão que você já criou, na **GitHubconta**, selecione seu nome e escolha **Conectar GitHub** a. Continue na etapa 10.
   + Para criar uma conexão com uma GitHub conta diferente, saia GitHub em uma guia separada do navegador. Escolha **Conectar a uma GitHub conta diferente** e, em seguida, escolha **Conectar GitHub** a. Continue na etapa 8.

1. Siga as instruções na página de **login** para fazer login com seu nome de GitHub usuário ou e-mail e senha.

1. Na página para **Autorizar aplicativo**, escolha **Autorizar aplicativo**. 

1. Na página CodeDeploy **Criar implantação**, escolha **Cancelar**.

1. Chame o **create-deployment** comando para implantar a revisão do seu GitHub repositório na instância, onde:
   + *repository*é o nome GitHub da sua conta, seguido por uma barra (`/`), seguida pelo nome do seu repositório (`CodeDeployGitHubDemo`), por exemplo,. `MyGitHubUserName/CodeDeployGitHubDemo`

     Caso não tenha certeza do valor que deve ser usado ou se quiser especificar um repositório diferente:

     1. Em uma guia separada do navegador, acesse seu [GitHub painel](https://github.com/dashboard).

     1. Em **Seus repositórios**, passe o ponteiro do mouse sobre o nome do repositório de destino. Uma dica de ferramenta aparece, exibindo o nome GitHub do usuário ou da organização, seguido por uma barra (`/`), seguida pelo nome do repositório. Este é o valor a ser usado.
**nota**  
Se o nome do repositório de destino não aparecer em **Seus repositórios**, use a GitHub caixa **Pesquisar** para encontrar o repositório de destino e o nome de GitHub usuário ou organização correspondente.
   + *commit-id*é o commit associado à versão da revisão do aplicativo que você enviou para o seu repositório (por exemplo,`f835159a...528eb76f`). 

     Caso não tenha certeza do valor que deve ser usado:

     1. Em uma guia separada do navegador, acesse seu [GitHub painel](https://github.com/dashboard).

     1. Em **Your repositories (Seus repositórios)**, selecione **CodeDeployGitHubDemo**.

     1. Na lista de confirmações, encontre a ID da confirmação associada ao envio da revisão do seu aplicativo para GitHub. Em geral, esse ID tem 40 caracteres de comprimento e é formado por letras e números. (Não use a versão mais curta do ID de confirmação, que é normalmente os 10 primeiros caracteres da versão mais longa.) Use esse valor.

   Se você estiver trabalhando em uma máquina Linux, macOS ou Unix local:

   ```
   aws deploy create-deployment \
     --application-name CodeDeployGitHubDemo-App \
     --deployment-config-name CodeDeployDefault.OneAtATime \
     --deployment-group-name CodeDeployGitHubDemo-DepGrp \
     --description "My GitHub deployment demo" \
     --github-location repository=repository,commitId=commit-id
   ```

   Se estiver trabalhando em uma máquina Windows local:

   ```
   aws deploy create-deployment --application-name CodeDeployGitHubDemo-App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name CodeDeployGitHubDemo-DepGrp --description "My GitHub deployment demo" --github-location repository=repository,commitId=commit-id
   ```

# Etapa 7: monitorar e verificar a implantação
<a name="tutorials-github-verify"></a>

Nesta etapa, você usará o CodeDeploy console ou o AWS CLI para verificar o sucesso da implantação. Você usará seu navegador da Web para visualizar a página da Web que foi implantada na instância que você criou ou configurou.

**nota**  
Se estiver implantando em uma instância do Ubuntu Server, use sua própria estratégia de teste para determinar se a revisão implantada funciona conforme esperado na instância e depois continue na próxima etapa.

**Para monitorar e verificar a implantação (console)**

1. No painel de navegação, expanda a opção **Implantar** e escolha **Implantações**.

   

1. **Na lista de implantações, procure a linha com um valor de **aplicativo** de **CodeDeployGitHubDemo-App** e um valor de **grupo de implantação** de CodeDeployGitHubDemo -. DepGrp** Se **Bem-sucedido** ou **Falha** não aparecer na coluna **Status**, clique no botão **Atualizar** periodicamente.

1. Se **Falha** aparecer na coluna **Status**, siga as instruções em [Exibir detalhes da instância (console)](instances-view-details.md#instances-view-details-console) para solucionar problemas com a implantação.

1. Se **Bem-sucedido** aparecer na coluna **Status**, você poderá verificar a implantação no seu navegador da Web. Nossa revisão de amostra implanta uma única página da Web na instância. Se estiver implantando em uma instância do Amazon EC2, no seu navegador da Web, acesse `http://public-dns` para a instância (por exemplo, `http://ec2-01-234-567-890.compute-1.amazonaws.com`).

1. Se conseguir ver a página da Web, parabéns\$1 Agora que você usou com sucesso AWS CodeDeploy para implantar uma revisão do GitHub, você pode pular para[Etapa 8: Limpeza](tutorials-github-clean-up.md).

**Para monitorar e verificar a implantação (CLI)**

1. Chame o comando **list-deployments** para obter o ID de implantação do aplicativo chamado `CodeDeployGitHubDemo-App` e o grupo de implantação chamado `CodeDeployGitHubDemo-DepGrp`:

   ```
   aws deploy list-deployments --application-name CodeDeployGitHubDemo-App --deployment-group-name CodeDeployGitHubDemo-DepGrp --query "deployments" --output text
   ```

1. Chame o comando **get-deployment**, fornecendo o ID de implantação na saída do comando **list-deployments**:

   ```
   aws deploy get-deployment --deployment-id deployment-id --query "deploymentInfo.[status, creator]" --output text
   ```

1. Se **Falha** for retornado, siga as instruções em [Exibir detalhes da instância (console)](instances-view-details.md#instances-view-details-console) para solucionar a implantação.

1. Se **Bem-sucedido** for retornado, você poderá tentar verificar a implantação no seu navegador da Web. Nossa revisão de amostra é uma única página da Web implantada na instância. Se você estiver implantando em uma instância do Amazon EC2, poderá visualizar essa página no seu navegador da Web acessando `http://public-dns` para a instância do Amazon EC2 (por exemplo, `http://ec2-01-234-567-890.compute-1.amazonaws.com`).

1. Se conseguir ver a página da Web, parabéns\$1 Você usou com sucesso AWS CodeDeploy para implantar a partir do seu GitHub repositório.

# Etapa 8: Limpeza
<a name="tutorials-github-clean-up"></a>

Para evitar cobranças adicionais pelos recursos usados durante esse tutorial, você deve encerrar a instância do Amazon EC2 e seus recursos associados. Opcionalmente, você pode excluir os registros de componentes de implantação do CodeDeploy associados a esse tutorial. Se você estava usando um GitHub repositório apenas para este tutorial, você também pode excluí-lo agora.

## Para excluir uma CloudFormation pilha (se você usou o CloudFormation modelo para criar uma instância do Amazon EC2)
<a name="tutorials-github-clean-up-cloudformation-template"></a>

1. Faça login no Console de gerenciamento da AWS e abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na coluna **Stacks (Pilhas)** escolha a pilha que começa com `CodeDeploySampleStack`.

1. Escolha **Excluir**.

1. Quando solicitado, escolha **Excluir pilha**. A instância do Amazon EC2 e o perfil de serviço e o perfil de instância do IAM associados são excluídos.

## Para cancelar o registro manualmente e limpar uma instância local (caso você tenha provisionado uma instância local)
<a name="tutorials-github-clean-up-on-premises-instance"></a>

1. Use o AWS CLI para chamar o comando [de cancelamento de registro](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister.html) na instância local representada aqui por *your-instance-name* e na região associada por: *your-region*

   ```
   aws deploy deregister --instance-name your-instance-name --no-delete-iam-user --region your-region
   ```

1. Na instância on-premises, chame o comando [desinstalar](https://docs.aws.amazon.com/cli/latest/reference/deploy/uninstall.html):

   ```
   aws deploy uninstall
   ```

## Para encerrar manualmente uma instância do Amazon EC2 (caso você tenha iniciado manualmente uma instância do Amazon EC2)
<a name="tutorials-github-clean-up-ec2-instance"></a>

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon EC2 em. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. No painel de navegação, em **Instâncias**, escolha **Instâncias**.

1. Marque a caixa ao lado da instância do Amazon EC2 que você deseja encerrar. No menu **Ações**, selecione **Estado da instância** e escolha **Encerrar**.

1. Quando solicitado, escolha **Sim, Encerrar**. 

## Para excluir os registros do componente de CodeDeploy implantação
<a name="tutorials-github-clean-up-codedeploy-records"></a>

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy).
**nota**  
Faça login com o mesmo usuário que você configurou em [Começando com CodeDeploy](getting-started-codedeploy.md).

1. No painel de navegação, expanda a opção **Implantar** e escolha **Aplicações**.

   

1. Selecione **CodeDeployGitHubDemo-App**.

1. Selecione **Excluir aplicativo**.

1. Quando solicitado, digite **Delete** e escolha **Excluir**. 

## Para excluir seu GitHub repositório
<a name="tutorials-github-clean-up-github-repository"></a>

[Consulte [Excluindo um repositório na GitHub ajuda](https://help.github.com/articles/deleting-a-repository/).](https://help.github.com)

# Tutorial: Implantar um aplicativo no Amazon ECS
<a name="tutorial-ecs-deployment"></a>

 Neste tutorial, você aprende como implantar um aplicativo no Amazon ECS usando CodeDeploy. Você começa com um aplicativo que já criou e implantou no Amazon ECS. A primeira etapa é atualizar o aplicativo modificando seu arquivo de definição de tarefa com uma nova tag. Em seguida, você usa CodeDeploy para implantar a atualização. Durante a implantação, CodeDeploy instala sua atualização em um novo conjunto de tarefas de substituição. Depois, ele muda o tráfego de produção da versão original do serviço do seu aplicativo do Amazon ECS, que está em seu conjunto de tarefas original, para a versão atualizada no conjunto de tarefas de substituição.

 Durante uma implantação do Amazon ECS, CodeDeploy usa um balanceador de carga configurado com dois grupos-alvo e um ouvinte de tráfego de produção. O diagrama a seguir mostra como o balanceador de carga, o receptor de produção, os grupos de destino e o aplicativo do Amazon ECS são relacionados antes do início da implantação. Este tutorial usa um Application Load Balancer. Você também pode usar um Network Load Balancer. 

![\[O Application Load Balancer ou o Network Load Balancer, um receptor de produção, dois grupos de destino, um conjunto de tarefas e um serviço do Amazon ECS.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-1.png)


 Após uma implantação bem-sucedida, o listener do tráfego de produção atende ao tráfego do novo conjunto de tarefas de substituição e o conjunto de tarefas original é encerrado. O diagrama a seguir mostra como seus recursos estão relacionados após uma implantação bem-sucedida. Para obter mais informações, consulte [O que acontece durante uma implantação do](deployment-steps-ecs.md#deployment-steps-what-happens). 

![\[O Application Load Balancer ou o Network Load Balancer, um receptor de produção, dois grupos de destino e um conjunto de tarefas de substituição.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-5.png)


Para obter informações sobre como usar o AWS CLI para implantar um aplicativo no Amazon ECS, consulte [Tutorial: Criando um serviço usando uma blue/green implantação](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html). Para obter informações sobre como usar CodePipeline para detectar e implantar automaticamente alterações em um serviço do Amazon ECS com CodeDeploy, consulte [Tutorial: Criar um pipeline com uma fonte e ECS-to-CodeDeploy implantação do Amazon ECR.](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html) 

Depois de concluir este tutorial, você pode usar o CodeDeploy aplicativo e o grupo de implantação que você criou para adicionar um teste de validação de implantação[Tutorial: Implantar um serviço do Amazon ECS com um teste de validação](tutorial-ecs-deployment-with-hooks.md). 

**Topics**
+ [Pré-requisitos](tutorial-ecs-prereqs.md)
+ [Etapa 1: Atualizar o código do aplicativo do Amazon ECS](tutorial-ecs-update-the-ecs-application.md)
+ [Etapa 2: criar o AppSpec arquivo](tutorial-ecs-create-appspec-file.md)
+ [Etapa 3: usar o CodeDeploy console para implantar seu aplicativo](tutorial-ecs-deployment-deploy.md)
+ [Etapa 4: limpar](tutorial-ecs-clean-up.md)

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

Para concluir este tutorial, você deve primeiramente:
+  Concluir as etapas 2 e 3 em [Começando com CodeDeploy](getting-started-codedeploy.md). 
+  Criar um Application Load Balancer configurado com dois grupos de destino e um receptor. Para obter informações sobre como criar um load balancer usando o console, consulte [Configure um balanceador de carga, grupos-alvo e ouvintes para implantações do CodeDeploy Amazon ECS](deployment-groups-create-load-balancer-for-ecs.md). Para obter informações sobre como criar um balanceador de carga usando o AWS CLI, consulte [Etapa 1: Criar um Application Load Balancer no Guia](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html#create-blue-green-loadbalancer) do usuário do *Amazon Elastic Container Service*. Ao criar o load balancer, anote o seguinte para este tutorial: 
  +  O nome do seu load balancer. 
  +  Os nomes dos seus grupos de destino. 
  +  A porta usada pelo listener do load balancer. 
+  Crie um cluster e serviço do Amazon ECS. Para obter mais informações, consulte as etapas 2, 3 e 4 no [Tutorial: Criando um serviço usando uma blue/green implantação](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html) no *Guia do usuário do Amazon Elastic Container Service*. Anote o seguinte para este tutorial: 
  +  O nome do cluster do Amazon ECS. 
  +  O ARN da definição de tarefa usado pelo serviço do Amazon ECS. 
  +  O nome do contêiner usado pelo serviço do Amazon ECS. 
+  Crie um bucket do Amazon S3 para seu AppSpec arquivo. 

# Etapa 1: Atualizar o código do aplicativo do Amazon ECS
<a name="tutorial-ecs-update-the-ecs-application"></a>

 Nesta seção, você atualiza o aplicativo do Amazon ECS com uma nova revisão de sua definição de tarefa. A revisão atualizada adiciona um novo par de chave e tag. No [Etapa 3: usar o CodeDeploy console para implantar seu aplicativo](tutorial-ecs-deployment-deploy.md), você implanta a versão atualizada do aplicativo do Amazon ECS. 

**Para atualizar a definição da tarefa**

1. Abra o console na [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1.  No painel de navegação, selecione **Definições de tarefas**. 

1. Escolha a definição de tarefa usada pelo serviço do Amazon ECS.

1. Selecione a revisão da definição de tarefa e escolha **Criar nova revisão**, **Criar nova revisão**.

1.  Para este tutorial, faça uma pequena atualização na definição de tarefa adicionando uma tag. Na parte inferior da página, em **Tags**, crie uma nova tag inserindo um novo par de chave e valor. 

1.  Escolha **Criar**. 

   O número de revisão da definição da sua tarefa foi incrementado em um. 

1.  Selecione a guia **JSON**. Anote o seguinte, pois você precisará dessas informações na próxima etapa. 
   +  O valor de `taskDefinitionArn`. O formato é `arn:aws:ecs:aws-region:account-id:task-definition/task-definition-family:task-definition-revision`. Esse é o ARN da sua definição de tarefa atualizada. 
   +  No elemento `containerDefinitions`, o valor de `name`. Esse é o nome do contêiner. 
   +  No elemento `portMappings`, o valor de `containerPort`. Essa é a porta do contêiner. 

# Etapa 2: criar o AppSpec arquivo
<a name="tutorial-ecs-create-appspec-file"></a>

 Nesta seção, você cria seu AppSpec arquivo e o carrega no bucket do Amazon S3 que você criou na [Pré-requisitos](tutorial-ecs-prereqs.md) seção. O AppSpec arquivo para uma implantação do Amazon ECS especifica a definição da tarefa, o nome do contêiner e a porta do contêiner. Para obter mais informações, consulte [AppSpec Exemplo de arquivo para uma implantação do Amazon ECS](reference-appspec-file-example.md#appspec-file-example-ecs) e [AppSpec seção 'recursos' para implantações do Amazon ECS](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs). 

**Para criar seu AppSpec arquivo**

1.  Se você quiser criar seu AppSpec arquivo usando YAML, crie um arquivo chamado`appspec.yml`. Se você quiser criar seu AppSpec arquivo usando JSON, crie um arquivo chamado`appspec.json`. 

1.  Escolha a guia apropriada, dependendo se você usa YAML ou JSON para seu AppSpec arquivo, e copie o conteúdo para o AppSpec arquivo que você acabou de criar. Para a propriedade `TaskDefinition`, use o ARN da definição de tarefa que você anotou na seção [Etapa 1: Atualizar o código do aplicativo do Amazon ECS](tutorial-ecs-update-the-ecs-application.md). 

------
#### [ JSON AppSpec ]

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "your-container-name",
               "ContainerPort": your-container-port
             }
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "your-container-name"
             ContainerPort: your-container-port
   ```

------
**nota**  
 O conjunto de tarefas de substituição herda a sub-rede, o grupo de segurança, a versão da plataforma e os valores de IP públicos atribuídos de seu conjunto de tarefas original. Você pode substituir esses valores para seu conjunto de tarefas de substituição definindo suas propriedades opcionais em seu AppSpec arquivo. Para obter mais informações, consulte [AppSpec seção 'recursos' para implantações do Amazon ECS](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs) e [AppSpec Exemplo de arquivo para uma implantação do Amazon ECS](reference-appspec-file-example.md#appspec-file-example-ecs). 

1.  Faça upload AppSpec do arquivo para o bucket do S3 que você criou como pré-requisito para este tutorial. 

# Etapa 3: usar o CodeDeploy console para implantar seu aplicativo
<a name="tutorial-ecs-deployment-deploy"></a>

 Nesta seção, você cria um CodeDeploy aplicativo e um grupo de implantação para implantar seu aplicativo atualizado no Amazon ECS. Durante a implantação, CodeDeploy transfere o tráfego de produção do seu aplicativo para sua nova versão em um novo conjunto de tarefas de substituição. Para concluir esta etapa, você precisa dos seguintes itens: 
+  O nome do cluster do Amazon ECS. 
+  O nome do serviço do Amazon ECS. 
+  O nome do Application Load Balancer. 
+  A porta do listener de produção. 
+  Os nomes dos grupos de destino. 
+  O nome do bucket do S3 que você criou. 

**Para criar um CodeDeploy aplicativo**

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy/](https://console.aws.amazon.com/codedeploy/).

1. Escolha **Criar aplicativo**.

1. Em **Nome do aplicativo**, insira **ecs-demo-codedeploy-app**.

1. Em **Compute platform (Plataforma de computação)**, selecione **Amazon ECS**.

1. Escolha **Criar aplicativo**.

**Para criar um grupo CodeDeploy de implantação**

1. Na guia **Deployment groups (Grupos de implantação)** da página do aplicativo, escolha **Create deployment group (Criar grupo de implantação)**.

1. Em **Nome do grupo de implantação**, insira **ecs-demo-dg**.

1. Em **Função de serviço**, escolha uma função de serviço que conceda CodeDeploy acesso ao Amazon ECS. Para obter mais informações, consulte [Gerenciamento de identidade e acesso para AWS CodeDeploy](security-iam.md).

1. Em **Configuração de ambiente**, selecione os nomes de cluster e serviço do Amazon ECS.

1. Em **Balanceadores de carga**, escolha o nome do balanceador de carga que distribui o tráfego para seu serviço do Amazon ECS.

1. Em **Porta do listener de produção**, escolha a porta e o protocolo do receptor que atende ao tráfego de produção para o serviço do Amazon ECS (por exemplo, **HTTP: 80**). Este tutorial não inclui um listener de teste opcional, portanto, não escolha uma porta em **Test listener port (Porta do listener de teste)**. 

1. Em **Target group 1 name (Nome do grupo de destino 1)** e **Target group 2 name (Nome do grupo de destino 2)**, escolha dois grupos de destino diferentes para rotear o tráfego durante a implantação. Certifique-se de que esses são os grupos de destino criados para o load balancer. Não importa qual é usado para o grupo de destino 1 nem qual é usado para o grupo de destino 2.

1. Escolha **Reroute traffic immediately (Redirecionar tráfego imediatamente)**.

1. Em **Original revision termination (Encerramento da revisão original)**, escolha 0 dias, 0 horas e 5 minutos. Isso permite que você veja a implantação concluída mais rapidamente do que se você usar o padrão (1 hora).  
![\[A seção de configuração do ambiente do CodeDeploy console.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/ecs-demo-create-acd-dg.png)

1. Selecione **Criar grupo de implantação**.

**Para implantar o aplicativo do Amazon ECS**

1. Na página do console do grupo de implantação, escolha **Criar implantação**.

1.  Em **Grupo de implantação**, escolha **ecs-demo-dg**. 

1.  Em **Tipo de revisão**, escolha **Meu aplicativo está armazenado no Amazon S3**. Em **Revision location, (Local da revisão)**, insira o nome do bucket do S3. 

1.  Em **Tipo de arquivo de revisão**, escolha **.json** ou **.yaml**, conforme apropriado. 

1.  (Opcional) Em **Descrição da implantação**, digite uma descrição para a implantação. 

1. Escolha **Criar implantação**.

1.  Em **Deployment status (Status da implantação)**, é possível monitorar a implantação. Depois que 100% do tráfego de produção for roteado para o conjunto de tarefas de substituição e antes do tempo de espera de cinco minutos expirar, você poderá escolher **Encerrar conjunto de tarefas original** para encerrar imediatamente o conjunto de tarefas original. Se você não escolher **Terminate original task set (Encerrar conjunto de tarefas original)**, o conjunto de tarefas original será encerrado após o tempo de espera de cinco minutos especificado expirar.  
![\[A seção de status de implantação do CodeDeploy console.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-without-test-listener.png)

# Etapa 4: limpar
<a name="tutorial-ecs-clean-up"></a>

 O próximo tutorial, [Tutorial: Implantar um serviço do Amazon ECS com um teste de validação](tutorial-ecs-deployment-with-hooks.md), se baseia neste tutorial e usa o aplicativo do CodeDeploy e o grupo de implantação que você criou. Se você quiser seguir as etapas desse tutorial, ignore esta etapa e não exclua os recursos que você criou. 

**nota**  
 Sua AWS conta não incorre em cobranças pelos CodeDeploy recursos que você criou. 

Os nomes dos recursos nessas etapas são os nomes sugeridos neste tutorial (por exemplo, **ecs-demo-codedeploy-app** para o nome do seu CodeDeploy aplicativo). Se você tiver usado nomes diferentes, certifique-se de usá-los durante a limpeza. 

1. Use o [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html)comando para excluir o grupo CodeDeploy de implantação.

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-codedeploy-app --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. Use o comando [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) para excluir o aplicativo. CodeDeploy 

   ```
   aws deploy delete-application --application-name ecs-demo-codedeploy-app --region aws-region-id
   ```

# Tutorial: Implantar um serviço do Amazon ECS com um teste de validação
<a name="tutorial-ecs-deployment-with-hooks"></a>

 Neste tutorial, você aprenderá como usar uma função do Lambda para validar parte da implantação de um aplicativo do Amazon ECS atualizado. Este tutorial usa o CodeDeploy aplicativo, o grupo de CodeDeploy implantação e o aplicativo Amazon ECS em [Tutorial: Implantar um aplicativo no Amazon ECS](tutorial-ecs-deployment.md) que você usou. Conclua esse tutorial antes de iniciar o seguinte.

 Para adicionar o teste de validação, primeiro implemente o teste em uma função do Lambda. Em seguida, em seu AppSpec arquivo de implantação, você especifica a função Lambda para o gancho de ciclo de vida que deseja testar. Se um teste de validação falhar, a implantação será interrompida, revertida e marcada como com falha. Se o teste for bem-sucedido, a implantação continuará para o próximo evento do ciclo de vida da implantação ou gancho. 

 Durante uma implantação do Amazon ECS com testes de validação, CodeDeploy usa um balanceador de carga configurado com dois grupos-alvo: um ouvinte de tráfego de produção e um ouvinte de tráfego de teste. O diagrama a seguir mostra como o balanceador de carga, os receptores de produção e de teste, os grupos de destino e o aplicativo do Amazon ECS são relacionados antes do início da implantação. Este tutorial usa um Application Load Balancer. Você também pode usar um Network Load Balancer. 

![\[As conexões entre o Application Load Balancer ou o Network Load Balancer, os receptores, os grupos de destino, o conjunto de tarefas e o serviço Amazon ECS.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-1.png)


 Durante uma implantação do Amazon ECS, há cinco ganchos do ciclo de vida para testes. Este tutorial implementa um teste durante o terceiro gancho de implantação de ciclo de vida, `AfterAllowTestTraffic`. Para obter mais informações, consulte [Lista de hooks do evento do ciclo de vida para uma implantação Amazon ECS](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs). Após uma implantação bem-sucedida, o listener do tráfego de produção atende ao tráfego do novo conjunto de tarefas de substituição e o conjunto de tarefas original é encerrado. O diagrama a seguir mostra como seus recursos estão relacionados após uma implantação bem-sucedida. Para obter mais informações, consulte [O que acontece durante uma implantação do](deployment-steps-ecs.md#deployment-steps-what-happens). 

![\[As conexões entre o Application Load Balancer ou o Network Load Balancer, os receptores, os grupos de destino e o conjunto de tarefas de substituição após uma implantação.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-6.png)


**nota**  
A conclusão deste tutorial pode resultar em cobranças em sua AWS conta. Isso inclui possíveis cobranças de CodeDeploy AWS Lambda, CloudWatch e. Para obter mais informações, consulte [AWS CodeDeploy preços](https://aws.amazon.com/codedeploy/pricing/), [AWS Lambda preços](https://aws.amazon.com/lambda/pricing/) e [ CloudWatch preços da Amazon](https://aws.amazon.com/cloudwatch/pricing/).

**Topics**
+ [Pré-requisitos](tutorial-ecs-with-hooks-prereqs.md)
+ [Etapa 1: Criar um receptor de teste](tutorial-ecs-with-hooks-create-second-listener.md)
+ [Etapa 2: Atualizar o código do aplicativo do Amazon ECS](tutorial-ecs-with-hooks-update-the-ecs-application.md)
+ [Etapa 3: Criar uma função do Lambda de gancho do ciclo de vida](tutorial-ecs-with-hooks-create-hooks.md)
+ [Etapa 4: atualize seu AppSpec arquivo](tutorial-ecs-with-hooks-create-appspec-file.md)
+ [Etapa 5: Use o CodeDeploy console para implantar seu serviço Amazon ECS](tutorial-ecs-with-hooks-deployment.md)
+ [Etapa 6: Visualize a saída da função Lambda hook em Logs CloudWatch](tutorial-ecs-with-hooks-view-cw-logs.md)
+ [Etapa 7: limpar](tutoria-ecs-with-hooks-clean-up.md)

# Pré-requisitos
<a name="tutorial-ecs-with-hooks-prereqs"></a>

Para concluir este tutorial com êxito, você deve primeiro:
+  Atenda os pré-requisitos em [Pré-requisitos](tutorial-ecs-prereqs.md) para [Tutorial: Implantar um aplicativo no Amazon ECS](tutorial-ecs-deployment.md). 
+  Siga as etapas em [Tutorial: Implantar um aplicativo no Amazon ECS](tutorial-ecs-deployment.md). Anote o seguinte: 
  +  O nome do seu load balancer. 
  +  Os nomes dos seus grupos de destino. 
  +  A porta usada pelo listener do load balancer. 
  +  O ARN do load balancer. Você o usará para criar um novo listener. 
  +  O ARN de um de seus grupos de destino. Você o usará para criar um novo listener. 
  +  O CodeDeploy aplicativo e o grupo de implantação que você cria. 
  +  O AppSpec arquivo que você cria e que é usado pela sua CodeDeploy implantação. Edite esse arquivo neste tutorial. 

# Etapa 1: Criar um receptor de teste
<a name="tutorial-ecs-with-hooks-create-second-listener"></a>

 Uma implantação do Amazon ECS com testes de validação requer um segundo receptor. Esse receptor é usado para atender ao tráfego de teste para seu aplicativo do Amazon ECS atualizado em um conjunto de tarefas de substituição. Os testes de validação são executados no tráfego de teste. 

 O listener do tráfego de teste pode usar qualquer um de seus grupos de destino. Use o AWS CLI comando [create-listener](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-listener.html) para criar um segundo ouvinte com uma regra padrão que encaminha o tráfego de teste para a porta 8080. Use o ARN do load balancer e o ARN de um de seus grupos de destino.

```
aws elbv2 create-listener --load-balancer-arn your-load-balancer-arn \
--protocol HTTP --port 8080 \
--default-actions Type=forward,TargetGroupArn=your-target-group-arn --region your-aws-region
```

# Etapa 2: Atualizar o código do aplicativo do Amazon ECS
<a name="tutorial-ecs-with-hooks-update-the-ecs-application"></a>

 Nesta seção, você atualiza o aplicativo do Amazon ECS para usar uma nova revisão de sua definição de tarefa. Você cria a nova revisão e adiciona uma atualização secundária a ela adicionando uma tag. 

**Para atualizar a definição da tarefa**

1. Abra o console clássico do Amazon ECS em [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/).

1.  No painel de navegação, selecione **Definições de tarefas**. 

1.  Marque a caixa de seleção da definição da tarefa usada pelo serviço do Amazon ECS.

1.  Escolha **Create new revisional (Criar nova revisão)**. 

1.  Faça uma pequena atualização na definição da tarefa adicionando uma tag. Na parte inferior da página, em **Tags**, crie uma nova tag inserindo um novo par de chave e valor. 

1.  Escolha **Criar**. Você deve ver que o número de revisão da definição da tarefa foi incrementado em um. 

1.  Selecione a guia **JSON**. Anote o valor de `taskDefinitionArn`. O formato é `arn:aws:ecs:aws-region: account-id:task-definition/task-definition-family: task-definition-revision`. Esse é o ARN da sua definição de tarefa atualizada. 

# Etapa 3: Criar uma função do Lambda de gancho do ciclo de vida
<a name="tutorial-ecs-with-hooks-create-hooks"></a>

Nesta seção, você implementa uma função do Lambda para o hook do `AfterAllowTestTraffic` da implantação do Amazon ECS. A função do Lambda executa um teste de validação antes do aplicativo do Amazon ECS atualizado ser instalado. Para este tutorial, a função do Lambda retorna `Succeeded`. Durante uma implantação do mundo real, os testes de validação retornam `Succeeded` ou `Failed`, dependendo do resultado do teste de validação. Além disso, durante uma implantação do mundo real, você pode implementar uma função de teste do Lambda para um ou mais dos outros hooks de evento do ciclo de vida da implantação do Amazon ECS (`BeforeInstall`, `AfterInstall`, `BeforeAllowTraffic` e `AfterAllowTraffic`). Para obter mais informações, consulte [Lista de hooks do evento do ciclo de vida para uma implantação Amazon ECS](reference-appspec-file-structure-hooks.md#reference-appspec-file-structure-hooks-list-ecs).

 Um perfil do IAM é necessário para criar a função do Lambda. A função concede à função Lambda permissão para gravar em CloudWatch registros e definir o status de um gancho do ciclo de CodeDeploy vida. 

**Para criar um perfil do IAM**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, escolha **Roles (Funções)** e **Create role (Criar função)**.

1.  Crie uma função com as seguintes propriedades: 
   +  **Trusted entity (Entidade confiável)**: **AWS Lambda**. 
   +  **Permissões**: **AWSLambdaBasicExecutionRole**. Isso concede à sua função Lambda permissão para CloudWatch gravar em registros. 
   +  **Nome da função**: **`lambda-cli-hook-role`**. 

   Para obter mais informações, consulte [Criar uma função AWS Lambda de execução](https://docs.aws.amazon.com/lambda/latest/dg/with-userapp.html#with-userapp-walkthrough-custom-events-create-iam-role). 

1.  Anexe a permissão `codedeploy:PutLifecycleEventHookExecutionStatus` à função que você criou. Isso concede às suas funções do Lambda permissão para definir o status de um gancho do CodeDeploy ciclo de vida durante uma implantação. Para obter mais informações, consulte [Adicionar permissões de identidade do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) no *Guia AWS Identity and Access Management do usuário* e [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html)na *Referência da CodeDeploy API*. 

**Como criar uma função do Lambda de hook do `AfterAllowTestTraffic`**

1.  Crie um arquivo denominado `AfterAllowTestTraffic.js` com os conteúdos a seguir. 

   ```
   'use strict';
    
    const AWS = require('aws-sdk');
    const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
    
    exports.handler = (event, context, callback) => {
    
    	console.log("Entering AfterAllowTestTraffic hook.");
    	
    	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
     var deploymentId = event.DeploymentId;
    	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
    	var validationTestResult = "Failed";
    	
    	// Perform AfterAllowTestTraffic validation tests here. Set the test result 
    	// to "Succeeded" for this tutorial.
    	console.log("This is where AfterAllowTestTraffic validation tests happen.")
    	validationTestResult = "Succeeded";
    	
    	// Complete the AfterAllowTestTraffic hook by sending CodeDeploy the validation status
    	var params = {
    		deploymentId: deploymentId,
    		lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
    		status: validationTestResult // status can be 'Succeeded' or 'Failed'
    	};
    	
    	// Pass CodeDeploy the prepared validation test results.
    	codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
    		if (err) {
    			// Validation failed.
    			console.log('AfterAllowTestTraffic validation tests failed');
    			console.log(err, err.stack);
    			callback("CodeDeploy Status update failed");
    		} else {
    			// Validation succeeded.
    			console.log("AfterAllowTestTraffic validation tests succeeded");
    			callback(null, "AfterAllowTestTraffic validation tests succeeded");
    		}
    	});
    }
   ```

1.  Crie um pacote de implantação do Lambda. 

   ```
   zip AfterAllowTestTraffic.zip AfterAllowTestTraffic.js 
   ```

1.  Use o comando `create-function` para criar uma função do Lambda para o hook do `AfterAllowTestTraffic`. 

   ```
   aws lambda create-function --function-name AfterAllowTestTraffic \
          --zip-file fileb://AfterAllowTestTraffic.zip \
          --handler AfterAllowTestTraffic.handler \
          --runtime nodejs10.x \
          --role arn:aws:iam::aws-account-id:role/lambda-cli-hook-role
   ```

1.  Anote o ARN da função do Lambda na resposta do `create-function`. Você usa esse ARN ao atualizar o AppSpec arquivo de CodeDeploy implantação na próxima etapa. 

# Etapa 4: atualize seu AppSpec arquivo
<a name="tutorial-ecs-with-hooks-create-appspec-file"></a>

 Nesta seção, você atualiza seu AppSpec arquivo com uma `Hooks` seção. Na seção de `Hooks`, você especifica uma função do Lambda para o gancho do ciclo de vida do `AfterAllowTestTraffic`. 

**Para atualizar seu AppSpec arquivo**

1.  Abra o AppSpec arquivo que você criou no [Etapa 2: criar o AppSpec arquivo](tutorial-ecs-create-appspec-file.md)[Tutorial: Implantar um aplicativo no Amazon ECS](tutorial-ecs-deployment.md). 

1.  Atualize a propriedade `TaskDefinition` com o ARN da definição de tarefa anotado em [Etapa 2: Atualizar o código do aplicativo do Amazon ECS](tutorial-ecs-with-hooks-update-the-ecs-application.md). 

1. Copie e cole a `Hooks` seção em seu AppSpec arquivo. Atualize o ARN depois do `AfterAllowTestTraffic` com o ARN da função do Lambda que você anotou no [Etapa 3: Criar uma função do Lambda de gancho do ciclo de vida](tutorial-ecs-with-hooks-create-hooks.md). 

------
#### [ JSON AppSpec ]

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "sample-website",
               "ContainerPort": 80
             }
           }
         }
       }
     ],
     "Hooks": [
       {
         "AfterAllowTestTraffic": "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id::task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "sample-website"
             ContainerPort: 80
   Hooks:
     - AfterAllowTestTraffic: "arn:aws:lambda:aws-region-id:aws-account-id:function:AfterAllowTestTraffic"
   ```

------

1.  Salve seu AppSpec arquivo e faça o upload para o bucket do S3. 

# Etapa 5: Use o CodeDeploy console para implantar seu serviço Amazon ECS
<a name="tutorial-ecs-with-hooks-deployment"></a>

 Nesta seção, você atualiza o grupo de implantação especificando a porta do listener de teste. Esse é o listener que você criou em [Etapa 1: Criar um receptor de teste](tutorial-ecs-with-hooks-create-second-listener.md). Durante a implantação, o CodeDeploy executa o teste de validação durante o gancho de ciclo de vida da implantação `AfterAllowTestTraffic` usando o tráfego de teste fornecido a seu conjunto de tarefas de substituição usando o listener de teste. O teste de validação retorna o resultado `Succeeded`, portanto, a implantação prossegue com o próximo evento de ciclo de vida da implantação. Em um cenário do mundo real, sua função de teste retorna `Succeeded` ou `Failed`. 

**Para adicionar um listener de teste ao grupo de implantação**

1. Faça login no Console de gerenciamento da AWS e abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy/](https://console.aws.amazon.com/codedeploy/).

1. No painel de navegação, selecione **Applications (Aplicativos)**. 

1. Escolha o aplicativo que você criou em [Tutorial: Implantar um aplicativo no Amazon ECS](tutorial-ecs-deployment.md). Se você usou o nome sugerido, ele será **ecs-demo-codedeploy-app**.

1. Em **Deployment groups (Grupos de implantação)**, selecione o grupo de implantação que você criou em [Tutorial: Implantar um aplicativo no Amazon ECS](tutorial-ecs-deployment.md), Se você usou o nome sugerido, ele será **ecs-demo-dg**.

1.  Escolha **Editar**. 

1. Em **Test listener port (Porta do listener de teste)**, escolha a porta e o protocolo para o listener de teste que você criou anteriormente neste tutorial. Ela deve ser **HTTP: 8080**. 

1.  Escolha **Salvar alterações**. 

**Para implantar o aplicativo do Amazon ECS**

1. Na página do console do grupo de implantação, escolha **Criar implantação**.

1.  Em **Grupo de implantação**, escolha **ecs-demo-dg**. 

1.  Em **Tipo de revisão**, escolha **Meu aplicativo está armazenado no Amazon S3**. Em **Local da revisão**, insira o nome do bucket e do AppSpec arquivo do S3 (por exemplo,**s3://my-s3-bucket/appspec.json**). 

1.  Em **Tipo de arquivo de revisão**, escolha **.json** ou **.yaml** conforme apropriado. 

1.  (Opcional) Em **Descrição da implantação**, digite uma descrição para a implantação. 

1. Escolha **Criar implantação**.

 Você pode monitorar a implantação em **Deployment status (Status da implantação)**. Depois que 100% do tráfego de produção for roteado para o conjunto de tarefas de substituição, você poderá escolher **Encerrar conjunto de tarefas original** para encerrar imediatamente o conjunto de tarefas original. Se você não escolher **Terminate original task set (Encerrar conjunto de tarefas original)**, o conjunto de tarefas original será encerrado após o período especificado quando você criou o grupo de implantação. 

![\[A seção de status de implantação do CodeDeploy console.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-with-test-listener.png)


# Etapa 6: Visualize a saída da função Lambda hook em Logs CloudWatch
<a name="tutorial-ecs-with-hooks-view-cw-logs"></a>

 Se sua CodeDeploy implantação for bem-sucedida, os testes de validação em suas funções de gancho do Lambda também serão bem-sucedidos. Você pode confirmar isso examinando o registro da função de gancho em CloudWatch Logs. 

1. Abra o CloudWatch console em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1.  Na página de navegação, escolha **Logs**. Você deve ver um novo grupo de registros para a função de gancho do Lambda especificada em seu AppSpec arquivo.   
![\[O novo grupo de registros no CloudWatch console.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/ecs-demo-cw-logs.png)

1.  Escolha o novo grupo de logs. Isso deve ser**/aws/lambda/AfterAllowTestTrafficHook**. 

1.  Escolha o fluxo de logs. Se você vir mais de um fluxo de logs, escolha aquele com a data e hora mais recentes em **Last Event Time (Hora do último evento)**. 

1.  Expanda os eventos do fluxo de logs para confirmar se a função de hook do Lambda gravou mensagens de êxito no log. A tabela a seguir mostra que a função de hook do Lambda do `AfterAllowTraffic` foi bem-sucedida.   
![\[Os eventos do fluxo de logs mostrando o hook AfterAllowTraffic.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/ecs-demo-cw-log-events.png)

# Etapa 7: limpar
<a name="tutoria-ecs-with-hooks-clean-up"></a>

 Ao concluir este tutorial, limpe os recursos associados a ele para evitar cobranças por recursos que você não está usando. Os nomes dos recursos nesta etapa são os nomes sugeridos neste tutorial (por exemplo, **ecs-demo-codedeploy-app** para o nome do seu CodeDeploy aplicativo). Se você tiver usado nomes diferentes, certifique-se de usá-los em sua limpeza. 

**Para limpar os recursos do tutorial**

1. Use o [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html)comando para excluir o grupo CodeDeploy de implantação.

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-deployment-group --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. Use o comando [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) para excluir o aplicativo. CodeDeploy 

   ```
   aws deploy delete-application --application-name ecs-demo-deployment-group --region aws-region-id
   ```

1. Use o comando [delete-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/delete-function.html) para excluir a função de hook do Lambda.

   ```
   aws lambda delete-function --function-name AfterAllowTestTraffic
   ```

1. Use o [delete-log-group](https://docs.aws.amazon.com/cli/latest/reference/logs/delete-log-group.html)comando para excluir seu grupo de CloudWatch registros.

   ```
   aws logs delete-log-group --log-group-name /aws/lambda/AfterAllowTestTraffic
   ```

# Tutorial: Implemente uma função Lambda atualizada com o modelo CodeDeploy de aplicativo sem AWS servidor
<a name="tutorial-lambda-sam"></a>

AWS O SAM é uma estrutura de código aberto para criar aplicativos sem servidor. Ele transforma e expande a sintaxe YAML em um AWS SAM modelo em CloudFormation sintaxe para criar aplicativos sem servidor, como uma função Lambda. Para obter mais informações, consulte [O que é o AWS Serverless Application Model?](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) 

 Neste tutorial, você usa o AWS SAM para criar uma solução que faça o seguinte: 
+  Cria sua função do Lambda. 
+  Cria seu CodeDeploy aplicativo e seu grupo de implantação. 
+  Cria duas funções Lambda que executam testes de validação de implantação durante os ganchos do ciclo de CodeDeploy vida. 
+  Detecta quando a função do Lambda é atualizada. A atualização da função Lambda aciona uma implantação CodeDeploy que transfere incrementalmente o tráfego de produção da versão original da função Lambda para a versão atualizada. 

**nota**  
Este tutorial requer que você crie recursos que podem resultar em cobranças na sua conta da AWS . Isso inclui possíveis cobranças para CodeDeploy CloudWatch, Amazon AWS Lambda e. Para obter mais informações, consulte [CodeDeploy preços](https://aws.amazon.com/codedeploy/pricing/), [ CloudWatch preços da Amazon](https://aws.amazon.com/cloudwatch/pricing/) e [AWS Lambda preços](https://aws.amazon.com/lambda/pricing/).

**Topics**
+ [Pré-requisitos](tutorial-lambda-sam-prereqs.md)
+ [Etapa 1: Configurar sua infraestrutura](tutorial-lambda-sam-setup-infrastructure.md)
+ [Etapa 2: Atualizar a função do Lambda](tutorial-lambda-sam-update-function.md)
+ [Etapa 3: Implantar a função do Lambda atualizada](tutorial-lambda-sam-deploy-update.md)
+ [Etapa 4: Visualizar os resultados da implantação](tutorial-lambda-sam-deploy-view-results.md)
+ [Etapa 5: limpar](tutorial-lambda-clean-up.md)

# Pré-requisitos
<a name="tutorial-lambda-sam-prereqs"></a>

Para concluir este tutorial, você deve primeiramente:
+  Siga as etapas em [Começando com CodeDeploy](getting-started-codedeploy.md). 
+  Instale a AWS Serverless Application Model CLI. Para obter informações, consulte [Instalar a CLI do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html). 
+  Crie um bucket S3. AWS O SAM carrega os artefatos que são referenciados em seu [modelo de AWS SAM](https://docs.aws.amazon.com/en_us/codedeploy/latest/userguide/tutorial-lambda-sam-template.html) nesse bucket. 

# Etapa 1: Configurar sua infraestrutura
<a name="tutorial-lambda-sam-setup-infrastructure"></a>

 Este tópico mostra como usar para criar arquivos AWS SAM para seu AWS SAM modelo e suas funções do Lambda. Em seguida, você usa os `deploy` comandos AWS SAM `package` e para gerar os componentes em sua infraestrutura. Quando sua infraestrutura estiver pronta, você terá um grupo de CodeDeploy aplicativos e implantação, a função Lambda para atualizar e implantar e duas funções Lambda que contêm testes de validação que são executados quando você implanta a função Lambda. Quando concluído, você pode usar CloudFormation para visualizar seus componentes no console Lambda ou AWS CLI para testar sua função Lambda. 

**Topics**
+ [Criar seus arquivos](tutorial-lambda-create-files.md)
+ [Package o aplicativo AWS SAM](tutorial-lambda-sam-package.md)
+ [Implantar o aplicativo AWS SAM](tutorial-lambda-sam-deploy.md)
+ [(Opcional) Inspecionar e testar sua infraestrutura](tutorial-lambda-sam-confirm-components.md)

# Criar seus arquivos
<a name="tutorial-lambda-create-files"></a>

 Para criar sua infraestrutura, você deve criar os seguintes arquivos: 
+ `template.yml`
+ `myDateTimeFunction.js`
+ `beforeAllowTraffic.js`
+ `afterAllowTraffic.js`

**Topics**
+ [Crie seu modelo de AWS SAM](tutorial-lambda-sam-template.md)
+ [Criar um arquivo para sua função do Lambda](tutorial-lambda-sam-create-lambda-function.md)
+ [Crie um arquivo para sua função BeforeAllowTraffic Lambda](tutorial-lambda-sam-create-lambda-before-traffic.md)
+ [Crie um arquivo para sua função AfterAllowTraffic Lambda](tutorial-lambda-sam-create-lambda-after-traffic.md)

# Crie seu modelo de AWS SAM
<a name="tutorial-lambda-sam-template"></a>

Crie um arquivo de modelo do AWS SAM que especifique os componentes em sua infraestrutura.

**Para criar seu modelo de AWS SAM**

1.  Crie um diretório denominado `SAM-Tutorial`. 

1.  No diretório `SAM-Tutorial`, crie um arquivo chamado `template.yml`. 

1.  Copie o código YAML a seguir no `template.yml`. Este é seu modelo do AWS SAM . 

   ```
   AWSTemplateFormatVersion : '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   Description: A sample SAM template for deploying Lambda functions.
   
   Resources:
   # Details about the myDateTimeFunction Lambda function
     myDateTimeFunction:
       Type: AWS::Serverless::Function
       Properties:
         Handler: myDateTimeFunction.handler
         Runtime: nodejs18.x
   # Instructs your myDateTimeFunction is published to an alias named "live".      
         AutoPublishAlias: live
   # Grants this function permission to call lambda:InvokeFunction
         Policies:
           - Version: "2012-10-17"		 	 	 
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: '*'
         DeploymentPreference:
   # Specifies the deployment configuration      
             Type: Linear10PercentEvery1Minute
   # Specifies Lambda functions for deployment lifecycle hooks
             Hooks:
               PreTraffic: !Ref beforeAllowTraffic
               PostTraffic: !Ref afterAllowTraffic
               
   # Specifies the BeforeAllowTraffic lifecycle hook Lambda function
     beforeAllowTraffic:
       Type: AWS::Serverless::Function
       Properties:
         Handler: beforeAllowTraffic.handler
         Policies:
           - Version: "2012-10-17"		 	 	 
   # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus        
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "codedeploy:PutLifecycleEventHookExecutionStatus"
               Resource:
                 !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*'
           - Version: "2012-10-17"		 	 	 
   # Grants this function permission to call lambda:InvokeFunction        
             Statement: 
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: !Ref myDateTimeFunction.Version
         Runtime: nodejs18.x
   # Specifies the name of the Lambda hook function      
         FunctionName: 'CodeDeployHook_beforeAllowTraffic'
         DeploymentPreference:
           Enabled: false
         Timeout: 5
         Environment:
           Variables:
             NewVersion: !Ref myDateTimeFunction.Version
             
   # Specifies the AfterAllowTraffic lifecycle hook Lambda function
     afterAllowTraffic:
       Type: AWS::Serverless::Function
       Properties:
         Handler: afterAllowTraffic.handler
         Policies:
           - Version: "2012-10-17"		 	 	 
             Statement: 
   # Grants this function permission to call codedeploy:PutLifecycleEventHookExecutionStatus         
             - Effect: "Allow"
               Action: 
                 - "codedeploy:PutLifecycleEventHookExecutionStatus"
               Resource:
                 !Sub 'arn:aws:codedeploy:${AWS::Region}:${AWS::AccountId}:deploymentgroup:${ServerlessDeploymentApplication}/*'
           - Version: "2012-10-17"		 	 	 
             Statement: 
   # Grants this function permission to call lambda:InvokeFunction          
             - Effect: "Allow"
               Action: 
                 - "lambda:InvokeFunction"
               Resource: !Ref myDateTimeFunction.Version
         Runtime: nodejs18.x
   # Specifies the name of the Lambda hook function      
         FunctionName: 'CodeDeployHook_afterAllowTraffic'
         DeploymentPreference:
           Enabled: false
         Timeout: 5
         Environment:
           Variables:
             NewVersion: !Ref myDateTimeFunction.Version
   ```

Esse modelo especifica o seguinte. Para obter mais informações, consulte [Conceitos de modelo do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-basics.html).

**Uma função do Lambda chamada `myDateTimeFunction`**  
 Quando essa função do Lambda é publicada, a linha `AutoPublishAlias` no modelo a vincula a um alias chamado `live`. Posteriormente neste tutorial, uma atualização dessa função aciona uma implantação AWS CodeDeploy que transfere incrementalmente o tráfego de produção da versão original para a versão atualizada. 

**Duas funções de validação de implantação do Lambda**  
 As seguintes funções do Lambda são executadas durante os ganchos do ciclo de CodeDeploy vida. As funções contêm código que validam a implantação da `myDateTimeFunction` atualizada. O resultado dos testes de validação é passado para o CodeDeploy usando seu método da API `PutLifecycleEventHookExecutionStatus`. Se houver falha em um teste de validação, haverá falha na implantação e ela será revertida.   
+  `CodeDeployHook_beforeAllowTraffic` é executado durante o gancho `BeforeAllowTraffic`. 
+  `CodeDeployHook_afterAllowTraffic` é executado durante o gancho `AfterAllowTraffic`. 
O nome das duas funções começa com `CodeDeployHook_`. A função `CodeDeployRoleForLambda` permite chamadas para o método `invoke` do Lambda somente em funções do Lambda com nomes que começam com esse prefixo. Para obter mais informações, consulte [AppSpec seção 'hooks' para uma implantação do AWS Lambda](reference-appspec-file-structure-hooks.md#appspec-hooks-lambda) e [PutLifecycleEventHookExecutionStatus](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_PutLifecycleEventHookExecutionStatus.html) na *Referência da API do CodeDeploy *. 

**Detecção automática de uma função do Lambda atualizada**  
 O termo `AutoPublishAlias` informa à estrutura para detectar quando a função `myDateTimeFunction` muda e implanta-a usando o alias `live`. 

**Uma configuração de implantação**  
 A configuração de implantação determina a taxa na qual seu CodeDeploy aplicativo transfere o tráfego da versão original da função Lambda para a nova versão. Esse modelo especifica a configuração de implantação predefinida `Linear10PercentEvery1Minute`.   
 Você não pode especificar uma configuração de implantação personalizada em um modelo do AWS SAM. Para obter mais informações, consulte [Crie uma configuração de implantação com CodeDeploy](deployment-configurations-create.md).

**Funções de gancho de ciclo de vida de implantação**  
 A seção `Hooks` especifica as funções a serem executadas durante ganchos de evento de ciclo de vida. `PreTraffic` especifica a função que é executada durante o gancho `BeforeAllowTraffic`. `PostTraffic` especifica a função que é executada durante o gancho `AfterAllowTraffic`. 

**Permissões para o Lambda invocar outra função do Lambda**  
 A `lambda:InvokeFunction` permissão especificada concede à função usada pelo aplicativo AWS SAM permissão para invocar uma função Lambda. Isso é necessário quando as funções `CodeDeployHook_beforeAllowTraffic` e `CodeDeployHook_afterAllowTraffic` invocam a função do Lambda implantada durante os testes de validação. 

# Criar um arquivo para sua função do Lambda
<a name="tutorial-lambda-sam-create-lambda-function"></a>

Crie o arquivo para a função que você atualiza e implanta posteriormente neste tutorial.

**nota**  
 Uma função do Lambda pode usar qualquer runtime compatível com o AWS Lambda. Para obter mais informações, consulte [Tempos de execução do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html). 

**Como criar sua função do Lambda**

1.  Crie um arquivo de texto e salve-o como `myDateTimeFunction.js` no diretório `SAM-Tutorial`. 

1.  Copie o código Node.js a seguir no `myDateTimeFunction.js`. 

   

   ```
   'use strict';
       
       exports.handler = function(event, context, callback) {
       
         if (event.body) {
           event = JSON.parse(event.body);
         }
       
         var sc; // Status code
         var result = ""; // Response payload
       
         switch(event.option) {
           case "date": 
             switch(event.period) {
               case "yesterday":
                 result = setDateResult("yesterday");
                 sc = 200;
                 break;
               case "today":
                 result = setDateResult();
                 sc = 200;
                 break;
               case "tomorrow":
                 result = setDateResult("tomorrow");
                 sc = 200;
                 break;
               default:
                 result = {
                   "error": "Must specify 'yesterday', 'today', or 'tomorrow'."
                 };
                 sc = 400;
                 break;
             }
             break;
             
       /*      Later in this tutorial, you update this function by uncommenting 
               this section. The framework created by AWS SAM detects the update 
               and triggers a deployment by CodeDeploy. The deployment shifts 
               production traffic to the updated version of this function.
               
               case "time":
               var d = new Date();
               var h = d.getHours();
               var mi = d.getMinutes();
               var s = d.getSeconds();
       
               result = {
                 "hour": h,
                 "minute": mi,
                 "second": s
               };
               sc = 200;
               break;
       */
             default:
               result = {
                 "error": "Must specify 'date' or 'time'."
               };
               sc = 400;
             break;
         }
       
         const response = {
           statusCode: sc,
           headers: { "Content-type": "application/json" },
           body: JSON.stringify( result )
         };
       
         callback(null, response);
       
         function setDateResult(option) {
       
           var d = new Date(); // Today
           var mo; // Month
           var da; // Day
           var y; // Year
       
           switch(option) {
             case "yesterday":
               d.setDate(d.getDate() - 1);
               break;
             case "tomorrow":
               d.setDate(d.getDate() + 1);
             default:
              break;
           }
       
           mo = d.getMonth() + 1; // Months are zero offset (0-11)
           da = d.getDate();
           y = d.getFullYear();
       
           result = {
             "month": mo,
             "day": da,
             "year": y
           };
       
           return result;
         }
       };
   ```

A função do Lambda retorna o dia, mês e ano de ontem, hoje ou amanhã. Posteriormente neste tutorial, elimine o comentário do código que atualiza a função para retornar informações sobre o dia ou a hora que você especificar (por exemplo, o dia, mês e ano, ou a hora, o minuto e o segundo atuais). A estrutura criada por AWS SAM detecta e implanta a versão atualizada da função. 

**nota**  
 Essa função Lambda também é usada em um AWS Cloud9 tutorial. AWS Cloud9 é um ambiente de desenvolvimento integrado baseado em nuvem. Para obter informações sobre como criar, executar, atualizar e depurar essa função em AWS Cloud9, consulte o [AWS Lambda tutorial para AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/tutorial-lambda.html). 

# Crie um arquivo para sua função BeforeAllowTraffic Lambda
<a name="tutorial-lambda-sam-create-lambda-before-traffic"></a>

Crie o arquivo para sua função do Lambda de hook `beforeAllowTraffic`.

1.  Crie um arquivo de texto e salve-o como `beforeAllowTraffic.js` no diretório `SAM-Tutorial`. 

1.  Copie o código Node.js a seguir no `beforeAllowTraffic.js`. Essa função é executada durante o gancho `BeforeAllowTraffic` de sua implantação. 

   ```
   'use strict';
       
       const AWS = require('aws-sdk'); 
       const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
       var lambda = new AWS.Lambda();
       
       exports.handler = (event, context, callback) => {
       
       	console.log("Entering PreTraffic Hook!");
       	
       	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
         var deploymentId = event.DeploymentId;
       	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
       
       	var functionToTest = process.env.NewVersion;
       	console.log("BeforeAllowTraffic hook tests started");
       	console.log("Testing new function version: " + functionToTest);
       
       	// Create parameters to pass to the updated Lambda function that
       	// include the newly added "time" option. If the function did not
       	// update, then the "time" option is invalid and function returns
       	// a statusCode of 400 indicating it failed.
       	var lambdaParams = {
       		FunctionName: functionToTest,    
       		Payload: "{\"option\": \"time\"}", 
       		InvocationType: "RequestResponse"
       	};
       
       	var lambdaResult = "Failed";
       	// Invoke the updated Lambda function.
       	lambda.invoke(lambdaParams, function(err, data) {
       		if (err){	// an error occurred
       			console.log(err, err.stack);
       			lambdaResult = "Failed";
       		}
       		else{	// successful response
       			var result = JSON.parse(data.Payload);
       			console.log("Result: " +  JSON.stringify(result));
             console.log("statusCode: " + result.statusCode);
             
             // Check if the status code returned by the updated
             // function is 400. If it is, then it failed. If 
             // is not, then it succeeded.
       			if (result.statusCode != "400"){
               console.log("Validation succeeded");
       				lambdaResult = "Succeeded";
             }
             else {
               console.log("Validation failed");
             }
       
       			// Complete the PreTraffic Hook by sending CodeDeploy the validation status
       			var params = {
       				deploymentId: deploymentId,
       				lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
       				status: lambdaResult // status can be 'Succeeded' or 'Failed'
       			};
       			
       			// Pass CodeDeploy the prepared validation test results.
       			codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
       				if (err) {
       					// Validation failed.
       					console.log("CodeDeploy Status update failed");
       					console.log(err, err.stack);
       					callback("CodeDeploy Status update failed");
       				} else {
       					// Validation succeeded.
       					console.log("CodeDeploy status updated successfully");
       					callback(null, "CodeDeploy status updated successfully");
       				}
       			});
       		}  
       	});
       }
   ```

# Crie um arquivo para sua função AfterAllowTraffic Lambda
<a name="tutorial-lambda-sam-create-lambda-after-traffic"></a>

Crie o arquivo para sua função do Lambda de hook `afterAllowTraffic`.

1.  Crie um arquivo de texto e salve-o como `afterAllowTraffic.js` no diretório `SAM-Tutorial`. 

1.  Copie o código Node.js a seguir no `afterAllowTraffic.js`. Essa função é executada durante o gancho `AfterAllowTraffic` de sua implantação. 

   ```
   'use strict';
       
       const AWS = require('aws-sdk');
       const codedeploy = new AWS.CodeDeploy({apiVersion: '2014-10-06'});
       var lambda = new AWS.Lambda();
       
       exports.handler = (event, context, callback) => {
       
       	console.log("Entering PostTraffic Hook!");
       	
       	// Read the DeploymentId and LifecycleEventHookExecutionId from the event payload
         var deploymentId = event.DeploymentId;
       	var lifecycleEventHookExecutionId = event.LifecycleEventHookExecutionId;
       
       	var functionToTest = process.env.NewVersion;
       	console.log("AfterAllowTraffic hook tests started");
       	console.log("Testing new function version: " + functionToTest);
       
       	// Create parameters to pass to the updated Lambda function that
       	// include the original "date" parameter. If the function did not 
       	// update as expected, then the "date" option might be invalid. If 
       	// the parameter is invalid, the function returns
       	// a statusCode of 400 indicating it failed.
       	var lambdaParams = {
       		FunctionName: functionToTest,    
       		Payload: "{\"option\": \"date\", \"period\": \"today\"}", 
       		InvocationType: "RequestResponse"
       	};
       
       	var lambdaResult = "Failed";
       	// Invoke the updated Lambda function.
       	lambda.invoke(lambdaParams, function(err, data) {
       		if (err){	// an error occurred
       			console.log(err, err.stack);
       			lambdaResult = "Failed";
       		}
       		else{	// successful response
       			var result = JSON.parse(data.Payload);
       			console.log("Result: " +  JSON.stringify(result));
             console.log("statusCode: " + result.statusCode);
             
             // Check if the status code returned by the updated
             // function is 400. If it is, then it failed. If 
             // is not, then it succeeded.
       			if (result.statusCode != "400"){
               console.log("Validation of time parameter succeeded");
       				lambdaResult = "Succeeded";
             }
             else {
               console.log("Validation failed");
             }
       
       			// Complete the PostTraffic Hook by sending CodeDeploy the validation status
       			var params = {
       				deploymentId: deploymentId,
       				lifecycleEventHookExecutionId: lifecycleEventHookExecutionId,
       				status: lambdaResult // status can be 'Succeeded' or 'Failed'
       			};
       			
       			// Pass CodeDeploy the prepared validation test results.
       			codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
       				if (err) {
       					// Validation failed.
       					console.log("CodeDeploy Status update failed");
       					console.log(err, err.stack);
       					callback("CodeDeploy Status update failed");
       				} else {
       					// Validation succeeded.
       					console.log("CodeDeploy status updated successfully");
       					callback(null, "CodeDeploy status updated successfully");
       				}
       			});
       		}  
       	});
       }
   ```

# Package o aplicativo AWS SAM
<a name="tutorial-lambda-sam-package"></a>

 Agora você deve ter quatro arquivos em seu diretório `SAM-Tutorial`: 
+ `beforeAllowTraffic.js`
+ `afterAllowTraffic.js`
+ `myDateTimeFunction.js`
+ `template.yml`

 Agora você está pronto para usar o **sam package** comando AWS SAM para criar e empacotar artefatos para suas funções CodeDeploy e aplicativos Lambda. Os artefatos são carregados em um bucket do S3. A saída do comando é um novo arquivo chamado `package.yml`. Esse arquivo é usado pelo **sam deploy** comando AWS SAM na próxima etapa. 

**nota**  
 Para obter mais informações sobre o comando **sam package**, consulte a [Referência do comando da CLI AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) no *Guia do desenvolvedor do AWS Serverless Application Model *. 

 No diretório `SAM-Tutorial`, execute o seguinte: 

```
sam package \
  --template-file template.yml \
  --output-template-file package.yml \
  --s3-bucket amzn-s3-demo-bucket
```

Para o parâmetro `s3-bucket`, especifique o bucket do Amazon S3 que você criou como um pré-requisito para este tutorial. `output-template-file`Especifica o nome do novo arquivo usado pelo **sam deploy** comando AWS SAM.

# Implantar o aplicativo AWS SAM
<a name="tutorial-lambda-sam-deploy"></a>

 Use o **sam deploy** comando AWS SAM com o `package.yml` arquivo para criar suas funções Lambda e seu grupo de CodeDeploy aplicativos e implantação usando. CloudFormation

**nota**  
Para obter mais informações sobre o comando **sam deploy**, consulte a [Referência do comando da CLI AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) no *Guia do desenvolvedor do AWS Serverless Application Model *. 

 No diretório `SAM-Tutorial`, execute o comando a seguir. 

```
sam deploy \
  --template-file package.yml \
  --stack-name my-date-time-app \
  --capabilities CAPABILITY_IAM
```

 O parâmetro `--capabilities CAPABILITY_IAM` é necessário para autorizar o CloudFormation a criar perfis do IAM. 

# (Opcional) Inspecionar e testar sua infraestrutura
<a name="tutorial-lambda-sam-confirm-components"></a>

 Este tópico mostra como visualizar seus componentes de infraestrutura e testar sua função do Lambda. 

**Como ver o resultado da pilha depois de executar o `sam deploy`**

1. Abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1.  No painel de navegação, escolha **Pilhas**. A pilha `my-date-time-app` é exibida na parte superior. 

1.  Escolha a guia **Events (Eventos)** para ver quais eventos foram concluídos. É possível visualizar os eventos enquanto a criação da pilha está em andamento. Quando a criação da pilha for concluída, você poderá ver todos os eventos de criação da pilha. 

1.  Com a pilha selecionada, escolha **Resources (Recursos)**. Na coluna **Tipo**, é possível ver suas funções do Lambda, `myDateTimeFunction`, `CodeDeployHook_beforeAllowTraffic`, e `CodeDeployHook_afterAllowTraffic`. A coluna **ID físico** de cada uma de suas funções do Lambda contém um link para visualizar as funções no console do Lambda. 
**nota**  
 O nome da função `myDateTimeFunction` Lambda é prefixado com o nome da CloudFormation pilha e tem um identificador adicionado a ele, então parece. `my-date-time-app-myDateTimeFunction-123456ABCDEF` 

1. Abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy/](https://console.aws.amazon.com/codedeploy/).

1.  No painel de navegação, expanda a opção **Deploy (Implantar)** e escolha **Applications (Aplicativos)**. 

1.  Você deve ver um novo CodeDeploy aplicativo criado por CloudFormation com um nome que começa com`my-date-time-app-ServerlessDeploymentApplication`. Escolha esse aplicativo. 

1.  Você deverá ver um grupo de implantação com um nome que começa com `my-date-time-app-myDateTimeFunctionDeploymentGroup`. Escolha esse grupo de implantação. 

    Em **Configuração de implantação**, você deve ver **CodeDeployDefault. LambdaLinear10 PercentEvery 1 minuto**. 

**(Opcional) Como testar sua função (console)**

1. Abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1.  No painel de navegação, escolha sua função `my-date-time-app-myDateTimeFunction`. No console, o nome dela contém um identificador, portanto, ele se parece com `my-date-time-app-myDateTimeFunction-123456ABCDEF`. 

1.  Escolha **Testar**. 

1.  Em **Event name (Nome do evento)**, insira um nome para o evento de teste. 

1.  Insira o seguinte para o evento de teste e escolha **Create (Criar)**. 

   ```
   {
     "option": "date",
     "period": "today"
   }
   ```

1.  Escolha **Testar**. Você deverá ver apenas o evento de teste na lista de eventos de teste. 

    Em **Execution result (Resultado da execução)**, você deverá ver **succeeded (bem-sucedido)**. 

1.  Em **Execution result (Resultado da execução)**, expanda **Details (Detalhes)** para ver os resultados. Você deverá ver o mês, dia e ano atuais. 

**(Opcional) Como testar sua função (AWS CLI)**

1.  Localize o ARN de sua função do Lambda. Ele será exibido na parte superior do console do Lambda quando você estiver visualizando a função. 

1.  Execute o comando a seguir. *your-function-arn*Substitua pela função ARN. 

   ```
   aws lambda invoke \
   --function your-function-arn \
   --cli-binary-format raw-in-base64-out \
   --payload "{\"option\": \"date\", \"period\": \"today\"}" out.txt
   ```

1.  Abra `out.txt` para confirmar que o resultado contém o mês, dia e ano atuais. 

# Etapa 2: Atualizar a função do Lambda
<a name="tutorial-lambda-sam-update-function"></a>

 Neste tópico, você atualiza o arquivo `myDateTimeFunction.js`. Na próxima etapa, você usará o arquivo para implantar a função atualizada. Isso CodeDeploy aciona a implantação transferindo o tráfego de produção da versão atual da função Lambda para a versão atualizada. 

**Como atualizar sua função do Lambda**

1.  Abra o `myDateTimeFunction.js`. 

1.  Remova os dois marcadores de comentário ("`/*`" e "`*/`") e o texto explicativo no início e no final do `case` chamado `time` no bloco `switch`. 

    O código sem comentário permite que você passe um novo parâmetro, `time`, para a função. Se você passar `time` para a função atualizada, ela retornará a `hour`, o `minute` e o `second` atuais. 

1.  Salvar `myDateTimeFunction.js`. Ele deve ter a seguinte aparência: 

   ```
   'use strict';
   
   exports.handler = function(event, context, callback) {
   
     if (event.body) {
       event = JSON.parse(event.body);
     }
   
     var sc; // Status code
     var result = ""; // Response payload
   
     switch(event.option) {
       case "date":
         switch(event.period) {
           case "yesterday":
             result = setDateResult("yesterday");
             sc = 200;
             break;
           case "today":
             result = setDateResult();
             sc = 200;
             break;
           case "tomorrow":
             result = setDateResult("tomorrow");
             sc = 200;
             break;
           default:
             result = {
               "error": "Must specify 'yesterday', 'today', or 'tomorrow'."
             };
             sc = 400;
             break;
         }
         break;
         case "time":
           var d = new Date();
           var h = d.getHours();
           var mi = d.getMinutes();
           var s = d.getSeconds();
   
           result = {
             "hour": h,
             "minute": mi,
             "second": s
           };
           sc = 200;
           break;
   
         default:
           result = {
             "error": "Must specify 'date' or 'time'."
           };
           sc = 400;
         break;
     }
   
     const response = {
       statusCode: sc,
       headers: { "Content-type": "application/json" },
       body: JSON.stringify( result )
     };
   
     callback(null, response);
   
     function setDateResult(option) {
   
       var d = new Date(); // Today
       var mo; // Month
       var da; // Day
       var y; // Year
   
       switch(option) {
         case "yesterday":
           d.setDate(d.getDate() - 1);
           break;
         case "tomorrow":
           d.setDate(d.getDate() + 1);
         default:
          break;
       }
   
       mo = d.getMonth() + 1; // Months are zero offset (0-11)
       da = d.getDate();
       y = d.getFullYear();
   
       result = {
         "month": mo,
         "day": da,
         "year": y
       };
   
       return result;
     }
   };
   ```

# Etapa 3: Implantar a função do Lambda atualizada
<a name="tutorial-lambda-sam-deploy-update"></a>

 Nesta etapa, você usa a `myDateTimeFunction.js` atualizada para atualizar e iniciar a implantação da função do Lambda. Você pode monitorar o progresso da implantação no AWS Lambda console CodeDeploy ou. 

 A `AutoPublishAlias: live` linha em seu AWS SAM modelo faz com que sua infraestrutura detecte atualizações em funções que usam o `live` alias. Uma atualização em sua função aciona uma implantação CodeDeploy que transfere o tráfego de produção da versão original da função para a versão atualizada. 

 Os comandos **sam package** e **sam deploy** são usados para atualizar e acionar a implantação de sua função do Lambda. Você executou esses comandos em [Package o aplicativo AWS SAM](tutorial-lambda-sam-package.md) e [Implantar o aplicativo AWS SAM](tutorial-lambda-sam-deploy.md). 

**Como implantar sua função do Lambda atualizada**

1.  No diretório `SAM-Tutorial`, execute o comando a seguir. 

   ```
   sam package \
     --template-file template.yml \
     --output-template-file package.yml  \
     --s3-bucket amzn-s3-demo-bucket
   ```

    Isso cria um novo conjunto de artefatos que fazem referência à função do Lambda atualizada no bucket do S3. 

1.  No diretório `SAM-Tutorial`, execute o comando a seguir. 

   ```
   sam deploy \
     --template-file package.yml \
     --stack-name my-date-time-app \
     --capabilities CAPABILITY_IAM
   ```

   Como o nome da pilha ainda é`my-date-time-app`, CloudFormation reconhece que essa é uma atualização da pilha. **Para ver sua pilha atualizada, retorne ao CloudFormation console e, no painel de navegação, escolha Pilhas.**

**(Opcional) para visualizar o tráfego durante uma implantação (CodeDeploy console)**

1. Abra o CodeDeploy console em [https://console.aws.amazon.com/codedeploy/](https://console.aws.amazon.com/codedeploy/).

1.  No painel de navegação, expanda **Aplicativos** e escolha seu **my-date-time-app- ServerlessDeploymentApplication** aplicativo. 

1.  Em **Deployment groups (Grupos de implantação)**, escolha o grupo de implantação do aplicativo. Seu status deve ser **In progress (Em andamento**). 

1.  Em **Deployment group history (Histórico de grupos de implantação)**, escolha a implantação que está em andamento. 

   A barra de progresso de **Traffic shifting (Deslocamento de tráfego)** e as porcentagens nas caixas **Original** e **Replacement (Substituição)** nesta página exibem o progresso.   
![\[A seção de progresso da mudança de tráfego do CodeDeploy console.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/lambda-tutorial-codedeploy-console-20-percent-deployed.png)

**(Opcional) Como visualizar o tráfego durante uma implantação (console do Lambda)**

1. Abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1.  No painel de navegação, escolha sua função `my-date-time-app-myDateTimeFunction`. No console, o nome dela contém um identificador, portanto, ele se parece com `my-date-time-app-myDateTimeFunction-123456ABCDEF`. 

1.  Escolha **Aliases** e, em seguida, escolha **ao vivo**. 

Os pesos ao lado da versão original da função (versão 1) e da versão atualizada da função (versão 2) mostram quanto tráfego é distribuído para cada versão no momento em que a página do console do AWS Lambda foi carregada. A página não atualiza os pesos ao longo do tempo. Se você atualizar a página uma vez por minuto, o peso da versão 1 diminuirá em 10% e o peso da versão 2 aumentará em 10% até que o peso da versão 2 seja 100. 

![\[A seção de aliases do CodeDeploy console.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/lambda-tutorial-lambda-console-20-percent-deployed.png)


# Etapa 4: Visualizar os resultados da implantação
<a name="tutorial-lambda-sam-deploy-view-results"></a>

Nesta etapa, você visualiza os resultados da implantação. Se a implantação for bem-sucedida, você poderá confirmar que a função do Lambda atualizada recebe o tráfego de produção. Se sua implantação falhar, você poderá usar o CloudWatch Logs para visualizar a saída dos testes de validação na função Lambda que são executados durante os ganchos do ciclo de vida da implantação. 

**Topics**
+ [Testar a função implantada](#tutorial-lambda-sam-deploy-test-deployed-function)
+ [Exibir eventos de gancho em CloudWatch Logs](#tutorial-lambda-view-hook-events)

## Testar a função implantada
<a name="tutorial-lambda-sam-deploy-test-deployed-function"></a>

 O comando **sam deploy** atualiza a função do Lambda do `my-date-time-app-myDateTimeFunction`. A versão da função é atualizada para 2 e adicionada ao alias `live`. 

**Como ver a atualização no console do Lambda**

1. Abra o AWS Lambda console em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1.  No painel de navegação, escolha a função `my-date-time-app-myDateTimeFunction`. No console, o nome dela contém um identificador, portanto, ele se parece com `my-date-time-app-myDateTimeFunction-123456ABCDEF`. 

1.  Escolha **Qualifiers (Qualificadores)** e **Aliases**. Depois que a implantação for concluída (aproximadamente 10 minutos), no alias `live`, você deverá ver **Version: 2 (Versão: 2)**.  
![\[A seção de aliases do CodeDeploy console.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/lambda-tutorial-function-version.png)

1.  Em **Function code (Código da função)**, visualize o código-fonte da função. Suas alterações deverão ser exibidas. 

1.  (Opcional) Você pode usar as instruções de teste em [Etapa 2: Atualizar a função do Lambda](tutorial-lambda-sam-update-function.md) para testar sua função atualizada. Crie um novo evento de teste com a carga a seguir e confirme se o resultado contém a hora, o minuto e o segundo atuais. 

   ```
   {
       "option": "time"
     }
   ```

    Para usar o AWS CLI para testar sua função atualizada, execute o comando a seguir e abra `out.txt` para confirmar se o resultado contém a hora, o minuto e o segundo atuais. 

   ```
   aws lambda invoke --function your-function-arn --payload "{\"option\": \"time\"}" out.txt 
   ```
**nota**  
 Se você usar o AWS CLI para testar sua função antes da conclusão da implantação, poderá receber resultados inesperados. Isso ocorre porque transfere CodeDeploy gradualmente 10% do tráfego para a versão atualizada a cada minuto. Durante a implantação, algum tráfego ainda aponta para a versão original, portanto, o `aws lambda invoke` pode usar a versão original. Após 10 minutos, a implantação é concluída e todo o tráfego aponta para a nova versão da função. 

## Exibir eventos de gancho em CloudWatch Logs
<a name="tutorial-lambda-view-hook-events"></a>

 Durante o `BeforeAllowTraffic` hook, CodeDeploy executa sua função `CodeDeployHook_beforeAllowTraffic` Lambda. Durante o `AfterAllowTraffic` hook, CodeDeploy executa sua função `CodeDeployHook_afterAllowTraffic` Lambda. Cada função executa um teste de validação que invoca a versão atualizada de sua função usando o novo parâmetro `time`. Se a atualização da função do Lambda for bem-sucedida, a opção `time` não causará um erro e a validação será bem-sucedida. Se a função não tiver sido atualizada, o parâmetro não reconhecido causará um erro e haverá falha na validação. Esses testes de validação são apenas para fins de demonstração. Escreva seus próprios testes para validar sua implantação. Você pode usar o console de CloudWatch registros para ver seus testes de validação. 

**Para ver seus eventos de CodeDeploy gancho**

1. Abra o CloudWatch console em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1.  Na página de navegação, escolha **Logs**. 

1.  Na lista de grupos de registros, escolha**/aws/lambda/CodeDeployHook\$1 beforeAllowTraffic** ou**/aws/lambda/CodeDeployHook\$1 afterAllowTraffic**. 

1.  Escolha o fluxo de logs. Você deverá ver somente um. 

1.  Expanda os eventos para ver seus detalhes.   
![\[O fluxo de registros de um grupo de CodeDeployHook registros.\]](http://docs.aws.amazon.com/pt_br/codedeploy/latest/userguide/images/lambda-tutorial-cloudwatch.png)

# Etapa 5: limpar
<a name="tutorial-lambda-clean-up"></a>

Para evitar cobranças adicionais pelos recursos que você usou durante este tutorial, exclua os recursos criados pelo seu AWS SAM modelo e CloudWatch os registros criados pelas suas funções de validação do Lambda.

**Para excluir sua CloudFormation pilha**

1. Faça login no Console de gerenciamento da AWS e abra o CloudFormation console em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Na coluna **Stacks (Pilhas)** escolha sua pilha `my-date-time-app` e escolha **Delete (Excluir)**.

1. Quando solicitado, escolha **Excluir pilha**. As funções do Lambda, o grupo de CodeDeploy aplicativos e de implantação e as funções do IAM criadas por AWS SAM são excluídas.

**Para excluir seus registros em CloudWatch Registros**

1. Abra o CloudWatch console em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1.  Na página de navegação, escolha **Logs**. 

1.  Na lista de grupos de registros, escolha o botão ao lado de**/aws/lambda/CodeDeployHook\$1 beforeAllowTraffic**. 

1.  Em **Ações**, escolha **Excluir grupo de logs** e **Sim, Excluir**. 

1.  Na lista de grupos de registros, escolha o botão ao lado de**/aws/lambda/CodeDeployHook\$1 afterAllowTraffic**. 

1.  Em **Ações**, escolha **Excluir grupo de logs** e **Sim, Excluir**. 