Executando uma receita em uma instância AWS OpsWorks do Stacks Linux - 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á.

Executando uma receita em uma instância AWS OpsWorks do Stacks Linux

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.

O Test Kitchen e o Vagrant fornecem uma maneira simples e eficiente de implementar livros de receitas, mas para verificar se as receitas de um livro de receitas serão executadas corretamente na produção, você deve executá-las em uma instância do Stacks. AWS OpsWorks Este tópico descreve como instalar um livro de receitas personalizado em uma instância Linux do AWS OpsWorks Stacks e executar uma receita simples. O tópico também fornece algumas dicas para corrigir os bugs de receita eficientemente.

Para obter uma descrição de como executar receitas em instâncias do Windows, consulte Executar uma receita na instância Windows.

Criar e executar a receita

Primeiro, é necessário criar uma pilha. As instruções a seguir resumem o procedimento da criação de uma pilha neste exemplo. Para ter mais informações, consulte Criar uma nova pilha.

Para criar uma pilha do
  1. Abra o console do AWS OpsWorks Stacks e clique em Add Stack (Adicionar pilha).

  2. Especifique as seguintes configurações, aceite os padrões para as outras configurações e clique em Add Stack.

    • Nome — OpsTest

    • Chave SSH padrão: um par de chaves do Amazon EC2

    Se for necessário criar um par de chaves do Amazon EC2, consulte Pares de chaves do Amazon EC2. Observe que o par de chaves deve pertencer a mesma região da AWS que a instância. O exemplo usa a região padrão, Oeste dos EUA (Oregon).

  3. Clique em Add a layer e adicione uma camada personalizada à pilha com as seguintes configurações.

    • Nome — OpsTest

    • Nome curto: opstest

    Qualquer tipo de camada funcionará nas pilhas do Linux, mas o exemplo não exige nenhum dos pacotes instalados por outros tipos de camada, portanto, uma camada personalizada é a abordagem mais simples.

  4. Adicione uma instância ininterrupta com as configurações padrão à camada e inicie-a.

Enquanto a instância está iniciando, o que geralmente demora vários minutos, você pode criar o livro de receitas. Este exemplo usa uma versão modificada de receita do Lógica condicional, que cria um diretório de dados cujo nome depende da plataforma.

Para configurar o livro de receitas
  1. Crie um diretório em opsworks_cookbooks chamado opstest e navegue até ele.

  2. Crie um arquivo metadata.rb com o seguinte conteúdo e salve-o em opstest.

    name "opstest" version "0.1.0"
  3. Criar um diretório recipes em opstest.

  4. Crie um arquivo default.rb com a seguinte receita e salve-o no diretório recipes.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) directory data_dir do mode 0755 owner 'root' group 'root' recursive true action :create end

    Observe que a receita registra uma mensagem, designada Chef::Log.info. Você não está usando o Test Kitchen para este exemplo, então o log método não é muito útil. Chef::Log.infocoloca a mensagem no log do Chef, que você pode ler após a conclusão da execução do Chef. AWS OpsWorks O Stacks fornece uma maneira fácil de visualizar esses registros, conforme descrito posteriormente.

    nota

    Os logs do Chef normalmente contêm uma grande quantidade de informações relativamente rotineiras e desinteressantes. Os caracteres '*' antes e depois da mensagem de texto facilitam sua localização.

  5. Crie um arquivo .zip dos opsworks_cookbooks. Para instalar seu livro de receitas em uma instância do AWS OpsWorks Stacks, você deve armazená-lo em um repositório e fornecer ao AWS OpsWorks Stacks as informações necessárias para fazer o download do livro de receitas para a instância. Você pode armazenar os livros de receitas em diversos tipos de repositório que possuem suporte. Este exemplo armazena um arquivo compactado contendo os livros de receitas em um bucket do Amazon S3. Para obter mais informações sobre repositórios de livros de receitas, consulte Repositórios de livro de receitas.

    nota

    Para simplificar, este exemplo apenas arquiva todo o diretório opsworks_cookbooks. No entanto, isso significa que o AWS OpsWorks Stacks baixará todos os livros de receitas opsworks_cookbooks para a instância, mesmo que você use apenas um deles. Para instalar somente o livro de receitas como exemplo, crie outro diretório pai e mova opstest para esse diretório. Em seguida, crie um arquivo .zip do diretório pai e use-o em vez de opsworks_cookbooks.zip.

    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? ou Como faço para excluir um bucket do S3?.

  6. Faça upload do arquivo em um bucket do Amazon S3, torne o arquivo público e registre o URL do arquivo.

Agora você pode instalar o livro de receitas e executar a receita.

Para executar a receita
  1. Edite a pilha para habilitar livros de receitas personalizados, 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

    Use os valores padrão nas outras configurações e clique em Save para atualizar a configuração da pilha.

  2. Execute o comando de pilha Update Custom Cookbooks, que instala a versão atual de seus livros de receitas personalizados nas instâncias da pilha. Se uma versão mais antiga de seus livros de receitas estiver presente, este comando a sobrescreverá.

  3. Execute a receita acionando o comando de stack Execute Recipes (Executar receitas) com a opção Recipes to execute (Receitas para executar) definida como opstest::default. Este comando inicia uma execução do Chef, com uma lista de execução que consiste em opstest::default.

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

Para verificar opstest
  1. A primeira etapa é examinar o log do Chef. Clique em show na coluna Log da instância opstest1 para exibir o log. Role para baixo e veja sua mensagem de log próxima à parte inferior.

    ... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Creating a data directory.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
  2. Utilize o SSH para fazer login na instância e listar o conteúdo de /srv/www/.

Se você seguiu todas as etapas, verá /srv/www/config em vez do diretório /srv/www/shared que estava esperando. A seção a seguir fornece algumas diretrizes para corrigir rapidamente tais bugs.

Executar a receita automaticamente

O comando Execute Recipes é uma maneira conveniente de testar receitas personalizadas, por isso ele é usado na maioria dos exemplos. No entanto, na prática, você normalmente executa receitas em pontos padrão do ciclo de vida de uma instância, como depois que a instância termina de inicializar ou quando você implanta um aplicativo. AWS OpsWorks O Stacks simplifica a execução de receitas em sua instância ao oferecer suporte a um conjunto de eventos de ciclo de vida para cada camada: configuração, configuração, implantação, desimplantação e desativação. Você pode fazer com que o AWS OpsWorks Stacks execute uma receita automaticamente nas instâncias de uma camada atribuindo a receita ao evento de ciclo de vida apropriado.

Normalmente, os diretórios são criados, assim que uma instância termina a inicialização, que corresponde à instalação do evento. Os procedimentos a seguir mostram como executar a receita de exemplo na configuração usando a mesma pilha criada anteriormente no exemplo. O mesmo procedimento pode ser usado para os outros eventos.

Para executar automaticamente uma receita na instalação
  1. Escolha Camadas no painel de navegação e, em seguida, escolha o ícone de lápis ao lado do link Receitas da OpsTest camada.

  2. Adicione opstest::default às receitas Setup (Instalação) da camada, clique em + para adicioná-lo à camada e selecione Save (Salvar) para salvar a configuração.

  3. Escolha Instances, adicione outra instância à layer e a inicie.

    A instância deve ser designada opstest2. Depois que a inicialização for concluída, as AWS OpsWorks pilhas serão executadas. opstest::default

  4. Quando a instância opstest2 estiver online, verifique se /srv/www/shared está presente.

nota

Se você atribuiu as receitas para configurar ou implantar eventos, também é possível executá-las manualmente usando um comando de pilha (instalar e configurar) ou um comando de implante (Implantar) para acionar o evento. Observe que se você tiver várias receitas atribuídas a um evento, esses comandos executam todas elas.

Solucionar problemas e corrigir receitas

Se você não estiver recebendo os resultados esperados ou se suas receitas ainda não estão sendo executadas com sucesso, a solução de problemas começa normalmente, examinando o log do Chef. Ele contém uma descrição detalhada da execução e inclui quaisquer mensagens de log em linha de suas receitas. Os logs são particularmente úteis se sua receita simplesmente tiver falhado. Quando isso acontece, o Chef registra o erro, incluindo um rastreamento de pilha.

Se a receita tiver sido executada com sucesso como neste exemplo, o log do Chef não costuma ajuda muito. Neste caso, você pode descobrir o problema, examinando mais de perto a receita, especialmente as primeiras linhas:

Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "centos" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

CentOS é um substituto razoável para o Amazon Linux em testes de receitas em Vagrant, mas agora você está executando em uma instância do Amazon Linux. O valor da plataforma para o Amazon Linux é amazon, que não está incluído na chamada value_for_platform. Portanto, a receita cria /srv/www/config por padrão. Para obter mais informações sobre solução de problemas, consulte Guia de depuração e solução de problemas.

Agora que você identificou o problema, atualize a receita e verifique a correção. É possível voltar aos arquivos originais, atualizar default.rb, carregar um novo arquivo no Amazon S3 etc. No entanto, esse processo pode ser um pouco tedioso e demorado. As instruções a seguir mostram uma abordagem muito mais rápida, especialmente útil para os bugs de receita simples, como aquele do exemplo: edite a receita na instância.

Para editar uma receita em uma instância
  1. Use o SSH para fazer login na instância e, em seguida, execute sudo su para elevar seus privilégios. É necessário ter privilégios de root para acessar os diretórios do livro de receitas.

  2. AWS OpsWorks O Stacks armazena seu livro de receitas/opt/aws/opsworks/current/site-cookbooks, então navegue até. /opt/aws/opsworks/current/site-cookbooks/opstest/recipes

    nota

    AWS OpsWorks O Stacks também armazena uma cópia de seus livros de receitas em. /opt/aws/opsworks/current/merged-cookbooks Não edite aquele livro de receitas. Quando você executa a receita, o AWS OpsWorks Stacks copia o livro de receitas de .../site-cookbooks para.../merged-cookbooks, portanto, todas as alterações feitas .../merged-cookbooks serão sobrescritas.

  3. Use um editor de texto na instância para editar default.rb, e substitua centos com amazon. Agora, as configurações devem ser semelhantes a essas.

    Chef::Log.info("******Creating a data directory.******") data_dir = value_for_platform( "amazon" => { "default" => "/srv/www/shared" }, "ubuntu" => { "default" => "/srv/www/data" }, "default" => "/srv/www/config" ) ...

Para verificar a correção, execute a receita executando o comando de pilha Execute Recipe novamente. Agora a instância deve ter um diretório /srv/www/shared. Se você precisar fazer outras alterações em uma receita, é possível executar Execute Recipe sempre que desejar; não é necessário interromper e reiniciar a instância cada vez que você executar o comando. Quando você estiver satisfeito com a receita funcionando corretamente, não se esqueça de atualizar o código na fonte de seu livro de receitas.

nota

Se você atribuiu sua receita a um evento de ciclo de vida para que o AWS OpsWorks Stacks a execute automaticamente, você sempre pode usar Execute Recipe para executar novamente a receita. Você também pode executar novamente a receita quantas vezes quiser sem reiniciar a instância usando o console AWS OpsWorks Stacks para acionar manualmente o evento apropriado. No entanto, esta abordagem executa todas as receitas do evento. Lembrete: