アプリケーションへのデータの引き渡し - AWS OpsWorks

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

アプリケーションへのデータの引き渡し

重要

この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post または AWS Premium Support を通じて AWS Support チームにお問い合わせください。

多くの場合、サーバーのアプリケーションにキーと値のペアなどのデータを渡すと便利です。そのためには、カスタム JSON を使用してデータをスタックに追加します。 AWS OpsWorks スタックは、ライフサイクルイベントごとに各インスタンスのノードオブジェクトにデータを追加します。

ただし、Chef 属性を使用したノードオブジェクトからのカスタム JSON データの取得は、レシピからはできますが、アプリケーションからはできないことに注意してください。カスタム JSON データを 1 つ以上のアプリケーションに渡すためには、node オブジェクトのデータを抽出して、それをアプリケーションが読み取ることができるファイルに書き込むカスタムレシピを実装する方法があります。このトピックの例では YAML ファイルにデータを書き込む方法を示しますが、同じ基本手順を JSON や XML などの他の形式にも使用できます。

スタックのインスタンスにキーと値のデータを渡すには、スタックに次のようなカスタム JSON を追加します。カスタム JSON をスタックに追加する方法の詳細については、「カスタム JSON の使用」を参照してください。

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

この例では、app1app2 という短縮名の 2 つのアプリケーションそれぞれに 3 つのデータ値があることを前提としています。添付のレシピでは、関連付けられたデータを識別するためにアプリケーションの短縮名を使用しており、他の名前は任意であることを前提としています。アプリケーションの短縮名の詳細については、「設定」を参照してください。

次の例のレシピでは、deploy 属性から各アプリケーション用のデータを抽出し、.yml ファイルに保存する方法を示しています。レシピは、カスタム JSON に各アプリケーション用のデータが含まれていることを前提としています。

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

deploy 属性には、各アプリケーションの属性が含まれています (アプリケーションの短縮前が付いています)。各アプリケーション属性には、アプリケーションに関するさまざまな情報を表す一連の属性が含まれます。この例では、[:deploy][:app_short_name][:deploy_to] 属性で表されるアプリケーションのデプロイメントディレクトリを使用しています。[:deploy] の詳細については、「deploy 属性」をご参照ください。

deploy の各アプリケーションに対して、レシピは以下のことを行います。

  1. app_data.yml という名前のファイルを、アプリケーションの [:deploy_to] ディレクトリの shared/config サブディレクトリに作成します。

    AWS OpsWorks スタックによるアプリケーションのインストール方法の詳細については、「」を参照してくださいDeploy レシピ

  2. アプリケーションのカスタム JSON 値を YAML に変換し、YAML 形式のデータを app_data.yml に書き込みます。

アプリケーションにデータを渡すには
  1. スタックにアプリケーションを追加し、その短縮名を書き留めます。詳細については、「アプリケーションの追加」を参照してください。

  2. 前述のように、カスタム JSON とアプリケーションのデータを deploy 属性に追加します。スタックにカスタム JSON を追加する方法の詳細については、「カスタム JSON の使用」を参照してください。

  3. クックブックを作成し、レシピを追加します。レシピのコードは、前述の例をベースにして、必要に応じてカスタム JSON に使用した属性名に変更してください。クックブックとレシピの作成方法の詳細については、「クックブックとレシピ」を参照してください。このスタック用のカスタムクックブックがすでにある場合は、既存のクックブックにレシピを追加することも、既存の Deploy レシピにコードを追加することもできます。

  4. スタックにクックブックをインストールします。詳細については、「カスタムクックブックのインストール」を参照してください。

  5. アプリケーションサーバーレイヤーのデプロイライフサイクルイベントに recipe を割り当てます。 AWS OpsWorks スタックは、起動後に新しいインスタンスごとに recipe を実行します。詳細については、「レシピの実行」を参照してください。

  6. アプリケーションをデプロイすると、データが含まれたスタック設定とデプロイメント属性もインストールされます。

注記

アプリケーションのデプロイ前にデータファイルが用意できている場合は、レイヤーの Setup ライフサイクルイベントにレシピを割り当てることもできます。このイベントは、インスタンスの起動直後に 1 回のみ発生します。ただし、 AWS OpsWorks スタックはデプロイディレクトリをまだ作成していないため、データファイルを作成する前にレシピで必要なディレクトリを明示的に作成する必要があります。次の例では、アプリケーションの /shared/config ディレクトリを明示的に作成し、次にそのディレクトリにデータファイルを作成しています。

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

データをロードするには、次に示すような 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

次のようにカスタム JSON を更新することで、いつでもアプリケーションのデータ値を更新することができます。

アプリケーションのデータを更新するには
  1. データ値を更新するには、カスタム JSON を編集します。

  2. アプリケーションを再度デプロイします。これにより、 AWS OpsWorks スタックはスタックのインスタンスで Deploy レシピを実行するように指示されます。レシピでは更新されたスタック設定とデプロイメント属性の属性が使用されるため、カスタムレシピによってデータファイルが現在の値で更新されます。