

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

# Usando o SDK para Ruby em uma instância do Windows OpsWorks Stacks
<a name="cookbooks-101-opsworks-s3-windows"></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).

**nota**  
Este exemplo supõe que você já tenha concluído o exemplo em [Executar uma receita na instância Windows](cookbooks-101-opsworks-opsworks-windows.md). Caso contrário, conclua esse exemplo primeiro. Especificamente, ele descreve como habilitar o acesso RDP para suas instâncias.  
O conteúdo entregue aos buckets do Amazon S3 pode conter conteúdo do cliente. Para obter mais informações sobre a remoção de dados confidenciais, consulte [Como faço para esvaziar um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) ou [Como faço para excluir um bucket do S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html).

Este tópico descreve como usar o [AWS SDK para Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/)em uma instância do OpsWorks Stacks Windows para baixar um arquivo de um bucket do S3.

Se um aplicativo Ruby precisar acessar um recurso da AWS, forneça a ela um conjunto de credenciais da AWS com as permissões apropriadas. Para receitas, sua melhor opção para fornecer credenciais da AWS é usar uma [função AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html). Uma função do IAM funciona como um usuário do IAM: ela tem uma política anexada que concede permissões para usar os vários AWS serviços. No entanto, você atribui uma função a uma instância do Amazon Elastic Compute Cloud (Amazon EC2) em vez de a um indivíduo. Os aplicativos em execução na instância podem, por sua vez, adquirir as permissões concedidas pela política associada. Com uma função, as credenciais nunca aparecem em seu código, sequer indiretamente. 

A primeira etapa é configurar o perfil do IAM. Este exemplo usa a abordagem mais simples, que é usar a EC2 função da Amazon que o OpsWorks Stacks cria quando você cria sua primeira pilha. Ela se chama `aws-opsworks-ec2-role`. No entanto, o OpsWorks Stacks não anexa uma política a essa função, portanto, por padrão, ele não concede permissões. 

Você deve anexar a política `AmazonS3ReadOnlyAccess` ao perfil `aws-opsworks-ec2-role` para conceder as permissões apropriadas. Para obter mais informações sobre como associar uma política a um perfil, consulte [Adicionar permissões de identidade do IAM (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console) no *Guia do usuário do IAM*.

Você especifica a função quando cria ou atualiza uma pilha. Configure uma pilha com uma camada personalizada, conforme descrito em [Executar uma receita na instância Windows](cookbooks-101-opsworks-opsworks-windows.md), com uma adição. Na página **Add Stack**, confirme se o **perfil de instância padrão do IAM** está definido como **aws-opsworks-ec2** funções. OpsWorks As pilhas então atribuirão essa função a todas as instâncias da pilha.

O procedimento para configurar o livro de receitas é semelhante ao usado para [Executar uma receita em uma instância Linux](cookbooks-101-opsworks-opsworks-instance.md). A seguir, há um breve resumo; consulte esse exemplo para obter detalhes.

**Para configurar o livro de receitas**

1. Crie um diretório chamado `s3bucket_ops` e navegue até ele.

1. Crie um arquivo `metadata.rb` com o seguinte conteúdo e salve-o em `s3bucket_ops`.

   ```
   name "s3download"
   version "0.1.0"
   ```

1. Criar um diretório `recipes` em `s3download`.

1. Crie um arquivo `default.rb` com a seguinte receita e salve-o no diretório `recipes`. *windows-cookbooks*Substitua pelo nome do bucket do S3 que você usará para armazenar o arquivo a ser baixado.

   ```
   Chef::Log.info("******Downloading an object from S3******")
   
   chef_gem "aws-sdk-s3" do
     compile_time false
     action :install
   end
   
   ruby_block "download-object" do
     block do
       require 'aws-sdk-s3'
       
       Aws.use_bundled_cert!
   
       s3_client = Aws::S3::Client.new(region:'us-west-2')
   
       s3_client.get_object(bucket: 'windows-cookbooks',
                        key: 'myfile.txt',
                        response_target: '/chef/myfile.txt')
     end
     action :run
   end
   ```

1. Crie um arquivo `.zip` de `s3download` e carregue o arquivo em um bucket do S3. Torne o público o arquivo e registre o URL para uso posterior.

1. Crie um arquivo de texto chamado `myfile.txt` e carregue em um bucket do S3. Este é o arquivo que sua receita baixará para que você possa usar qualquer bucket.

A receita executa as seguintes tarefas.

1: Instalação do SDK for Ruby v2.  
O exemplo usa o SDK for Ruby para carregar o objeto. No entanto, o OpsWorks Stacks não instala esse SDK em instâncias do Windows, então a primeira parte da receita usa um [https://docs.chef.io/chef/resources.html#chef-gem](https://docs.chef.io/chef/resources.html#chef-gem)recurso para lidar com essa tarefa. Utilize esse recurso para instalar gems para uso pelo Chef, que inclui receitas.

2: Faça download do arquivo.  
A terceira parte da receita usa um recurso [https://docs.chef.io/chef/resources.html#ruby-block](https://docs.chef.io/chef/resources.html#ruby-block) para executar o código SDK for Ruby v2 para baixar `myfile.txt` de um bucket do S3 chamado `windows-cookbooks` para o diretório `/chef` da instância. Altere `windows-cookbooks` para o nome do bucket que contém `myfile.txt`. 

**nota**  
Uma receita é um aplicativo Ruby, por isso, você pode colocar código Ruby no corpo da receita; ele não precisa estar em um recurso `ruby_block`. No entanto, o Chef executa o código Ruby no corpo da receita primeiro, seguido por cada recurso, em ordem. Para este exemplo, se você colocar o código do download no corpo da receita, ele falhará porque depende do SDK for Ruby e o recurso `chef_gem` que instala o SDK ainda não foi executado. O código no recurso `ruby_block` é executado quando o recurso é executado, o que acontece depois que o recurso `chef_gem` instala o SDK for Ruby.

Crie uma pilha para este exemplo da seguinte maneira. Você também pode usar uma pilha existente do Windows. Basta atualizar os livros de receitas, como será descrito mais tarde.

**Criar uma pilha**

1. Abra o [console do OpsWorks Stacks](https://console.aws.amazon.com/opsworks/) e selecione **Add Stack (Adicionar pilha)**. Especifique as seguintes configurações, aceite os padrões para as outras configurações e escolha **Add Stack**.
   + **Nome**: S3Download
   + **Região**: Oeste dos EUA (Oregon)

     Este exemplo funcionará em qualquer região, mas recomendamos o uso de Oeste dos EUA (Oregon) para tutoriais.
   + **Sistema operacional padrão**: Microsoft Windows Server 2012 R2

1. Clique em **Add a layer** e [adicione uma camada personalizada à pilha](workinglayers-custom.md) com as seguintes configurações.
   + **Nome**: S3Download
   + **Nome curto**: s3download

1. [Adicione uma instância ininterrupta](workinginstances-add.md) com as configurações padrão à camada S3Download e [inicie-a](workinginstances-starting.md).

Agora você pode instalar e executar a receita

**Para executar a receita**

1. [Edite a pilha para habilitar livros de receitas personalizados](workingcookbook-installingcustom-enable.md), e especifique as seguintes configurações.
   + **Tipo de repositório**: **Arquivamento do S3**.
   + **URL do repositório**: o URL do arquivo do livro de receitas que você registrou anteriormente.

   Aceite os valores padrão para as outras configurações e escolha **Save** para atualizar a configuração da pilha.

1. [Execute o comando de pilha Update Custom Cookbooks](workingstacks-commands.md), que instala a versão mais recente de seu livro de receitas personalizado nas instâncias online da pilha. Se uma versão mais antiga de seus livros de receitas estiver presente, este comando a sobrescreverá.

1. Execute a receita acionando o comando de stack **Execute Recipes (Executar receitas)** com a opção **Recipes to execute (Receitas para executar)** definida como **s3download::default**. Este comando inicia uma execução do Chef, com uma lista de execução que consiste em `s3download::default`.
**nota**  
Normalmente, você faz com que OpsWorks as pilhas [executem suas receitas automaticamente](workingcookbook-assigningcustom.md), atribuindo-as ao evento de ciclo de vida apropriado. Essas receitas também podem ser executadas acionando o evento manualmente. Use um comando de stack para acionar eventos Setup e Configure, e um [comando de pilha](workingapps-deploying.md) para acionar eventos Deploy e Undeploy.

Após a receita ser executada com sucesso, verifique isso.

**Para verificar s3download**

1. A primeira etapa é examinar o log do Chef. Sua pilha deve ter uma instância designada s3download1. Na página **Instances**, escolha **show** na coluna **Log** da instância para exibir o log do Chef. Role para baixo para encontrar a mensagem de log próximo ao fim.

   ```
   ...
   [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0]
   [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache.
   [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3******
   [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3)
   [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) 
   ...
   ```

1. [Use o RDP para fazer login na instância](workinginstances-rdp.md) e examine o conteúdo de `c:\chef`.