Etapa 2.5: Implantar um aplicativo - AWS OpsWorks

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

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 ou por meio do Premium AWS 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. 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.

Criar o aplicativo e armazená-lo em um repositório

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.

  2. 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>
  3. Crie um bucket do S3, faça upload de default.htm para o bucket e registre o URL para uso posterior. Para simplificar, torne o arquivo público.

    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 AWS OpsWorks Stacks.

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

Implemente uma receita para implantar o aplicativo

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 para fazer download do arquivo. No entanto, o AWS OpsWorks Stacks não instala esse SDK em instâncias do Windows, então a receita começa com o chef_gemrecurso, 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_package.

O pacote da receita é um recurso 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. AWS 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 AWS 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

3: Fazer download do arquivo

A terceira parte da receita cria um objeto de cliente do S3 e usa seu método get_object 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

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

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

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

  4. Para Command, escolha Update Custom Cookbooks. Esse comando instala o livro de receitas atualizado na instância.

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

Adicionar a receita à camada personalizada do IIS

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 AWS 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 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. No painel de navegação, selecione Layers e, em seguida, escolha Recipes em Layer IISExample.

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

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

Adicionar um aplicativo

A tarefa final é adicionar um aplicativo à pilha para representar seu aplicativo no ambiente AWS 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).

  2. Configure o aplicativo com as definições a seguir.

    • Nome: IIIS-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.

  3. 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. AWS 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

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

  2. 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:

nota

Para obter mais informações sobre como solucionar falhas nas implantações ou nos aplicativos, consulte Depurar receitas.

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.