短いディグレッション: クックブック、レシピ、 AWS OpsWorks スタック属性 - AWS OpsWorks

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

短いディグレッション: クックブック、レシピ、 AWS OpsWorks スタック属性

重要

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

これでアプリケーションとデータベースサーバーを設定しましたが、まだ使用する準備はできていません。データベースをセットアップし、アプリの接続設定を構成する必要があります。 AWS OpsWorks スタックはこれらのタスクを自動的に処理しませんが、Chef クックブック、レシピ、動的属性をサポートしています。レシピのペアを実装できます。1 つはデータベースをセットアップし、もう 1 つはアプリケーションの接続設定を構成するもので、 AWS OpsWorks スタックで実行します。

必須のレシピを含む phpapp クックブックはすでに実装されており、使用できます。必要に応じて、「ステップ 3.3: カスタムクックブックを に追加する MyStack」に進むこともできます。詳細が必要な場合は、このセクションで、クックブックとレシピの背景を紹介し、レシピの仕組みについて説明します。クックブック自体を確認するには、phpapp クックブックを参照してください。

レシピと属性

Chef レシピは基本的に、パッケージのインストール、設定ファイルの作成、シェルコマンドの実行などのタスクをインスタンスで実行する特殊な Ruby アプリケーションです。関連のレシピのグループはクックブックとしてまとめられます。クックブックには、設定ファイルを作成するためのテンプレートなどのサポートファイルも含まれます。

AWS OpsWorks スタックには、組み込みレイヤーをサポートするクックブックのセットがあります。独自のレシピでカスタムクックブックを作成して、インスタンスでカスタムタスクを実行することもできます。このトピックでは、レシピについて簡単に説明し、レシピを使用してデータベースのセットアップやアプリケーションの接続の設定を行う方法を示します。クックブックとレシピの詳細については、「クックブックとレシピ」または「AWS OpsWorks スタックのカスタマイズ」を参照してください。

レシピは通常、入力データの Chef 属性によって決まります。

  • これらの属性の一部は Chef によって定義され、オペレーティングシステムなど、インスタンスに関する基本情報を提供します。

  • AWS OpsWorks スタックは、レイヤー設定などのスタックに関する情報と、アプリケーションリポジトリなどのデプロイされたアプリケーションに関する情報を含む一連の属性を定義します。

    スタックまたはデプロイにカスタム JSON を割り当てることによって、これらの属性にカスタム属性を追加できます。

  • クックブックでも、クックブックに固有の属性を定義できます。

    phpapp クックブック属性は、すべて attributes/default.rb で定義されます。

AWS OpsWorks スタック属性の完全なリストについては、スタック設定およびデプロイ属性: Linux「」および「」を参照してください組み込みクックブックの属性。詳細については、「属性の上書き」を参照してください。

属性は階層構造で構成され、JSON オブジェクトとして表すことができます。

このデータを、次のような Chef ノード構文を使用することによって、アプリケーションに組み込むことができます。

[:deploy][:simplephpapp][:database][:username]

deploy ノードには、アプリケーションのデータベース、Git リポジトリなどに関する情報を含む 1 つのアプリケーションノード simplephpappノードがあります。この例は、データベースユーザー名の値を表し、この値が root に解決されます。

データベースのセットアップ

MySQLレイヤーの組み込み Setup レシピによって、アプリケーションの短縮名が付けられたアプリケーション用のデータベースが自動的に作成されるため、この例では、すでに simplephpapp という名前のデータベースが存在します。ただし、アプリケーションでデータを保存するためのテーブルを作成してセットアップを終了する必要があります。テーブルは手動で作成できますが、タスクを処理するカスタムレシピを実装し、 AWS OpsWorks スタックで実行することをお勧めします。このセクションでは、レシピ dbsetup.rb を実装する方法を説明します。 AWS OpsWorks スタックで recipe を実行する手順については、後で説明します。

リポジトリ内のレシピを表示するには、dbsetup.rb に移動します。次の例に dbsetup.rb のコードを示します。

execute は、指定されたコマンドを実行する Chef リソースです。この場合は、テーブルを作成する MySQL コマンドです。not_if ディレクティブによって、指定されたテーブルがすでに存在する場合、コマンドは実行されません。Chef リソースの詳細については、「リソースおよびプロバイダについて」を参照してください。

このレシピは、前に説明したノードの構文を使用して、コマンド文字列に属性値を挿入します。たとえば、次のようにしてデータベースのユーザー名を挿入します。

#{deploy[:database][:username]}

この暗号のようなコードを展開してみましょう。

  • 反復のたびに deploy は現在のアプリケーションノードに設定されるため、[:deploy][:app_name] に解決されます。この例では、[:deploy][:simplephpapp] に解決されます。

  • 前に示したデプロイ属性値を使用して、ノード全体は root に解決されます。

  • ノードを #{ } にラップして文字列に挿入します。

その他のノードの多くも同様に解決されます。#{node[:phpapp][:dbtable]} は例外で、カスタムクックブックの属性ファイルで定義され、テーブル名 urler に解決されます。MySQL インスタンスで実行される実際のコマンドは、次の通りです。

"/usr/bin/mysql -uroot -pvjud1hw5v8 simplephpapp -e'CREATE TABLE urler( id INT UNSIGNED NOT NULL AUTO_INCREMENT, author VARCHAR(63) NOT NULL, message TEXT, PRIMARY KEY (id))' "

このコマンドは、デプロイ属性の認証情報とデータベース名を使用して、ID、作成者、およびメッセージフィールドを持つ、urler という名前のテーブルを作成します。

アプリケーションをデータベースに接続する

2 番目の要素はアプリケーションです。アプリケーションはテーブルにアクセスする際にデータベースパスワードなどの接続情報が必要になります。SimplePHPApp では、事実上、作業ファイルは app.php のみです。index.phpapp.php を読み込むだけです。

app.php にはデータベース接続を処理する db-connect.php が含まれていますが、このファイルはリポジトリにはありません。は特定のインスタンスに基づいてデータベースを定義するため、db-connect.phpdb-connect.php を事前に作成することはできません。代わりに、appsetup.rb レシピは、デプロイ属性の接続データを使用して db-connect.php を生成します。

リポジトリ内のレシピを表示するには、appsetup.rb に移動します。次の例に appsetup.rb のコードを示します。

dbsetup.rb と同様に、appsetup.rb は、deploy ノードでアプリケーション (ここでも simplephpapp) を繰り返し処理します。これは、script リソースと template リソースを含むコードブロックを実行します。

この script リソースは、PHP アプリケーションの依存性マネージャーである [Composer] (コンポーザー) をインストールします。次に、Composer の install コマンドを実行して、サンプルアプリケーションの依存ファイルをアプリケーションのルートディレクトリにインストールします。

template リソースは、db-connect.php を生成して、これを /srv/www/simplephpapp/current に配置します。次の点に注意してください。

  • レシピでは、条件ステートメントを使用して、インスタンスのオペレーティングシステムによって異なるファイル所有者を指定します。

  • only_if ディレクティブは、指定されたディレクトリが存在する場合にのみテンプレートを生成するように Chef に指示します。

template リソースは、基本的に関連ファイルと同じコンテンツと構造を持っているが、さまざまなデータ値のプレースホルダが含まれているテンプレートを操作します。source パラメータは、テンプレート db-connect.php.erb を指定します。このテンプレートは、phpapp のクックブックの templates/default ディレクトリにあり、次の内容が含まれます。

Chef はテンプレートを処理するときに、プレースホルダ <%= => を template リソース内の対応する変数の値に置き換えます。これらの変数はデプロイ属性から取得されます。したがって、生成されるファイルは次のようになります。