

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

# Exemplo 9: Usando EC2 instâncias da Amazon
<a name="cookbooks-101-basics-ec2"></a>

**Importante**  
O AWS OpsWorks Stacks serviço chegou ao fim da vida útil em 26 de maio de 2024 e foi desativado para clientes novos e existentes. É altamente recomendável que os clientes migrem suas cargas de trabalho para outras soluções o mais rápido possível. Se você tiver dúvidas sobre migração, entre em contato com a AWS Support equipe no [AWS re:POST](https://repost.aws/) ou por meio do Premium [AWS Support](https://aws.amazon.com/support).

Até agora, você está executando instâncias localmente em VirtualBox. Embora isso seja rápido e fácil, você eventualmente desejará testar suas receitas em uma EC2 instância da Amazon. Em particular, se você quiser executar receitas no Amazon Linux, elas estarão disponíveis somente na Amazon EC2. Você pode usar um sistema similar, como o CentOS, para implementação e testes preliminares, mas a única maneira de testar totalmente suas receitas no Amazon Linux é com uma instância da Amazon EC2 . 

Este tópico mostra como executar receitas em uma EC2 instância da Amazon. Você usará o Test Kitchen e o Vagrant da mesma maneira como fez nas seções anteriores, com duas diferenças: 
+ O driver é [https://rubygems.org/gems/kitchen-ec2](https://rubygems.org/gems/kitchen-ec2), em vez do Vagrant.
+ O `.kitchen.yml` arquivo do livro de receitas deve ser configurado com as informações necessárias para iniciar a EC2 instância da Amazon.

**nota**  
Uma abordagem alternativa é usar o plug-in do Vagrant `vagrant-aws`. Para obter mais informações, consulte [Vagrant AWS Provider](https://github.com/mitchellh/vagrant-aws).

Você precisará das credenciais da AWS para criar uma EC2 instância da Amazon. Caso não tenha uma conta da AWS, você pode obter uma da maneira a seguir. 

## Inscreva-se para um Conta da AWS
<a name="sign-up-for-aws"></a>

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

**Para se inscrever em um Conta da AWS**

1. Abra a [https://portal.aws.amazon.com/billing/inscrição.](https://portal.aws.amazon.com/billing/signup)

1. Siga as instruções online.

   Parte do procedimento de inscrição envolve receber uma chamada telefônica ou uma mensagem de texto e inserir um código de verificação pelo teclado do telefone.

   Quando você se inscreve em um Conta da AWS, um *Usuário raiz da conta da AWS*é criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar [tarefas que exigem acesso de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando [https://aws.amazon.com/e](https://aws.amazon.com/) escolhendo **Minha conta**.

## Criar um usuário com acesso administrativo
<a name="create-an-admin"></a>

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS Centro de Identidade do AWS IAM, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

**Proteja seu Usuário raiz da conta da AWS**

1.  Faça login [Console de gerenciamento da AWS](https://console.aws.amazon.com/)como proprietário da conta escolhendo **Usuário raiz** e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

   Para obter ajuda ao fazer login usando o usuário-raiz, consulte [Fazer login como usuário-raiz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) no *Guia do usuário do Início de Sessão da AWS *.

1. Habilite a autenticação multifator (MFA) para o usuário-raiz.

   Para obter instruções, consulte [Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) do *usuário do IAM*.

**Criar um usuário com acesso administrativo**

1. Habilita o Centro de Identidade do IAM.

   Para obter instruções, consulte [Habilitar o Centro de Identidade do AWS IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

   Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte [Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/quick-start-default-idc.html) no *Guia Centro de Identidade do AWS IAM do usuário*.

**Iniciar sessão como o usuário com acesso administrativo**
+ Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

  Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como [fazer login no portal de AWS acesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) no *Guia Início de Sessão da AWS do usuário*.

**Atribuir acesso a usuários adicionais**

1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

   Para obter instruções, consulte [Criar um conjunto de permissões](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-create-a-permission-set.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. Atribua usuários a um grupo e, em seguida, atribua o acesso de logon único ao grupo.

   Para obter instruções, consulte [Adicionar grupos](https://docs.aws.amazon.com/singlesignon/latest/userguide/addgroups.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

Você deve [criar um usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) com permissões para acessar a Amazon EC2 e salvar o acesso e as chaves secretas do usuário em um local seguro na sua estação de trabalho. O Test Kitchen usará essas credenciais para criar a instância. A maneira preferida de fornecer credenciais para o Test Kitchen é atribuir as chaves às variáveis de ambiente a seguir na estação de trabalho.

**Atenção**  
Os usuários do IAM têm credenciais de longo prazo, o que representa um risco de segurança. Para ajudar a reduzir esse risco, recomendamos que você forneça a esses usuários somente as permissões necessárias para realizar a tarefa e que você os remova quando não forem mais necessários.
+ AWS\$1ACCESS\$1KEY — a chave de acesso do usuário, que será semelhante aAKIAIOSFODNN7EXAMPLE.
+ AWS\$1SECRET\$1KEY — a chave secreta do seu usuário, que será semelhante awJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

Essa abordagem reduz as chances de comprometer acidentalmente a conta, por exemplo, fazendo upload de um projeto com as credenciais em um repositório público.

**Para configurar o livro de receitas**

1. Para usar o driver `kitchen-ec2`, você deve ter o pacote `ruby-dev` instalado no sistema. O comando de exemplo a seguir mostra como usar `aptitude` para instalar o pacote em um sistema Ubuntu. 

   ```
   sudo aptitude install ruby1.9.1-dev 
   ```

1. O driver `kitchen-ec2` é um gem, que você pode instalar da seguinte forma:

   ```
   gem install kitchen-ec2
   ```

   Dependendo de sua estação de trabalho, esse comando pode exigir `sudo`. Você também pode usar um gerenciador de ambiente Ruby, como o [RVM](https://rvm.io/). Este procedimento foi testado com a versão 0.8.0 do driver `kitchen-ec2`, mas há versões mais novas. Para instalar uma [specific version](https://rubygems.org/gems/kitchen-ec2/versions), execute `gem install kitchen-ec2 -v <version number>`.

1. Você deve especificar um par de chaves Amazon EC2 SSH que o Test Kitchen possa usar para se conectar à instância. Se você não tiver um par de EC2 chaves da Amazon, consulte [Amazon EC2 Key Pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) para obter informações sobre como criar um. Observe que o par de chaves deve pertencer a mesma região da AWS que a instância. O exemplo usa Oeste dos EUA (N. da Califórnia).

   Depois que você tiver selecionado um par de chaves, crie um subdiretório `opsworks_cookbooks` chamado `ec2_keys` e copie o arquivo de chave privada do par de chaves (`.pem`) para esse diretório. Colocar a chave privada em `ec2_keys` é apenas uma comodidade que simplifica um pouco o código; ela pode estar em qualquer lugar do sistema.

1. Crie um subdiretório de `opsworks_cookbooks` chamado `createdir-ec2` e navegue até ele.

1. Adicione um arquivo `metadata.rb` a `createdir-ec2`, com o seguinte conteúdo.

   ```
   name "createdir-ec2"
   version "0.1.0"
   ```

1. Initialize o Test Kitchen, conforme descrito em [Exemplo 1: Instalação de pacotes](cookbooks-101-basics-packages.md). A seção a seguir descreve como configurar`.kitchen.yml`, o que é significativamente mais complicado para as EC2 instâncias da Amazon.

1. Adicione um subdiretório `recipes` a `createdir-ec2`.

## Configurando .kitchen.yml para a Amazon EC2
<a name="w2ab1c14c71b9c15c17c31c37"></a>

Você configura `.kitchen.yml` com as informações que o `kitchen-ec2` driver precisa para iniciar uma EC2 instância da Amazon configurada adequadamente. Este é um exemplo de um arquivo `.kitchen.yml` para uma instância do Amazon Linux na região Oeste dos EUA (N. da Califórnia).

```
driver:
  name: ec2
  aws_ssh_key_id: US-East1
  region: us-west-1
  availability_zone: us-west-1c
  require_chef_omnibus: true
  security_group_ids: sg........
  subnet_id: subnet-.........
  associate_public_ip: true
  interface: dns

provisioner:
  name: chef_solo

platforms:
  -name: amazon
  driver:
    image_id: ami-xxxxxxxx
  transport:
    username: ec2-user
    ssh_key: ../ec2_keys/US-East1.pem

suites:
  - name: default
    run_list:
      - recipe[createdir-ec2::default]
    attributes:
```

Você pode usar as configurações padrão para as seções `provisioner` e `suites`, mas deve modificar as configurações padrão `driver` e `platforms`. Este exemplo usa uma lista mínima de configurações e aceita os valores padrão para o restante. Para obter uma lista completa de `kitchen-ec2` configurações, consulte [Kitchen: :Ec2: A Test Kitchen Driver for Amazon](https://github.com/test-kitchen/kitchen-ec2). EC2

O exemplo define os atributos `driver` a seguir. Ele pressupõe que você tenha atribuído o acesso do usuário e as chaves secretas a variáveis do ambiente padrão, conforme abordado anteriormente. O driver usa essas chaves por padrão. Do contrário, você deve especificar explicitamente as chaves adicionando `aws_access_key_id` e `aws_secret_access_key` aos atributos `driver` e definir os valores de chave apropriados.

**name**  
(Obrigatório) Este atributo deve ser definido como `ec2`.

**aws\$1ssh\$1key\$1id**  
(Obrigatório) O nome do par de chaves Amazon EC2 SSH, que é nomeado `US-East1` neste exemplo. 

**transport.ssh\$1key**  
(Obrigatório) O arquivo de chave privada (`.pem`) da chave especificada por você para `aws_ssh_key_id`. Para este exemplo, o arquivo será chamado `US-East1.pem` e ficará no diretório `../opsworks/ec2_keys`.

**region**  
(Obrigatório) A região da AWS da instância. O exemplo usa Oeste dos EUA (N. da Califórnia), que é representado por `us-west-1`).

**availability\$1zone**  
(Opcional) A zona de disponibilidade da instância. Caso você omita essa configuração, o Test Kitchen usa uma zona de disponibilidade padrão para a região especificada, `us-west-1b` para Oeste dos EUA (N. da Califórnia). No entanto, a região padrão talvez não esteja disponível para a conta. Neste caso, você deve especificar explicitamente uma zona de disponibilidade. Quando isso acontece, a conta usada para preparar os exemplos não dá suporte a `us-west-1b`. Assim, o exemplo especifica explicitamente `us-west-1c`.

**require\$1chef\$1omnibus**  
Quando definida como `true`, essa configuração garante que o instalador omnibus seja usado para instalar `chef-client` em todas as instâncias da plataforma.

**security\$1group\$1ids**  
(Opcional) Uma lista de grupos de segurança IDs a serem aplicados à instância. Essa configuração aplica o grupo de segurança `default` à instância. Certifique-se de que as regras de entrada do grupo de segurança permitam conexões SSH de entrada, ou o Test Kitchen não poderá se comunicar com a instância. Caso use o security grupo de segurança`default`, você talvez possa precisar editá-lo de acordo. Para obter mais informações, consulte [Amazon EC2 Security Groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html).

**subnet\$1id**  
A ID da sub-rede de destino da instância, caso aplicável.

**associate\$1public\$1ip**  
Você pode fazer com que a Amazon EC2 associe um endereço IP público à instância se quiser acessar a instância pela Internet.

**interface**  
O tipo de configuração do nome de host usado por você para acessar a instância. Os valores válidos são `dns`, `public`, `private` ou `private_dns`. Caso você não especifique um valor para esse atributo, `kitchen-ec2` define a configuração do nome de host na ordem a seguir. Caso você omita este atributo, o tipo de configuração não é definido.  

1. Nome DNS

1. Endereço IP público

1. Endereço IP privado

1. Nome DNS privado

**Importante**  
Em vez de usar as credenciais da conta para o acesso e as chaves secretas, você deve criar um usuário e fornecer essas credenciais ao Test Kitchen. Para obter mais informações, consulte [Práticas recomendadas de gerenciamento de chaves de acesso da AWS](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).  
Tenha cuidado para não colocá-lo `.kitchen.yml` em um local acessível ao público, como enviá-lo para um repositório público GitHub ou do Bitbucket. Isso expõe as credenciais e pode comprometer a segurança da conta.

O driver `kitchen-ec2` dá suporte padrão às seguintes plataformas:
+ ubuntu-10.04
+ ubuntu-12.04
+ ubuntu-12.10
+ ubuntu-13.04
+ ubuntu-13.10
+ ubuntu-14.04
+ centos-6.4
+ debian-7.1.0
+ windows-2012r2
+ windows-2008r2

Caso você queira usar uma ou mais dessas plataformas, adicione os nomes de plataforma apropriados a `platforms`. O driver `kitchen-ec2` seleciona automaticamente uma AMI apropriada e gera um nome do usuário SSH. Você pode usar outras plataformas; este exemplo usa o Amazon Linux, mas é necessário especificar explicitamente os atributos `platforms` a seguir.

**name**  
O nome da plataforma. Este exemplo usa o Amazon Linux, de maneira que `name` seja definido como `amazon`.

**driver**  
Os atributos `driver`, que incluem o seguinte:  
+ `image_id`: a AMI da plataforma, que deve pertencer à região especificada. O exemplo usa `ami-ed8e9284`, uma AMI do Amazon Linux da região Oeste dos EUA (N. da Califórnia).
+ `transport.username`: o nome de usuário de SSH que o Test Kitchen usará para se comunicar com a instância.

  Use `ec2-user` para o Amazon Linux. Outros AMIs podem ter nomes de usuário diferentes.

Substitua o código em `.kitchen.yml` pelo exemplo e atribua valores apropriados a atributos específicos da conta, como `aws_access_key_id`.

## Execução da receita
<a name="w2ab1c14c71b9c15c17c31c39"></a>

Este exemplo usa a receita de [Iteração](cookbooks-101-basics-ruby.md#cookbooks-101-basics-ruby-iteration).

**Para executar a receita**

1. Crie um arquivo chamado `default.rb` com o código a seguir e o salve na pasta `recipes` do livro de receitas.

   ```
   directory "/srv/www/shared" do
     mode 0755
     owner 'root'
     group 'root'
     recursive true
     action :create
   end
   ```

1. Execute `kitchen converge` para executar a receita. Observe que esse comando levará mais tempo para ser concluído do que os exemplos anteriores devido ao tempo necessário para iniciar e inicializar uma EC2 instância da Amazon.

1.  Acesse o [ EC2console da Amazon](https://console.aws.amazon.com/ec2/), selecione a região Oeste dos EUA (Norte da Califórnia) e clique em **Instâncias** no painel de navegação. Você verá a instância recém-criada na lista. 

1. Execute `kitchen login` para fazer login na instância, assim como você tem feito com as instâncias em execução VirtualBox. Você verá os diretórios recém-criados em `/srv`. Você também pode usar o cliente SSH favorito para se conectar à instância.