

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

# アプリケーションへのデータの引き渡し
<a name="apps-data"></a>

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

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

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

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

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

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

次の例のレシピでは、`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 属性](attributes-json-deploy.md)」をご参照ください。

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

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

    OpsWorks スタックがアプリケーションをインストールする方法の詳細については、「」を参照してください[Deploy レシピ](create-custom-deploy.md)。

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

**アプリケーションにデータを渡すには**

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

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

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

1. スタックにクックブックをインストールします。詳細については、「[カスタムクックブックのインストール](workingcookbook-installingcustom-enable.md)」を参照してください。

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

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

**注記**  
アプリケーションのデプロイ前にデータファイルが用意できている場合は、レイヤーの Setup ライフサイクルイベントにレシピを割り当てることもできます。このイベントは、インスタンスの起動直後に 1 回のみ発生します。ただし、 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](http://www.sinatrarb.com/) コードを使用できます。

```
#!/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 を編集します。

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