AWS OpsWorks スタックデータバッグリファレンス - AWS OpsWorks

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

AWS OpsWorks スタックデータバッグリファレンス

重要

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

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

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

注記

AWS OpsWorks スタックは、暗号化されたデータバッグをサポートしていません。パスワードや証明書などの機密データを暗号化された形式で保存するには、プライベート S3 バケットに保存することをお勧めします。これで、Amazon SDK for Ruby を使用するカスタムレシピを作成できます。例については、 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 スタックには、次の検索インデックスがあります。

検索インデックス名がわかれば、その検索インデックスのデータバッグのコンテンツにアクセスできます。例えば、次のレシピコードは 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 および 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 検索を使用することをお勧めします。このガイドの関連する例では、すべてこの方法を示します。