

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

# カスタム JSON の使用
<a name="workingstacks-json"></a>

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

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

次の状況で、カスタム JSON を指定できます。
+ スタックを作成、更新、またはクローン化する

  AWS OpsWorks Stacks は、後続のすべての [lifecycle events](workingcookbook-events.md) (ライフサイクルイベント) に対するすべてのインスタンスに、カスタム JSON をインストールします。
+ デプロイメントコマンドまたはスタックコマンドを実行する

  AWS OpsWorks Stacks は、そのイベントのためにだけ、インスタンスにカスタム JSON を渡します。

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

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

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 を使用した属性の上書き](https://docs.aws.amazon.com/opsworks/latest/userguide/workingcookbook-json-override.html)」と「[Chef ログ](https://docs.aws.amazon.com/opsworks/latest/userguide/troubleshoot-debug-log.html#troubleshoot-debug-log-instance)」を参照してください。  
`/var/lib/aws/opsworks/chef/hostname.json`

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

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

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

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

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

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

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

**注記**  
カスタム JSON は、デプロイ、レイヤー、およびスタックの各レベルで宣言できます。いくつかのカスタム JSON を個別のデプロイまたはレイヤーのみに対して表示する場合は、この操作を行うことをお勧めします。たとえば、レイヤーレベルで宣言されたカスタム JSON で、スタックレベルで宣言されたカスタム JSON を一時的に上書きしたいとします。複数のレベルでカスタム JSON を宣言する場合、デプロイレベルで宣言されたカスタム JSON は、レイヤーレベルおよびスタックレベルの両方で宣言されたカスタム JSON より優先されます。レイヤーレベルで宣言されたカスタム JSON は、スタックレベルでのみ宣言されたカスタム JSON より優先されます。  
 OpsWorks スタックコンソールを使用してデプロイのカスタム JSON を指定するには、**アプリケーションのデプロイ**ページで**アドバンスト** を選択します。[**Custom Chef JSON**] ボックスにカスタム JSON を入力し、[**Save**] を選択します。  
 OpsWorks スタックコンソールを使用してレイヤーのカスタム JSON を指定するには、**レイヤー**ページで、目的のレイヤー**の設定**を選択します。[**Custom JSON**] ボックスにカスタム JSON を入力し、[**Save**] を選択します。  
詳細については、「[OpsWorks レイヤーの構成を編集する](workinglayers-basics-edit.md)」および「[アプリケーションのデプロイ](workingapps-deploying.md)」を参照してください。

デプロイまたはスタックコマンドを実行すると、レシピは標準の 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']}' **********")
```

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

**注記**  
カスタム JSON は 120 KB に制限されています。さらに容量が必要な場合は、Amazon Simple Storage Service (Amazon S3) でデータの一部を保存することをお勧めします。カスタムレシピは、[AWS CLI](https://aws.amazon.com/documentation/cli/) または [AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/) を使用して、Amazon S3 バケットからインスタンスにデータをダウンロードできます。