

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

# Etapa 2.5: Implantar um aplicativo
<a name="gettingstarted-windows-deploy"></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).

A instalação do IIS cria um diretório `C:\inetpub\wwwroot` para o código do seu aplicativo e os arquivos relacionados. A próxima etapa é instalar um aplicativo nesse diretório. Para este exemplo, você instalará uma página inicial HTML estática, `default.html`, em `C:\inetpub\wwwroot`. Você pode facilmente estender a abordagem geral para lidar com cenários mais complexos, como aplicativos ASP.NET.

Você poderia incluir os arquivos do aplicativo em seu livro de receitas e fazer `install.rb` copiá-los para `C:\inetpub\wwwroot`. Para obter exemplos de como fazer isso, consulte [Exemplo 6: Criação de arquivos](cookbooks-101-basics-files.md). No entanto, essa abordagem não é muito flexível ou eficiente, e normalmente é melhor para separar o desenvolvimento do livro de receitas do desenvolvimento de aplicativos.

A melhor solução é implementar uma receita de implantação separada que recupere o código do aplicativo e os arquivos relacionados de um repositório, qualquer repositório que você preferir, e não apenas o repositório do livro de receitas; e o instale em cada instância de servidor IIS. Essa abordagem separa o desenvolvimento de receitas do desenvolvimento de aplicativos e, quando você precisar atualizar o aplicativo, ela permite que você simplesmente execute a receita de implantação novamente sem precisar atualizar seus livros de receitas.

Este tópico mostra como implementar uma receita de implantação simples que implanta `default.htm` em seu servidor IIS. Você pode facilmente estender este exemplo para aplicativos mais complexos.

**Topics**
+ [Criar o aplicativo e armazená-lo em um repositório](#w2ab1c14c47c17c23c25c15)
+ [Implemente uma receita para implantar o aplicativo](#w2ab1c14c47c17c23c25c17)
+ [Atualizar os livros de receitas da instância](#w2ab1c14c47c17c23c25c19)
+ [Adicionar a receita à camada personalizada do IIS](#w2ab1c14c47c17c23c25c21)
+ [Adicionar um aplicativo](#w2ab1c14c47c17c23c25c23)
+ [Implantar o aplicativo e abrir o aplicativo](#w2ab1c14c47c17c23c25c25)

## Criar o aplicativo e armazená-lo em um repositório
<a name="w2ab1c14c47c17c23c25c15"></a>

Você pode usar qualquer repositório que preferir para seus aplicativos. Para simplificar, este exemplo armazena `default.htm` em um bucket público do S3.

**Para criar o aplicativo**

1. Crie um diretório chamado `iis-application` em um local conveniente na sua estação de trabalho.

1. Adicione um arquivo `default.htm` a `iis-application`, com o seguinte conteúdo.

   ```
   <!DOCTYPE html>
   <html>
     <head>
       <title>IIS Example</title>
     </head>
     <body>
       <h1>Hello World!</h1>
     </body>
   </html>
   ```

1. [Crie um bucket do S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html), [faça upload de `default.htm` para o bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/PuttingAnObjectInABucket.html) e registre o URL para uso posterior. Para simplificar, [torne o arquivo público](https://docs.aws.amazon.com/AmazonS3/latest/gsg/OpeningAnObject.html). 
**nota**  
Este é um aplicativo muito simples, mas você pode estender os princípios básicos para lidar com aplicativos de nível de produção.  
Para aplicativos mais complexos com vários arquivos, geralmente é mais simples criar um arquivo .zip de `iis-application` e fazer o upload dele para seu bucket do S3.  
Você poderá então fazer download do arquivo .zip e extrair o conteúdo para o diretório apropriado. Não há necessidade de fazer download de vários arquivos, criar uma estrutura de diretório e assim por diante.
Para um aplicativo de produção, provavelmente será melhor manter seus arquivos privados. Para obter um exemplo de como fazer com que uma receita faça download dos arquivos de um bucket privado do S3, consulte [Usando o SDK para Ruby em uma instância do Windows OpsWorks Stacks](cookbooks-101-opsworks-s3-windows.md).
Você pode armazenar seu aplicativo em qualquer repositório adequado.  
Você normalmente faz download do aplicativo usando uma API pública de um repositório. Este exemplo usa a API do Amazon S3. Se, por exemplo, você armazenar seu aplicativo em GitHub, poderá usar a [GitHub API](https://developer.github.com/guides/getting-started/).

## Implemente uma receita para implantar o aplicativo
<a name="w2ab1c14c47c17c23c25c17"></a>

Adicione uma receita chamada `deploy.rb` ao diretório `iis-cookbook` `recipes` com o seguinte conteúdo.

```
chef_gem "aws-sdk-s3" do
  compile_time false
  action :install
end

ruby_block "download-object" do
  block do
    require 'aws-sdk-s3'

    #1  
    # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt'
    Aws.use_bundled_cert!

    #2  
    query = Chef::Search::Query.new
    app = query.search(:aws_opsworks_app, "type:other").first
    s3region = app[0][:environment][:S3REGION]
    s3bucket = app[0][:environment][:BUCKET]
    s3filename = app[0][:environment][:FILENAME]

    #3  
    s3_client = Aws::S3::Client.new(region: s3region)
    s3_client.get_object(bucket: s3bucket,
                         key: s3filename,
                         response_target: 'C:\inetpub\wwwroot\default.htm')
  end 
  action :run
end
```

Este exemplo usa [SDK para Ruby v2](https://docs.aws.amazon.com/sdkforruby/api/index.html) para fazer download do arquivo. No entanto, o OpsWorks Stacks não instala esse SDK em instâncias do Windows, então a receita começa com o [https://docs.chef.io/chef/resources.html#chef-gem](https://docs.chef.io/chef/resources.html#chef-gem)recurso, que processa essa tarefa.

**nota**  
O recurso `chef_gem` instala gems na versão do Ruby dedicada do Chef, que é a versão usada pelas receitas. Se você quiser instalar um gem para uma versão do Ruby para todo o sistema, use o recurso [gem\$1package](https://docs.chef.io/chef/resources.html#gem-package).

O pacote da receita é um recurso [https://docs.chef.io/chef/resources.html#ruby-block](https://docs.chef.io/chef/resources.html#ruby-block), que executa um bloco de código Ruby que usa o SDK para Ruby para fazer download de `default.htm`. O código no `ruby_block` pode ser dividido nas seguintes seções, que correspondem aos comentários numerados no exemplo de código. 

**1: Especificar um pacote de certificados**  
O Amazon S3 usa SSL, portanto, você precisa de um certificado apropriado para baixar os objetos de um bucket do S3. O SDK para Ruby v2 não inclui um pacote de certificados, então você deve fornecer um e configurar o SDK para Ruby para usá-lo. OpsWorks O Stacks não instala um pacote de certificados diretamente, mas instala o Git, que inclui um pacote de certificados (). `curl-ca-bundle.crt` Para sua conveniência, este exemplo configura o SDK para Ruby para usar o pacote de certificados Git para SSL. Você também pode instalar seu próprio pacote e configurar o SDK apropriadamente.

**2: Recuperar os dados do repositório**  
Para fazer download de um objeto do Amazon S3, você precisa da região da AWS, do nome do bucket e do nome da chave. Conforme descrito posteriormente, este exemplo fornece essas informações ao associar um conjunto de variáveis de ambiente ao aplicativo. Quando você implanta um aplicativo, o OpsWorks Stacks adiciona um conjunto de atributos ao objeto node da instância. Esses atributos são basicamente uma tabela de hash que contém a configuração do aplicativo, incluindo as variáveis de ambiente. Os atributos de aplicativo para esse aplicativo serão semelhantes aos seguintes, no formato JSON.   

```
{
  "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3",
  "app_source": {
      "password": null,
      "revision": null,
      "ssh_key": null,
      "type": "other",
      "url": null,
      "user": null
  },
  "attributes": {
      "auto_bundle_on_deploy": true,
      "aws_flow_ruby_settings": {},
      "document_root": null,
      "rails_env": null
  },
  "data_sources": [{"type": "None"}],
  "domains": ["iis_example_app"],
  "enable_ssl": false,
  "environment": {
      "S3REGION": "us-west-2",
      "BUCKET": "windows-example-app",
      "FILENAME": "default.htm"
  },
  "name": "IIS-Example-App",
  "shortname": "iis_example_app",
  "ssl_configuration": {
      "certificate": null,
      "private_key": null,
      "chain": null
  },
  "type": "other",
  "deploy": true
}
```
As variáveis de ambiente do aplicativo são armazenadas no atributo `[:environment]`. Para recuperá-las, use uma consulta de pesquisa do Chef para recuperar a tabela de hash do aplicativo, que está no nó `aws_opsworks_app`. Este aplicativo será definido como o tipo `other`, para que a consulta pesquise aplicativos desse tipo. A receita aproveita o fato de que há apenas um aplicativo nesta instância e, portanto, a tabela de hash de interesse é simplesmente `app[0]`. Para sua conveniência, a receita então atribui a região, o bucket e os nomes de arquivo às variáveis.  
Para obter mais informações sobre como usar o Chef, consulte.[Obter valores de atributo com a pesquisa do Chef](cookbooks-101-opsworks-opsworks-stack-config-search.md)

**3: Fazer download do arquivo**  
A terceira parte da receita cria um [objeto de cliente do S3](https://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html) e usa seu método `[get\$1object](https://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#get_object-instance_method)` para fazer download de `default.htm` para o diretório `C:\inetpub\wwwroot` da instância. 

**nota**  
Uma receita é um aplicativo Ruby e, portanto, o código Ruby não precisa estar necessariamente em um `ruby_block`. No entanto, o código no corpo da receita é executado primeiro, seguido pelos recursos, na ordem. Para este exemplo, se você colocar o código de download no corpo da receita, ele falhará porque o recurso `chef_gem` ainda não terá instalado o SDK para Ruby. O código no recurso `ruby_block` é executado quando o recurso é executado, depois que o recurso `chef_gem` tiver instalado o SDK para Ruby.

## Atualizar os livros de receitas da instância
<a name="w2ab1c14c47c17c23c25c19"></a>

OpsWorks O Stacks instala automaticamente livros de receitas personalizados em novas instâncias. No entanto, você está trabalhando com uma instância existente e, portanto, deve atualizar seu livro de receitas manualmente.

**Para atualizar os livros de receitas da instância**

1. Crie um arquivo `.zip` de `iis-cookbook` e faça upload dele em um bucket do S3.

   Isso substituirá o livro de receitas existente, mas o URL permanecerá o mesmo, portanto, não será necessário atualizar a configuração da pilha.

1. Se a sua instância não estiver online, reinicie-a.

1. Depois que a instância estiver online, escolha **Stack** no painel de navegação e, em seguida, **Run Command**.

1. Para **Command**, escolha [Update Custom Cookbooks](workingstacks-commands.md). Esse comando instala o livro de receitas atualizado na instância.

1. Escolha **Update Custom Cookbooks**. Esse comando pode levar alguns minutos para ser concluído.

## Adicionar a receita à camada personalizada do IIS
<a name="w2ab1c14c47c17c23c25c21"></a>

Assim como ocorre com `install.rb`, a forma preferencial de lidar com a implantação é atribuir `deploy.rb` ao evento de ciclo de vida apropriado. Em geral, você atribui as receitas de implantação ao evento Implantar, e elas são chamadas coletivamente como Implantar receitas. A atribuição de uma receita ao evento implantar não aciona o evento. Em vez disso:
+ Para novas instâncias, o OpsWorks Stacks executa automaticamente as receitas de implantação após a conclusão das receitas de configuração, para que as novas instâncias tenham automaticamente a versão atual do aplicativo.
+ Para as instâncias online, você usa um [comando de implantação](workingapps-deploying.md) para instalar manualmente os aplicativos novos ou atualizados.

  Este comando aciona um evento de Implantação nas instâncias da pilha, que executa o Implantar receitas.

**Para atribuir deploy.rb ao evento Implantar da camada**

1. Escolha **Camadas** no painel de navegação e, em seguida, escolha **Receitas** em ** IISExampleCamada**.

1. Em **Custom Chef Recipes (Receitas do Chef personalizadas)**, adicione **iis-cookbook::deploy** à caixa de receitas **Deploy (Implantação)** e escolha **\$1** para adicionar a receita à camada.

1. Escolha **Save** para salvar a nova configuração. O Implantar receitas personalizado agora deve incluir `iis-cookbook::deploy`.

## Adicionar um aplicativo
<a name="w2ab1c14c47c17c23c25c23"></a>

A tarefa final é adicionar um aplicativo à pilha para representar seu aplicativo no ambiente OpsWorks Stacks. Um aplicativo inclui metadados, como o nome de exibição do aplicativo, e os dados necessários para fazer o download do aplicativo de seu repositório.

**Para adicionar o aplicativo à pilha**

1. No painel de navegação, escolha **Apps (Aplicativos)** e depois **Add an app (Adicionar um aplicativo)**.

1. Configure o aplicativo com as definições a seguir.
   + **Nome**: I**IIS-Example-App**
   + **Tipo de repositório**: **outro**
   + **Variáveis de ambiente**: adicione estas três variáveis de ambiente:
     + **S3REGION**: a região do bucket (neste caso, `us-west-1`).
     + **BUCKET**: o nome do bucket, como `windows-example-app`.
     + **FILENAME**: o nome do arquivo: **default.htm**.

1. Aceite os valores padrão para as demais configurações e escolha **Add App (Adicionar aplicativo)** para adicionar o aplicativo à pilha.

**nota**  
Este exemplo usa variáveis de ambiente para fornecer os dados de download. Uma abordagem alternativa é usar um tipo de repositório do S3 Archive e fornecer a URL do arquivo. OpsWorks O Stacks adiciona as informações, junto com dados opcionais, como suas credenciais da AWS, ao atributo do `app_source` aplicativo. Sua receita de implantação deve obter o URL dos atributos do aplicativo e analisá-lo para extrair a região, o nome do bucket e o nome do arquivo.

## Implantar o aplicativo e abrir o aplicativo
<a name="w2ab1c14c47c17c23c25c25"></a>

OpsWorks O Stacks implanta aplicativos automaticamente em novas instâncias, mas não em instâncias on-line. Como sua instância já está em execução, será necessário implantar o aplicativo manualmente.

**Para implantar o aplicativo**

1. Escolha **Apps (Aplicativos)** no painel de navegação e escolha **deploy (implantar)** na coluna **Actions (Ações)** do aplicativo.

1. **Command (Comando)** deve ser definido como **Deploy (Implantar)**. Escolha **Deploy (Implantar)** no canto inferior direito da página **Deploy App (Implantar aplicativo)**. Esse comando pode levar alguns minutos para ser concluído.

   Depois que a implantação for concluída, você retornará para a página **Apps (Aplicativos)**. O indicador **Status** mostrará **successful (bem-sucedido)** em verde, e o nome do aplicativo terá uma marca de verificação verde próxima a ele para indicar uma implantação bem-sucedida.

**nota**  
Os aplicativos do Windows são sempre o tipo de aplicativo **Other (Outros)** e, portanto, a implantação do aplicativo faz o seguinte:  
Adiciona os dados do aplicativo aos [atributos de configuração e de implantação da pilha](workingcookbook-json.md), conforme descrito anteriormente.
Aciona um evento Implantar nas instâncias da pilha, que executa seu Implantar receitas personalizado.

**nota**  
Para obter mais informações sobre como solucionar falhas nas implantações ou nos aplicativos, consulte [Depurar receitas](troubleshoot-debug.md).

O aplicativo está instalado. Você pode abri-lo ao escolher **Instances** no painel **Navigation** e, em seguida, o endereço IP público da instância. Isso envia uma solicitação HTTP para a instância, e você verá em seu navegador algo como o mostrado a seguir.

![\[Text displaying "Hello World!" in large, bold font against a white background.\]](http://docs.aws.amazon.com/pt_br/opsworks/latest/userguide/images/windows-iis-app.png)
