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á.
Simular os atributos de implantação e configuração de pilha no Vagrant
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
nota
Este tópico aplica-se apenas às instâncias do Linux. O Test Kitchen ainda não oferece suporte ao Windows, então você executará todos os exemplos do Windows em instâncias do AWS OpsWorks Stacks.
AWS OpsWorks O Stacks adiciona atributos de configuração e implantação da pilha ao objeto de nó de cada instância em sua pilha para cada evento do ciclo de vida. Esses atributos fornecem um snapshot da configuração da pilha, incluindo a configuração de cada camada e de suas instâncias online, a configuração de cada aplicativo implantado etc. Como esses atributos estão no objeto node, eles podem ser acessados por qualquer receita; a maioria das receitas para instâncias do AWS OpsWorks Stacks usa um ou mais desses atributos.
Uma instância executada em uma caixa Vagrant não é gerenciada pelo AWS OpsWorks Stacks, portanto, seu objeto de nó não inclui nenhuma configuração de pilha e atributos de implantação por padrão. No entanto, você pode adicionar um conjunto de atributos adequados ao ambiente do Test Kitchen. Em seguida, o Test Kitchen adiciona os atributos ao objeto node da instância, e suas receitas podem acessar os atributos da mesma forma que acessariam em uma instância do AWS OpsWorks Stacks.
Este tópico mostra como obter uma cópia de atributos de implantação e configuração de pilha apropriados, instalar os atributos em uma instância e acessá-los.
nota
Se você estiver usando o Test Kitchen para executar testes em suas receitas, fauxhai
Para configurar o livro de receitas
-
Crie um subdiretório de
opsworks_cookbooks
chamadoprintjson
e navegue até ele. -
Inicialize e configure o Test Kitchen, conforme descrito em Exemplo 1: Instalação de pacotes.
-
Adicione dois subdiretórios a
printjson
:recipes
eenvironments
.
É possível simular atributos de implantação e configuração de pilha adicionando um arquivo de atributos ao seu livro de receitas com as definições apropriadas, mas uma abordagem melhor é usar o ambiente do Test Kitchen. Há duas abordagens básicas:
-
Adicione definições de atributos a
.kitchen.yml
.Essa abordagem é útil se você tiver apenas alguns atributos. Para obter mais informações, consulte kitchen.yml
. -
Definir os atributos em um arquivo de ambiente e fazer referência ao arquivo em
.kitchen.yml
.Essa abordagem normalmente é preferível para atributos de implantação e configuração de pilha, porque o arquivo de ambiente já está no formato JSON. Você pode obter uma cópia dos atributos no formato JSON de uma instância adequada do AWS OpsWorks Stacks e simplesmente colá-la. Todos os exemplos usam um arquivo de ambiente.
A maneira mais simples de criar atributos de implantação e configuração de pilhapara seu livro de receitas é criar uma pilha devidamente configurada e copiar os atributos resultantes de uma instância como JSON. Para manter seu arquivo de ambiente do Test Kitchen gerenciável, edite o JSON para ter apenas os atributos de que suas receitas precisam. Os exemplos neste capítulo são baseados na pilha de Conceitos básicos das pilhas Linux do Chef 11, que é uma pilha de servidor de aplicativo PHP simples com um load balancer, servidores de aplicativos PHP e um servidor de banco de dados MySQL.
Para criar um JSON de configuração e implantação de pilha
-
Crie MyStack conforme descrito emConceitos básicos das pilhas Linux do Chef 11, incluindo a implantação do SimplePHPApp. Se preferir, omita a segunda instância PHP App Server solicitada em Etapa 4: Dimensionar MyStack; os exemplos não usam esses atributos.
-
Se você ainda não tiver feito isso, inicie a instância
php-app1
e faça login com SSH. -
Na janela do terminal, execute o seguinte comando agent cli:
sudo opsworks-agent-cli get_json
Esse comando imprime os atributos de implantação e configuração de pilha mais recentes da instância na janela do terminal no formato JSON.
-
Copie o JSON em um arquivo
.json
e salve-o em um local conveniente na sua estação de trabalho. Os detalhes dependem de seu cliente SSH. Por exemplo, se você estiver usando PuTTY no Windows, execute o comandoCopy All to Clipboard
, que copia todo o texto na janela do terminal para a área de transferência do Windows. Em seguida, cole o conteúdo em um arquivo.json
e edite o arquivo para remover texto adicional. -
Edite o MyStack JSON conforme necessário. Os atributos de implantação e configuração de pilha são numerosos, mas os livros de receitas normalmente usam apenas um pequeno subconjunto deles. Para manter seu arquivo de ambiente gerenciável, edite o JSON para que ele mantenha a estrutura original, mas contenha apenas os atributos que seus livros de receitas efetivamente usam.
Este exemplo usa uma versão altamente editada do MyStack JSON que inclui apenas dois
['opsworks']['stack']
atributos,['id]
e.['name']
Crie uma versão editada do MyStack JSON parecida com a seguinte:{ "opsworks": { "stack": { "name": "MyStack", "id": "42dfd151-6766-4f1c-9940-ba79e5220b58", }, }, }
Para inserir esse JSON no objeto de nó da instância, é necessário adicioná-lo a um ambiente do Test Kitchen.
Para adicionar atributos de implantação e configuração de pilha ao ambiente do Test Kitchen
-
Crie um arquivo de ambiente chamado
test.json
com o seguinte conteúdo e salve-o na pastaenvironments
do livro de receitas.{ "default_attributes": { "opsworks" : { "stack" : { "name" : "MyStack", "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58" } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }
O arquivo de ambiente tem os seguintes elementos:
-
default_attributes
: os atributos padrão no formato JSON.Esses atributos são adicionados ao objeto de nó com o tipo de atributo
default
, que é o tipo usado por todos os atributos JSON de configuração e implantação de pilha. Este exemplo usa a versão editada do JSON de configuração e implantação da pilha mostrado anteriormente. -
chef_type
: defina esse elemento comoenvironment
. -
json_class
: defina esse elemento comoChef::Environment
.
-
-
Edite
.kitchen.yml
para definir o ambiente do Test Kitchen da seguinte maneira.--- driver: name: vagrant provisioner: name: chef_solo environments_path: ./environments platforms: - name: ubuntu-12.04 suites: - name: printjson provisioner: solo_rb: environment: test run_list: - recipe[printjson::default] attributes:
Para definir o ambiente, adicione os seguintes elementos ao
.kitchen.yml
padrão criado porkitchen init
.- provisioner
-
Adicione os seguintes elementos.
-
name
: defina esse elemento comochef_solo
.Para replicar o ambiente AWS OpsWorks Stacks mais de perto, você pode usar o modo local do cliente Chef
em vez do Chef solo. O modo local é uma opção do cliente do Chef que usa uma versão leve do servidor do Chef (Chef Zero) que é executada localmente na instância e não em um servidor remoto. Ele permite que suas receitas usem os recursos de servidor do Chef, como pesquisa ou recipientes de dados, sem a conexão a um servidor remoto. -
environments_path
: o subdiretório do livro de receitas que contém o arquivo de ambiente,./environments
, neste exemplo.
-
- suites:provisioner
-
Adicione um elemento
solo_rb
com um conjunto de elementosenvironment
ao nome do arquivo de ambiente, menos a extensão .json. Este exemplo defineenvironment
comotest
.
-
Crie um arquivo de receitas designado
default.rb
com o seguinte conteúdo e salve-o no diretóriorecipes
do livro de receitas.log "Stack name: #{node['opsworks']['stack']['name']}" log "Stack id: #{node['opsworks']['stack']['id']}"
Essa receita apenas registra os dois valores de configuração e implantação da pilha que você adicionou ao ambiente. Embora a receita esteja sendo executada localmente no Virtual Box, você faz referência a esses atributos usando a mesma sintaxe de nó que usaria se a receita estivesse sendo executada em uma instância do AWS OpsWorks Stacks.
-
Executar
kitchen converge
. Você deve ver algo semelhante à seguinte saída de log.... Converging 2 resources Recipe: printjson::default * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1) [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2) [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58 ...