Chef 11.4 スタック用のレシピの実装 - AWS OpsWorks

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

Chef 11.4 スタック用のレシピの実装

重要

AWS OpsWorks Stacks は新規顧客を受け付けなくなりました。既存のお客様は、2024 年 5 月 26 日までは OpsWorks コンソール、 API、 CLI、および CloudFormation リソースを通常どおり使用できますが、その時点でこれらのリソースは廃止されます。この移行に備えて、できるだけ早くスタックを AWS Systems Manager に移行することをおすすめします。詳細については、AWS OpsWorks Stacks サポート終了に関する FAQ および AWS Systems Manager アプリケーションマネージャへの AWS OpsWorks Stacks アプリケーションの移行 を参照してください。

重要

カスタムクックブックまたはコミュニティクックブックに組み込みクックブックの名前を再使用しないでください。組込クックブックと同じ名前のカスタムクックブックは失敗する可能性があります。Chef 11.10、11.4、0.9 のスタックで使用可能な組み込みクックブックの完全なリストについては、「GitHub の opsworks-cookbooks リポジトリ」を参照してください。

Chef 11.4 スタックの大きな制限は、レシピで Chef の検索やデータバッグを使用できないことです。ただし、AWS OpsWorks スタックはスタック設定およびデプロイ属性を各インスタンスにインストールしますが、これには次のように検索で取得できる情報の多くが含まれています。

  • ホストまたはアプリケーション名など、コンソールからのユーザー定義のデータ。

  • スタックのレイヤー、アプリケーション、インスタンスなど、AWS OpsWorks スタックサービスによって生成されたスタック設定データ、および IP アドレスなどの各インスタンスに関する詳細。

  • ユーザーによって提供されたデータを含み、データバッグとほぼ同じ目的で使用できる、カスタム JSON 属性。

AWS OpsWorks スタックは、スタック設定およびデプロイ属性の最新バージョンを、各ライフサイクルイベントについて、イベントの Chef の実行が開始される前に、各インスタンスにインストールします。データは、標準の node[:attribute][:child_attribute][...] 構文を通じてレシピに使用できます。たとえば、スタック設定およびデプロイ属性にはスタック名 node[:opsworks][:stack][:name] が含まれています。

組み込みのレシピの 1 つに含まれる次のコードは、スタック名を取得し、その名前を使用して設定ファイルを作成します。

template '/etc/ganglia/gmetad.conf' do source 'gmetad.conf.erb' mode '0644' variables :stack_name => node[:opsworks][:stack][:name] notifies :restart, "service[gmetad]" end

スタック設定およびデプロイ属性の値の多くには、複数の属性が含まれています。必要な情報を取得するために、これらの属性を反復処理する必要があります。以下の例は、スタック設定およびデプロイ属性からの引用を示しています。便宜上、JSON オブジェクトとしてあらわされています。これには、最上位属性 deploy が含まれています。この最上位属性には、スタックの各アプリケーションの属性が含まれており、アプリケーションの短縮名が付いています。

{ ... "deploy": { "app1_shortname": { "document_root": "app1_root", "deploy_to": "deploy_directory", "application_type": "php", ... }, "app2_shortname": { "document_root": "app2_root", ... } }, ... }

各アプリケーション属性には、アプリケーションの特性を示す一連の属性が含まれています。例えば、deploy_to 属性は、アプリケーションのデプロイディレクトリを表します。次のコードは、アプリケーションの各デプロイディレクトリのユーザー、グループ、およびパスを設定します。

node[:deploy].each do |application, deploy| opsworks_deploy_dir do user deploy[:user] group deploy[:group] path deploy[:deploy_to] end ... end

スタック設定およびデプロイ属性の詳細については、「AWS OpsWorks スタックのカスタマイズ」を参照してください。デプロイディレクトリの詳細については、「Deploy レシピ」を参照してください。

Chef 11.4 のスタックはデータバッグをサポートしていませんが、カスタム JSON を指定することによって、スタック設定およびデプロイ属性に任意のデータを追加できます。レシピは、標準的な Chef のノード構文を使用して、データにアクセスできます。詳細については、「カスタム JSON の使用」を参照してください。

暗号化されたデータバッグの機能が必要な場合、選択肢の 1 つとして、プライベート Amazon S3 バケットなどの安全な場所に機密性の高い属性を保存する方法があります。レシピでは、すべてのAWS OpsWorks スタックインスタンスにインストールされている AWS Ruby SDK を使用して、バケットからデータをダウンロードすることができます。

注記

各 AWS OpsWorks スタックインスタンスにはインスタンスプロファイルがあります。関連付けられた IAM ロール によって、インスタンスで実行中のアプリケーションがどの AWS リソースにアクセスできるかが指定されます。レシピで Amazon S3 バケットにアクセスするためには、ロールのポリシーに次のようなステートメントを含めて、指定されたバケットからファイルを取得するアクセス許可を付与する必要があります。

"Action": ["s3:GetObject"], "Effect": "Allow", "Resource": "arn:aws:s3:::yourbucketname/*",

インスタンスプロファイルの詳細については、「EC2 インスタンスで実行するアプリケーションに対するアクセス許可の指定」を参照してください。