レシピの構造 - AWS OpsWorks

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

レシピの構造

重要

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

クックブックは主に、インスタンス上のさまざまなタスクを実行できる一連のレシピです。レシピを実行する方法をわかりやすくするために、シンプルな例を見てみましょう。以下は、組み込みHAProxyレイヤー のセットアップレシピです。現時点では全体的な構造に注目して詳細にはあまり気を取られないでください。詳細は後述の例で説明します。

package 'haproxy' do action :install end if platform?('debian','ubuntu') template '/etc/default/haproxy' do source 'haproxy-default.erb' owner 'root' group 'root' mode 0644 end end include_recipe 'haproxy::service' service 'haproxy' do action [:enable, :start] end template '/etc/haproxy/haproxy.cfg' do source 'haproxy.cfg.erb' owner 'root' group 'root' mode 0644 notifies :restart, "service[haproxy]" end
注記

作業レシピと関連ファイルのこの例とその他の例については、「」を参照してください。 AWS OpsWorks スタックの組み込みレシピ

例では、以下のセクションで説明するレシピの主要な要素に焦点を当てています。

リソース

レシピは、Chef リソースのセットの大部分を構成します。それぞれのレシピは、インストールするパッケージや開始するサービスなど、インスタンスの最終状態の特定の部分を指定します。例には 4 つのリソースがあります。

  • インストールされたパッケージを表すpackageリソース、この例のHAProxyサーバー

  • このHAProxy例のサービスを表すserviceリソース。

  • 指定されたテンプレートから作成されるファイルを表す 2 つのtemplateリソース、この例の 2 つのHAProxy設定ファイル。

リソースはインスタンスの状態を指定する宣言方法を提供します。バックグラウンドで各リソースにはプロバイダーが関連付けられ、パッケージのインストール、ディレクトリの作成と設定、サービスの開始など必要なタスクを実行します。タスクの詳細が特定のオペレーティングシステムに依存する場合、リソースは複数のプロバイダーを持ってシステムに応じて使い分けます。たとえば、Red Hat Linux システムでは package プロバイダーは yum を使用してパッケージをインストールします。Ubuntu Linux システムでは、package プロバイダーは apt-get を使用します。

以下の一般的な形式で Ruby コードブロックとしてリソースを実行します。

resource_type "resource_name" do attribute1 'value1' attribute2 'value2' ... action :action_name notifies : action 'resource' end

要素は以下のとおりです。

リソースタイプ

(必須) この例では 3 個のリソースタイプを含んでいます。packageservice、および template です。

リソース名

(必須) リソース名は特定のリソースを識別し、場合によっては属性のデフォルト値の 1 つとして使用されます。例では、packagehaproxy という名前のパッケージリソースを示し、最初の template リソースは /etc/default/haproxy という名前の設定ファイルを表します。

属性

(オプション) 属性はリソース設定を指定するもので、リソースのタイプと設定方法によって異なります。

  • 例にある template リソースは、作成されたファイルのソース、所有者、グループおよびモードを指定する一連の属性を明示的に定義します。

  • 例にある package および service リソースは、どのような属性も明示的に定義しません。

    通常、リソース名は必須属性のデフォルト値で、それだけで十分な場合もあります。たとえば、リソース名は package リソースの package_name 属性のデフォルト値であり、唯一の必須属性です。

また、リソースプロバイダーを実行する時に指定される、ガード属性と呼ばれる特殊な属性がいくつかあります。例えば、only_if 属性は指定された条件が満たされる場合だけリソースプロバイダーにアクション実行を指示します。HAProxy recipe はガード属性を使用しませんが、以下のいくつかの例で使用されます。

アクションおよび通知

(オプション) アクションおよび通知は、プロバイダーがどのタスクを実行するかを指定します。

  • action はインストールや作成など指定したアクションを実行するようにプロバイダーに指示します。

    各リソースには特定のリソースに依存する一連のアクションがあり、そのうちの 1 つはデフォルトのアクションです。例では、packageリソースのアクションは install であり、プロバイダーにパッケージをインストールするように指示します。最初の template リソースには action 要素はないので、プロバイダーはデフォルトの create アクションを実行します。

  • notifies はリソースの状態が変化した場合のみ、別のリソースのプロバイダーにアクションを実行するように指示します。

    notifies は通常、templatefile のようなリソースとともに使用され、設定ファイルを変更した後にサービスを再起動するなどのタスクを実行します。リソースにはデフォルトの通知はありません。通知が必要な場合は、リソースに明示的な notifies 要素が必要です。HAProxy recipe では、2 番目のtemplateリソースは、関連付けられた設定ファイルが変更された場合にHAProxyサービスを再起動するように haproxy serviceリソースに通知します。

リソースはオペレーティングシステムによって異なる場合があります。

  • 一部のリソースは Linux または Windows システムにのみ使用できます。

    たとえば、package によって、Linux システムにパッケージがインストールされ、windows_package によって Windows システムにパッケージがインストールされます。

  • 一部のリソースはいずれのオペレーティングシステムでも使用できますが、特定のシステムに固有の属性があります。

    たとえば、file リソースは、Linux または Windows システムのいずれかに使用できますが、アクセス権限を設定するための属性の個別のセットはありません。

標準的なリソースおよびそれぞれの使用可能な属性、アクション、通知についての説明は、「リソースおよびプロバイダーについて」を参照してください。

フロー制御

レシピは Ruby アプリケーションであるため、レシピにフロー制御を組み込むために Ruby の制御構造を使用できます。たとえば、レシピが異なるシステムで異なる動作をするように Ruby の条件付きロジックを使用できます。HAProxy recipe には、templateリソースを使用して設定ファイルを作成する ifブロックが含まれていますが、レシピが Debian または Ubuntu システムで実行されている場合に限ります。

もう 1 つの一般的なシナリオとしては、ループを使用して異なる属性設定でリソースを複数回実行します。たとえば、異なるディレクトリで directory リソースを複数回実行するループを使用して、一連のディレクトリを作成できます。

注記

Ruby になじみがない場合は、「Chef のための Ruby 基礎」を参照してください。ほとんどのレシピに必要な知識を説明しています。

内包レシピ

include_recipe はコードの中に他のレシピを含め、レシピをモジュール化して複数のレシピで同じコードを再利用できます。ホストのレシピを実行すると、Chef はそれぞれの include_recipe の要素を指定されたレシピのコードに置き換えてからホストのレシピを実行します。内包レシピは、標準の Chef 構文である cookbook_name::recipe_name を使用して識別されます。この recipe_name では .rb 拡張子が省略されます。この例には、HAProxyサービスを表すレシピ haproxy::serviceが 1 つ含まれています。

注記

Chef 11.10 以降で実行されているレシピに include_recipe を使用して他のクックブックからのレシピを含める場合、depends ステートメントを使用してクックブックの metadata.rb ファイル内の依存関係を宣言する必要があります。詳細については、「レシピの実装: Chef 11.10」を参照してください。