

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

# OpsWorks スタックデータバッグリファレンス
<a name="data-bags"></a>

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

OpsWorks スタックは、Chef データバッグコンテンツとしてレシピにさまざまな設定を公開します。このリファレンスでは、このデータバッグコンテンツを一覧で示します。

*データバッグ*は Chef の概念です。データバッグはインスタンスで JSON データとして保存されるグローバル変数です。JSON データは Chef からアクセス可能です。たとえば、データバッグは、アプリケーションのソース URL、インスタンスのホスト名、関連するスタックの VPC 識別子などのグローバル変数を保存できます。 OpsWorks スタックは、各スタックのインスタンスにデータバッグを保存します。Linux インスタンスでは、 OpsWorks スタックはデータバッグを `/var/chef/runs/run-ID/data_bags` ディレクトリに保存します。Windows インスタンスでは、&OPS; スタックはデータバッグを `drive:\chef\runs\run-id\data_bags` ディレクトリに保存します。どちらの場合も、*run-ID* は スタックがインスタンスで実行される各 Chef OpsWorks に割り当てる一意の ID です。これらのディレクトリにはデータバッグ (サブディレクトリ) のセットが含まれています。各データバッグには、ゼロ個以上のデータバッグアイテムが含まれ、これらはデータバッグコンテンツのセットを含む JSON 形式のファイルです。

**注記**  
OpsWorks スタックは、暗号化されたデータバッグをサポートしていません。パスワードや証明書などの機密データを暗号化された形式で保存するには、プライベート S3 バケットに保存することをお勧めします。これで、[Amazon SDK for Ruby](https://aws.amazon.com/documentation/sdk-for-ruby/) を使用するカスタムレシピを作成できます。例については、[ SDK for Ruby を使用する](cookbooks-101-opsworks-s3.md)を参照してください。

データバッグのコンテンツには、次のいずれかを含めることができます。
+ 標準の Ruby 構文に従う **String** コンテンツ。一重引用符または二重引用符を使用できますが、一部の特殊文字を含む文字列は二重引用符が必要です。詳細については、[Ruby](http://www.ruby-lang.org/en/documentation/) のドキュメントのサイトを参照してください。
+ **[Boolean]** (ブール値) コンテンツのどちらか `true` または `false` (引用符なし)。
+ **[Number]** (数値) などの整数または10進数のいずれかコンテンツ、`4` または `2.5` (引用符なし)。
+ **[List]** (リスト) コンテンツは、角カッコ (引用符なし)で囲まれたカンマ区切り値の形式をとります。`[ '80', '443' ]`
+ `"my-app": {"elastic_ip": null,...}`などの追加のデータバッグコンテンツを含む **[JSON objects]** (JSON オブジェクト)。

Chef レシピは、Chef 検索を通じて、または直接データバッグ、データバッグ項目、およびデータバッグコンテンツにアクセスできます。以下では、両方のアクセス方法を使用する方法を説明します (ただし、Chef 検索をお勧めします)。

Chef 検索からデータバッグにアクセスするには、[検索](https://docs.chef.io/dsl_recipe.html#search)方法を使用して目的の検索インデックスを指定します。 OpsWorks スタックには、次の検索インデックスが用意されています。
+ スタック用のデプロイ済みアプリケーションのセットを表す [aws\$1opsworks\$1app](data-bag-json-app.md)。
+ スタックで実行されたコマンドのセットを表す [aws\$1opsworks\$1command](data-bag-json-command.md)。
+ スタック用のクラスターインスタンスのセットを表す [[aws\$1opsworks\$1ecs\$1cluster]](data-bag-json-ecs-cluster.md) Amazon Elastic Container Service (Amazon ECS)。
+ スタック用の一連の Elastic Load Balancing ロードバランサーを表す [[aws\$1opsworks\$1elastic\$1load\$1balancer]](data-bag-json-elb.md)。
+ スタック用のインスタンスのセットを表す [aws\$1opsworks\$1instance](data-bag-json-instance.md)。
+ スタック用のレイヤーのセットを表す [aws\$1opsworks\$1layer](data-bag-json-layer.md)。
+ スタック用の Amazon Relational Database Service (Amazon RDS) インスタンスのセットを表す [[aws\$1opsworks\$1rds\$1db\$1instance]](data-bag-json-rds.md)。
+ スタックを表す [aws\$1opsworks\$1stack](data-bag-json-stack.md)。
+ スタック用のユーザーのセットを表す [aws\$1opsworks\$1user](data-bag-json-user.md)。

検索インデックス名がわかれば、その検索インデックスのデータバッグのコンテンツにアクセスできます。例えば、次のレシピコードは `aws_opsworks_app` 検索インデックスを使用して、`aws_opsworks_app` データバッグ (`aws_opsworks_app`ディレクトリ) の最初のデータバッグ項目 (最初の JSON ファイル) のコンテンツを取得します。次に、コードは 2 つのメッセージを Chef ログに書き込みます。1 つはアプリケーションの短縮名のデータバッグコンテンツ (JSON ファイルの文字列) で、もう 1 つはアプリケーションのソース URL データバッグコンテンツ (JSON ファイルの別の文字列) です。

```
app = search("aws_opsworks_app").first
Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********")
Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")
```

ここで、`['shortname']` と `['app_source']['url']` は、対応する JSON ファイルの次のデータバッグコンテンツを指定します。

```
{
  ...
  "shortname": "mylinuxdemoapp",
  ...
  "app_source": {
    ...
    "url": "https://s3.amazonaws.com/opsworks-demo-assets/opsworks-linux-demo-nodejs.tar.gz",
  },
  ...  
}
```

検索できるデータバッグコンテンツのリストについては、このセクションのリファレンストピックを参照してください。

また、データバッグのデータバッグ項目のセットを反復的に処理することもできます。たとえば、次のレシピコードは前の例と似ています。複数のデータバッグ項目があると、データバッグの各データバッグ項目を反復処理します。

```
search("aws_opsworks_app").each do |app|
  Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********")
  Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")
end
```

特定のデータバッグコンテンツが存在することがわかっている場合は、次の構文で対応するデータバッグ項目を検索できます。

```
search("search_index", "key:value").first
```

例えば、次のレシピコードでは、`aws_opsworks_app` 検索インデックスを使用して、`mylinuxdemoapp` のアプリケーションの短縮名を含むデータバッグを検索します。次に、対応するアプリケーションの短縮名とソース URL とともに、データバッグ項目のコンテンツを使用して Chef ログにメッセージを書き込みます。

```
app = search("aws_opsworks_app", "shortname:mylinuxdemoapp").first
Chef::Log.info("********** For the app with the short name '#{app['shortname']}', the app's URL is '#{app['app_source']['url']}' **********")
```

`aws_opsworks_instance` 検索インデックスのみについて、`self:true` を指定して、レシピを実行中のインスタンスを表すことができます。次のレシピコードは、対応するデータバッグ項目の内容を使用して、対応するインスタンスの スタック生成 ID OpsWorks とオペレーティングシステムを含むメッセージを Chef ログに書き込みます。

```
instance = search("aws_opsworks_instance", "self:true").first
Chef::Log.info("********** For instance '#{instance['instance_id']}', the instance's operating system is '#{instance['os']}' **********")
```

Chef 検索を使用してデータバッグ、データバッグ項目、データバッグコンテンツにアクセスする代わりに、それらに直接アクセスできます。そのためには、それぞれ [data\$1bag](https://docs.chef.io/dsl_recipe.html#data-bag) および [data\$1bag\$1item](https://docs.chef.io/dsl_recipe.html#data-bag-item) メソッドを使用して、データバッグおよびデータバッグ項目にアクセスします。たとえば、次のレシピコードは前の例と同じことを行いますが、単一のデータバッグ項目にアクセスしてから、複数の項目がある場合は複数のデータ項目にアクセスします。

```
# Syntax: data_bag_item("the data bag name", "the file name in the data bag without the file extension")
app = data_bag_item("aws_opsworks_app", "mylinuxdemoapp")
Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********")
Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")
    
data_bag("aws_opsworks_app").each do |data_bag_item|
  app = data_bag_item("aws_opsworks_app", data_bag_item)
  Chef::Log.info("********** The app's short name is '#{app['shortname']}' **********")
  Chef::Log.info("********** The app's URL is '#{app['app_source']['url']}' **********")
end
```

これらの 2 つの方法のうち、Chef 検索を使用することをお勧めします。このガイドの関連する例では、すべてこの方法を示します。

**Topics**
+ [アプリケーションデータバッグ (aws\$1opsworks\$1app)](data-bag-json-app.md)
+ [コマンドデータバッグ (aws\$1opsworks\$1command)](data-bag-json-command.md)
+ [Amazon ECS クラスターデータバッグ (aws\$1opsworks\$1ecs\$1cluster)](data-bag-json-ecs-cluster.md)
+ [Elastic Load Balancing データバッグ (aws\$1opsworks\$1elastic\$1load\$1balancer)](data-bag-json-elb.md)
+ [インスタンスデータバッグ (aws\$1opsworks\$1instance)](data-bag-json-instance.md)
+ [レイヤーデータバッグ (aws\$1opsworks\$1layer)](data-bag-json-layer.md)
+ [Amazon RDS データバッグ (aws\$1opsworks\$1rds\$1db\$1instance)](data-bag-json-rds.md)
+ [スタックデータバッグ (aws\$1opsworks\$1stack)](data-bag-json-stack.md)
+ [ユーザーデータバッグ (aws\$1opsworks\$1user)](data-bag-json-user.md)