Obter valores de atributo diretamente - 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á.

Obter valores de atributo diretamente

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.

nota

Esta abordagem funciona apenas para pilhas do Linux.

Simular os atributos de implantação e configuração de pilha no Vagrant mostra como obter dados de configuração e implantação de pilha usando a sintaxe de nó para fazer referência diretamente aos atributos específicos. Às vezes, essa é a melhor abordagem. No entanto, muitos atributos são definidos em coleções ou listas cujos conteúdos e nomes variam de uma pilha para outra e ao longo do tempo para uma determinada pilha. Por exemplo, o atributo deploy contém uma lista de atributos de aplicativo, que são designados com o nome abreviado do aplicativo. A lista, incluindo os nomes de atributos de aplicativo, geralmente varia de uma pilha para outra e até mesmo entre implantações.

Geralmente, ela é útil e, às vezes, indispensável para obter os dados necessários ao enumerar atributos em uma lista ou uma coleção. Por exemplo, suponha que você queira saber os endereços IP públicos das instâncias de sua pilha. Essas informações estão no atributo ['opsworks']['layers'], que é definido como uma tabela de hash que contém um elemento para cada uma das camadas da pilha, designadas com o nome abreviado da camada. Cada elemento da camada é definido como uma tabela de hash que contém os atributos da camada, um dos quais é ['instances']. Esse elemento, por sua vez, é definido como outra tabela de hash que contém um atributo para cada uma das instâncias da camada, designada com o nome abreviado da instância. Cada atributo da instância é definido como outra tabela de hash que contém os atributos da instância, incluindo ['ip'], que representa o endereço IP público. Se você estiver tendo problemas para visualizar isso, o procedimento a seguir inclui um exemplo no formato JSON.

Este exemplo mostra como obter os dados do JSON de configuração e implantação de pilha para as camadas de uma pilha.

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

  2. Inicialize e configure o Test Kitchen, conforme descrito em Exemplo 1: Instalação de pacotes.

  3. Adicione dois diretórios a listip: recipes e environments.

  4. Crie uma versão JSON editada dos atributos de MyStack configuração e implantação que contenha os atributos relevantes. Ela deve ser parecida com a seguinte.

    { "opsworks": { "layers": { "php-app": { "name": "PHP App Server", "id": "efd36017-ec42-4423-b655-53e4d3710652", "instances": { "php-app1": { "ip": "192.0.2.0" } } }, "db-master": { "name": "MySQL", "id": "2d8e0b9a-0d29-43b7-8476-a9b2591a7251", "instances": { "db-master1": { "ip": "192.0.2.5" } } }, "lb": { "name": "HAProxy", "id": "d5c4dda9-2888-4b22-b1ea-6d44c7841193", "instances": { "lb1": { "ip": "192.0.2.10" } } } } } }
  5. Crie um arquivo de ambiente chamado test.json, cole o JSON de exemplo em default_attributes e salve o arquivo na pasta environments do livro de receitas. O arquivo deve ser semelhante ao seguinte (para resumir, a maior parte do JSON de exemplo é representado por reticências).

    { "default_attributes" : { "opsworks": { "layers": { ... } } }, "chef_type" : "environment", "json_class" : "Chef::Environment" }
  6. Substitua o texto em .kitchen.yml pelo seguinte conteúdo.

    --- driver: name: vagrant provisioner: name: chef_zero environments_path: ./environment platforms: - name: ubuntu-12.04 suites: - name: listip provisioner: client_rb: environment: test run_list: - recipe[listip::default] attributes:

Após a configuração do livro de receitas, use a receita a seguir para registrar os IDs de camada.

node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" end

A receita enumera as camadas em ['opsworks']['layers'] e registra o nome e o ID de cada camada.

Para executar a receita de registro de ID de camada
  1. Crie um arquivo chamado default.rb com a receita de exemplo e salve-o no diretório recipes.

  2. Executar kitchen converge.

A parte relevante da saída deve ser semelhante ao conteúdo a seguir.

Recipe: listip::default * log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T22:56:19+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 4) [2014-07-17T22:56:19+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193

Para listar os endereços IP das instâncias, você precisa de um ciclo aninhado, como o seguinte.

node['opsworks']['layers'].each do |layer, layerdata| log "#{layerdata['name']} : #{layerdata['id']}" layerdata['instances'].each do |instance, instancedata| log "Public IP: #{instancedata['ip']}" end end

O ciclo interno itera nas instâncias de cada camada e registra os endereços IP.

Para executar a receita de registro de IP da instância
  1. Substitua o código em default.rb pela receita de exemplo.

  2. Execute kitchen converge para executar a receita.

A parte relevante da saída deve ser semelhante ao conteúdo a seguir.

* log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[PHP App Server : efd36017-ec42-4423-b655-53e4d3710652] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: PHP App Server : efd36017-ec42-4423-b655-53e4d3710652 * log[Public IP: 192.0.2.0] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.0] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.0 * log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: MySQL : 2d8e0b9a-0d29-43b7-8476-a9b2591a7251 * log[Public IP: 192.0.2.5] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.5] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.5 * log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193] action write (listip::default line 2) [2014-07-17T23:09:34+00:00] INFO: HAProxy : d5c4dda9-2888-4b22-b1ea-6d44c7841193 * log[Public IP: 192.0.2.10] action write[2014-07-17T23:09:34+00:00] INFO: Processing log[Public IP: 192.0.2.10] action write (listip::default line 4) [2014-07-17T23:09:34+00:00] INFO: Public IP: 192.0.2.10

Quando concluir, execute kitchen destroy; o próximo tópico usa um novo livro de receitas.

nota

Um dos motivos mais comuns para enumerar uma coleção de JSON de configuração e implantação de pilha é para obter dados para um determinado aplicativo implantado, por exemplo, o respectivo diretório de implantação. Para ver um exemplo, consulte Receitas de implantação.