recipe - AWS OpsWorks

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

recipe

重要

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

レシピは、システムの設定を定義する Ruby アプリケーションです。これを使用して、パッケージのインストール、テンプレートからの設定ファイルの作成、シェルコマンドの実行、ファイルとディレクトリの作成などを行います。通常、AWS OpsWorks スタックでは、インスタンスでライフサイクルイベントが発生したときに、レシピが自動的に実行されます。ただし、Execute Recipes スタックコマンドを使用して、いつでも明示的にレシピを実行することもできます。詳細については、「レシピについて」を参照してください。

通常、レシピの大部分は、それぞれがシステムのある側面の目的の状態を表す、一連のリソースで構成されます。各リソースには、目的の状態の定義と実行するアクションの指定を行う、一連の属性が含まれています。Chef によって、アクションを実行する適切なプロバイダーに各リソースが関連付けられます。詳細については、「リソースおよびプロバイダーリファレンス」を参照してください。

package リソースは、Linux インスタンスのソフトウェアパッケージを管理するのに役立ちます。次の例では、Apache パッケージをインストールします。

... package 'apache2' do case node[:platform] when 'centos','redhat','fedora','amazon' package_name 'httpd' when 'debian','ubuntu' package_name 'apache2' end action :install end ...

Chef は、プラットフォーム用の適切なパッケージプロバイダーを使用します。通常、リソース属性には、単に値が割り当てられるだけですが、Ruby の論理演算子を使用して、条件付き割り当てを実行することもできます。例では、case 演算子を使用しています。これは、node[:platform] を使用してインスタンスのオペレーティングシステムを識別し、それに応じて package_name 属性を設定します。標準の Chef ノード構文を使用して、レシピに属性を挿入できます。属性は Chef によって、関連付けられている値に置き換えられます。ノードオブジェクトでは、クックブックにある属性だけでなく、任意の属性を使用できます。

適切なパッケージ名を判別したら、コードセグメントはパッケージをインストールする install アクションを実行して終了します。このリソースに対するアクションには、他に upgraderemove などがあります。詳細については、「package」を参照してください。

インストールや設定を行う複雑なタスクを 1 つ以上のサブタスクに分割し、それぞれを別個のレシピとして実装して、適切なタイミングでプライマリレシピで実行すると効率的です。次の例は、前述の例に続くコード行を示しています。

include_recipe 'apache2::service'

レシピで子レシピを実行するには、include_recipe キーワードを使用し、その後ろにレシピ名を指定します。レシピは、標準の Chef 構文である CookbookName::RecipeName を使用して識別されます。この RecipeName では .rb 拡張子が省略されます。

注記

include_recipe ステートメントは、プライマリレシピにおいて、その時点のレシピを効率的に実行します。ただし、実際には、プライマリレシピの実行前に、Chef によって各 include_recipe ステートメントが指定されたレシピのコードで置き換えられます。

directory リソースはディレクトリ (パッケージのファイルが含まれるディレクトリなど) を表します。次に示す default.rb リソースは、Linux ログディレクトリを作成します。

directory node[:apache][:log_dir] do mode 0755 action :create end

ログディレクトリは、クックブックの属性ファイルのいずれかで定義されています。リソースでは、ディレクトリのモードを 0755 に指定し、create アクションを使用してディレクトリを作成します。詳細については、「directory」を参照してください。また、Windows インスタンスでもこのリソースを使用できます。

execute リソースは、シェルコマンドやスクリプトなどのコマンドを表します。module.load ファイルを生成する例を次に示します。

execute 'generate-module-list' do if node[:kernel][:machine] == 'x86_64' libdir = 'lib64' else libdir = 'lib' end command "/usr/local/bin/apache2_module_conf_generate.pl /usr/#{libdir}/httpd/modules /etc/httpd/mods-available" action :run end

リソースは、最初に CPU タイプを判別します。[:kernel][:machine] は、さまざまなシステムプロパティ (ここでは CPU タイプ) を表すために Chef が生成する、もう 1 つの自動属性です。次に、コマンド (Perl スクリプト) を指定し、run アクションを使用してスクリプトを実行します。これにより、module.load ファイルが生成されます。詳細については、「execute」を参照してください。

template リソースは、クックブックのテンプレートファイルの 1 つから生成されるファイル (通常は設定ファイル) を意味します。次の例では、httpd.conf で説明した apache2.conf.erb テンプレートから テンプレート 設定ファイルが 作成されます。

template 'apache2.conf' do case node[:platform] when 'centos','redhat','fedora','amazon' path "#{node[:apache][:dir]}/conf/httpd.conf" when 'debian','ubuntu' path "#{node[:apache][:dir]}/apache2.conf" end source 'apache2.conf.erb' owner 'root' group 'root' mode 0644 notifies :restart, resources(:service => 'apache2') end

リソースは、インスタンスのオペレーティングシステムに基づいて、生成されるファイルの名前と場所を決定します。次に、ファイルの生成に使用するテンプレートとして apache2.conf.erb を指定し、ファイルの所有者、グループ、およびモードを設定します。notify アクションを実行して、Apache サーバーを表す service リソースに、サーバーを再起動するよう通知します。詳細については、「template」を参照してください。