AWS OpsWorks
ユーザーガイド (API バージョン 2013-02-18)

カスタム JSON の使用

いくつかの AWS OpsWorks スタックアクションでは、カスタム JSON を指定できます。これにより、AWS OpsWorks スタックをインスタンスにインストールし、レシピで使用できます。

次の状況で、カスタム JSON を指定できます。

  • スタックを作成、更新、またはクローン作成する

    AWS OpsWorks スタックは、後続のすべてのライフサイクルイベントに対するすべてのインスタンスに、カスタム JSON をインストールします。

  • デプロイメントコマンドまたはスタックコマンドを実行する

    AWS OpsWorks スタックは、そのイベントについてのみ、インスタンスにカスタム JSON を渡します。

カスタム JSON は、有効な JSON オブジェクトで表され、フォーマットされている必要があります。(例:

{ "att1": "value1", "att2": "value2" ... }

AWS OpsWorks スタックは次の場所にカスタム JSON を保存します。

Linux インスタンスの場合:

  • /var/chef/runs/run-ID/attribs.json

  • /var/chef/runs/run-ID/nodes/hostname.json

Windows インスタンスの場合:

  • drive:\chef\runs\run-ID\attribs.json

  • drive:\chef\runs\run-ID\nodes\hostname.json

注記

Linux 用 Chef 11.10 以前のバージョンでは、Linux インスタンスの以下のパスにカスタム JSON があります。Windows インスタンスは使用できず、attribs.json ファイルはありません。ログは JSON と同じフォルダまたはディレクトリに保存されます。Linux 用 Chef 11.10 以前のバージョンにおけるカスタム JSON の詳細については、「カスタム JSON を使用した属性の上書き」と「Chef ログ」を参照してください。

/var/lib/aws/opsworks/chef/hostname.json

前述のパスで、run-ID はインスタンスでの Chef の実行ごとに AWS OpsWorks スタックが割り当てる一意の ID で、hostname はインスタンスのホスト名です。

Chef レシピからカスタム JSON にアクセスするには、標準の Chef node 構文を使用します。

たとえば、デプロイするアプリケーション用のシンプルな設定 (アプリケーションが最初に表示されるかどうか、アプリケーションの初期の前景色と背景色など) を定義するとします。JSON オブジェクトを使用して、次のようにこれらのアプリケーション設定を定義するとします。

{ "state": "visible", "colors": { "foreground": "light-blue", "background": "dark-gray" } }

スタック用のカスタム JSON を宣言するには:

  1. スタックのページで、[Stack Settings]、[Edit] の順番に選択します。

  2. [Custom Chef JSON] に JSON オブジェクトを入力し、[Save] を選択します。

注記

カスタム JSON は、デプロイ、Layer、およびスタックの各レベルで宣言できます。いくつかのカスタム JSON を個別のデプロイまたは Layer のみに対して表示する場合は、この操作を行うことをお勧めします。たとえば、Layer レベルで宣言されたカスタム JSON で、スタックレベルで宣言されたカスタム JSON を一時的に上書きしたいとします。複数のレベルでカスタム JSON を宣言する場合、デプロイレベルで宣言されたカスタム JSON は、Layer レベルおよびスタックレベルの両方で宣言されたカスタム JSON より優先されます。Layer レベルで宣言されたカスタム JSON は、スタックレベルでのみ宣言されたカスタム JSON より優先されます。

AWS OpsWorks スタックコンソールを使用してデプロイ用のカスタム JSON を指定するには、[Deploy App (アプリのデプロイ)] ページで [Advanced (詳細設定)] を選択します。[Custom Chef JSON] ボックスにカスタム JSON を入力し、[Save] を選択します。

AWS OpsWorks スタックコンソールを使用して Layer 用のカスタム JSON を指定するには、[Layers] ページで目的の Layer 用の [Settings] を選択します。[Custom JSON] ボックスにカスタム JSON を入力し、[Save] を選択します。

詳細については、「OpsWorks Layer の設定の編集」および「アプリケーションのデプロイ」を参照してください。

デプロイまたはスタックコマンドを実行すると、レシピは標準の Chef node 構文を使用してこれらのカスタムの値を取得できます。これにより、カスタム JSON オブジェクトの階層に直接マッピングされます。たとえば、次のレシピコードは、前述のカスタム JSON 値に関するメッセージを Chef ログに書き込みます。

Chef::Log.info("********** The app's initial state is '#{node['state']}' **********") Chef::Log.info("********** The app's initial foreground color is '#{node['colors']['foreground']}' **********") Chef::Log.info("********** The app's initial background color is '#{node['colors']['background']}' **********")

この方法は、レシピにデータを渡すために役立ちます。AWS OpsWorks スタックはそのデータをインスタンスに追加し、レシピは標準の Chef node 構文を使用してそのデータを取得できます。

注記

カスタム JSON は 120 KB に制限されています。さらに容量が必要な場合は、Amazon Simple Storage Service (Amazon S3) でデータの一部を格納することをお勧めします。カスタムレシピは、AWS CLI または AWS SDK for Ruby を使用して、Amazon S3 バケットからインスタンスにデータをダウンロードできます。