Transmissão de dados para aplicativos - 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á.

Transmissão de dados para aplicativos

Importante

O AWS OpsWorks Stacks não está mais aceitando novos clientes. Os clientes atuais poderão usar o console do OpsWorks, a API, a CLI e os recursos do CloudFormation normalmente até 26 de maio de 2024, quando serão descontinuados. Para se preparar para essa transição, recomendamos que você transfira suas pilhas para o AWS Systems Manager o mais rápido possível. Para obter mais informações, consulte AWS OpsWorks Stacks Perguntas frequentes sobre o fim da vida útil e Como migrar seus aplicativos AWS OpsWorks Stacks para o Application Manager AWS Systems Manager.

Muitas vezes, é útil transmitir dados como pares de chave-valor a um aplicativo no servidor. Para fazer isso, use um JSON personalizado para adicionar os dados à pilha. AWS OpsWorks Stacks adiciona os dados a cada objeto de nó da instância para cada evento de ciclo de vida.

Observe, no entanto, que embora as receitas personalizadas possam obter os dados do JSON personalizado no objeto de nó usando atributos do Chef, os aplicativos não conseguem fazer o mesmo. Uma abordagem para a obtenção de dados do JSON personalizado para um ou mais aplicativos é implementar uma receita personalizada que extraia os dados do objeto node e grave-os em um arquivo que o aplicativo possa ler. O exemplo neste tópico mostra como gravar os dados em um arquivo YAML, mas você pode usar a mesma abordagem básica para outros formatos, como JSON ou XML.

Para transmitir dados de chave-valor para instâncias da pilha, adicione um JSON personalizado, como o mostrado a seguir, à pilha. Para obter mais informações sobre como adicionar um JSON personalizado a uma pilha, consulte Usar JSON personalizado.

{ "my_app_data": { "app1": { "key1": "value1", "key2": "value2", "key3": "value3" }, "app2": { "key1": "value1", "key2": "value2", "key3": "value3" } } }

O exemplo pressupõe que você tenha dois aplicativos cujos nomes curtos são app1 e app2, sendo que cada um deles tem três valores de dados. A receita associada pressupõe que você use os nomes curtos dos aplicativos para identificar os dados associados; outros nomes são arbitrários. Para obter mais informações sobre os nomes abreviados de aplicativos, consulte Configurações.

A receita no exemplo a seguir mostra como extrair os dados para cada aplicativo dos atributos deploy e inseri-los em um arquivo .yml. A receita pressupõe que seu JSON personalizado contenha dados para cada aplicativo.

node[:deploy].each do |app, deploy| file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do content YAML.dump(node[:my_app_data][app].to_hash) end end

Os atributos deploy contêm um atributo para cada aplicativo, chamado pelo nome abreviado do aplicativo. Cada atributo do aplicativo contém um conjunto de atributos que representam várias informações sobre o aplicativo. Este exemplo usa o diretório de implementação do aplicativo, que é representado pelo atributo [:deploy][:app_short_name][:deploy_to]. Para obter mais informações sobre [:deploy], consulte Atributos deploy.

Para cada aplicativo em deploy, a receita faz o seguinte:

  1. Cria um arquivo chamado app_data.yml no subdiretório shared/config do diretório [:deploy_to] do aplicativo.

    Para obter mais informações sobre como o AWS OpsWorks Stacks instala aplicativos, consulte Receitas de implantação.

  2. Converte os valores do JSON personalizado para YAML e grava os dados formatados em app_data.yml.

Para transmitir dados para um aplicativo
  1. Adicione um aplicativo à pilha e anote o nome abreviado dele. Para obter mais informações, consulte Adição de aplicativos.

  2. Adicione um JSON personalizado com os dados do aplicativo aos atributos deploy, conforme descrito anteriormente. Para obter mais informações sobre como adicionar um JSON personalizado a uma pilha, consulte Usar JSON personalizado.

  3. Crie um livro de receitas e adicione uma receita a ele com código baseado no exemplo anterior, modificado conforme necessário em relação aos nomes dos atributos que você usou no JSON personalizado. Para obter mais informações sobre como criar livros de receitas e receitas, consulte Livros de receitas e receitas. Se você já tem receitas personalizadas para esta pilha, também pode adicionar a receita a um livro de receitas, ou até mesmo adicionar o código a uma receita Implantar existente.

  4. Instale o livro de receitas em sua pilha. Para obter mais informações, consulte Instalação de livros de receitas personalizados.

  5. Associe a receita ao evento de ciclo de vida Implantar da camada do servidor de aplicativos. AWS OpsWorks O Stacks executará a receita em cada instância nova, depois de inicializada. Para obter mais informações, consulte Execução de receitas.

  6. Implante o aplicativo, o que também instala os atributos de configuração e implantação da pilha, que agora contém seus dados.

nota

Se for necessário implantar os arquivos de dados antes da implantação do aplicativo, também é possível associar a receita ao evento de ciclo de vida Configuração da camada, o que ocorre uma vez, logo após a conclusão da inicialização da instância. No entanto, o AWS OpsWorks Stacks não terá criado os diretórios de implantação ainda. Portanto, sua receita deve criar os diretórios necessários explicitamente antes de criar o arquivo de dados. O exemplo a seguir cria explicitamente o diretório /shared/config do aplicativo e, em seguida, cria um arquivo de dados nesse diretório.

node[:deploy].each do |app, deploy| directory "#{deploy[:deploy_to]}/shared/config" do owner "deploy" group "www-data" mode 0774 recursive true action :create end file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do content YAML.dump(node[:my_app_data][app].to_hash) end end

Para carregar os dados, você pode usar algo como o seguinte código do Sinatra:

#!/usr/bin/env ruby # encoding: UTF-8 require 'sinatra' require 'yaml' get '/' do YAML.load(File.read(File.join('..', '..', 'shared', 'config', 'app_data.yml'))) End

Você pode atualizar os valores dos dados do aplicativo a qualquer momento atualizando o JSON personalizado, como mostrado a seguir.

Para atualizar os dados do aplicativo
  1. Edite o JSON personalizado para atualizar os valores de dados.

  2. Implante o aplicativo novamente, o que instrui o AWS OpsWorks Stacks a executar as receitas Implantar nas instâncias da pilha. As receitas usarão os atributos atualizados de configuração e implantação da pilha, portanto, sua receita atualizará os arquivos de dados com os valores atuais.