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

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

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

重要

AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは OpsWorks コンソール、 API、 CLI、 および CloudFormation リソースを通常どおり使用できますが、その時点でこれらのリソースは廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、AWS OpsWorks Stacks サポート終了に関する FAQ および AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行 を参照してください。

多くの場合、サーバーのアプリケーションにキーと値のペアなどのデータを渡すと便利です。そのためには、[custom JSON (カスタム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. アプリケーションサーバーレイヤーのデプロイライフサイクルイベントにレシピを割り当てます。 AWS OpsWorksスタックは、起動後、新しいインスタンスごとにレシピを実行します。詳細については、「レシピの実行」を参照してください。

  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 レシピが実行されます。レシピでは更新されたスタック設定とデプロイメント属性の属性が使用されるため、カスタムレシピによってデータファイルが現在の値で更新されます。