翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS OpsWorks スタックデータバッグリファレンス
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post
AWS OpsWorks スタックは、Chef データバッグコンテンツとしてレシピにさまざまな設定を公開します。このリファレンスでは、このデータバッグコンテンツを一覧で示します。
データバッグは Chef の概念です。データバッグはインスタンスで JSON データとして保存されるグローバル変数です。JSON データは Chef からアクセス可能です。例えば、データバッグは、アプリケーションのソース URL、インスタンスのホスト名、関連するスタックの VPC 識別子などのグローバル変数を保存できます。 AWS OpsWorks スタックは、各スタックのインスタンスにデータバッグを保存します。Linux インスタンスでは、 AWS OpsWorks スタックはデータバッグを /var/chef/runs/
ディレクトリに保存します。Windows インスタンスでは、&OPS; スタックはデータバッグを run-ID
/data_bags
ディレクトリに保存します。いずれの場合も、drive
:\chef\runs\run-id
\data_bagsrun-ID
は、 AWS OpsWorks スタックがインスタンスで実行される各 Chef に割り当てる一意の ID です。これらのディレクトリにはデータバッグ (サブディレクトリ) のセットが含まれています。各データバッグには、ゼロ個以上のデータバッグアイテムが含まれ、これらはデータバッグコンテンツのセットを含む JSON 形式のファイルです。
注記
AWS OpsWorks スタックは、暗号化されたデータバッグをサポートしていません。パスワードや証明書などの機密データを暗号化された形式で保存するには、プライベート S3 バケットに保存することをお勧めします。これで、Amazon SDK for Ruby
データバッグのコンテンツには、次のいずれかを含めることができます。
-
標準の Ruby 構文に従う String コンテンツ。一重引用符または二重引用符を使用できますが、一部の特殊文字を含む文字列は二重引用符が必要です。詳細については、Ruby
のドキュメントのサイトを参照してください。 -
[Boolean] (ブール値) コンテンツのどちらか
true
またはfalse
(引用符なし)。 -
[Number] (数値) などの整数または10進数のいずれかコンテンツ、
4
または2.5
(引用符なし)。 -
[List] (リスト) コンテンツは、角カッコ (引用符なし)で囲まれたカンマ区切り値の形式をとります。
[ '80', '443' ]
-
"my-app": {"elastic_ip": null,...}
などの追加のデータバッグコンテンツを含む [JSON objects] (JSON オブジェクト)。
Chef レシピは、Chef 検索を通じて、または直接データバッグ、データバッグ項目、およびデータバッグコンテンツにアクセスできます。以下では、両方のアクセス方法を使用する方法を説明します (ただし、Chef 検索をお勧めします)。
Chef 検索からデータバッグにアクセスするには、検索
-
スタック用のデプロイ済みアプリケーションのセットを表す aws_opsworks_app。
-
スタックで実行されたコマンドのセットを表す aws_opsworks_command。
-
スタック用のクラスターインスタンスのセットを表す [aws_opsworks_ecs_cluster] Amazon Elastic Container Service (Amazon ECS)。
-
スタック用の一連の Elastic Load Balancing ロードバランサーを表す [aws_opsworks_elastic_load_balancer]。
-
スタック用のインスタンスのセットを表す aws_opsworks_instance。
-
スタック用のレイヤーのセットを表す aws_opsworks_layer。
-
スタック用の Amazon Relational Database Service (Amazon RDS) インスタンスのセットを表す [aws_opsworks_rds_db_instance]。
-
スタックを表す aws_opsworks_stack。
-
スタック用のユーザーのセットを表す aws_opsworks_user。
検索インデックス名がわかれば、その検索インデックスのデータバッグのコンテンツにアクセスできます。例えば、次のレシピコードは 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
を指定して、レシピを実行中のインスタンスを表すことができます。次のレシピコードは、対応するデータバッグ項目の内容を使用して、対応するインスタンスの AWS OpsWorks スタック生成 ID とオペレーティングシステムで 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_bag
# 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 検索を使用することをお勧めします。このガイドの関連する例では、すべてこの方法を示します。
トピック
- アプリケーションデータバッグ (aws_opsworks_app)
- コマンドデータバッグ (aws_opsworks_command)
- Amazon ECS クラスターデータバッグ (aws_opsworks_ecs_cluster)
- Elastic Load Balancing データバッグ (aws_opsworks_elastic_load_balancer)
- インスタンスデータバッグ (aws_opsworks_instance)
- レイヤーデータバッグ (aws_opsworks_layer)
- Amazon RDS データバッグ (aws_opsworks_rds_db_instance)
- スタックデータバッグ (aws_opsworks_stack)
- ユーザーデータバッグ (aws_opsworks_user)