翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
短いディグレッション: クックブック、レシピ、 AWS OpsWorks スタック属性
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post
これでアプリケーションとデータベースサーバーを設定しましたが、まだ使用する準備はできていません。データベースを設定し、アプリの接続設定を構成する必要があります。 AWS OpsWorks スタックはこれらのタスクを自動的に処理しませんが、Chef クックブック、レシピ、動的属性はサポートしています。レシピのペアを実装できます。1 つはデータベースをセットアップするため、もう AWS OpsWorks 1 つはアプリケーションの接続設定を構成するため、 スタックで実行させることができます。
必須のレシピを含む 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 Layer の組み込み Setup レシピは、アプリの短縮名で という名前のアプリのデータベースを自動的に作成するため、この例では simplephpapp という名前のデータベースが既に作成されています。ただし、アプリケーションでデータを保存するためのテーブルを作成してセットアップを終了する必要があります。テーブルは手動で作成できますが、タスクを処理するカスタムレシピを実装し、 AWS OpsWorks スタックで実行することをお勧めします。このセクションでは、レシピ dbsetup.rb
を実装する方法を説明します。 AWS OpsWorks スタックでレシピを実行する手順については、後で説明します。
リポジトリ内のレシピを表示するには、dbsetup.rbdbsetup.rb
のコードを示します。
execute
は、指定されたコマンドを実行する Chef リソースです。この場合、テーブルを作成するのは MySQL コマンドです。not_if
ディレクティブによって、指定されたテーブルがすでに存在する場合、コマンドは実行されません。Chef リソースの詳細については、「リソースおよびプロバイダについて
このレシピは、前に説明したノードの構文を使用して、コマンド文字列に属性値を挿入します。たとえば、次のようにしてデータベースのユーザー名を挿入します。
#{deploy[:database][:username]}
この暗号のようなコードを展開してみましょう。
-
反復のたびに
deploy
は現在のアプリケーションノードに設定されるため、[:deploy][:
に解決されます。この例では、app_name
][:deploy][:simplephpapp]
に解決されます。 -
前に示したデプロイ属性値を使用して、ノード全体は
root
に解決されます。 -
ノードを #{ } にラップして文字列に挿入します。
その他のノードの多くも同様に解決されます。#{node[:phpapp][:dbtable]}
は例外で、カスタムクックブックの属性ファイルで定義され、テーブル名 urler
に解決されます。したがって、インスタンスSQLで実行される実際のコマンドは次のとおりです。
"/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 番目の要素はアプリケーションです。アプリケーションはテーブルにアクセスする際にデータベースパスワードなどの接続情報が必要になります。S にはimplePHPApp 、実質的に 1 つの作業ファイル しかindex.php
ありませんapp.php
。すべての作業ファイルはロード ですapp.php
。
app.php
にはデータベース接続を処理する db-connect.php
が含まれていますが、このファイルはリポジトリにはありません。は特定のインスタンスに基づいてデータベースを定義するため、db-connect.php
db-connect.php を事前に作成することはできません。代わりに、appsetup.rb
レシピは、デプロイ属性の接続データを使用して db-connect.php
を生成します。
リポジトリ内のレシピを表示するには、appsetup.rbappsetup.rb
のコードを示します。
dbsetup.rb
と同様に、appsetup.rb
は、deploy
ノードでアプリケーション (ここでも simplephpapp) を繰り返し処理します。これは、script
リソースと template
リソースを含むコードブロックを実行します。
script
リソースは、PHPアプリケーションの依存関係マネージャーである Composerinstall
コマンドを実行して、サンプルアプリケーションの依存ファイルをアプリケーションのルートディレクトリにインストールします。
template
リソースは、db-connect.php
を生成して、これを /srv/www/simplephpapp/current
に配置します。次の点に注意してください:
-
レシピでは、条件ステートメントを使用して、インスタンスのオペレーティングシステムによって異なるファイル所有者を指定します。
-
only_if
ディレクティブは、指定されたディレクトリが存在する場合にのみテンプレートを生成するように Chef に指示します。
template
リソースは、基本的に関連ファイルと同じコンテンツと構造を持っているが、さまざまなデータ値のプレースホルダが含まれているテンプレートを操作します。source
パラメータは、テンプレート db-connect.php.erb
を指定します。このテンプレートは、phpapp のクックブックの templates/default
ディレクトリにあり、次の内容が含まれます。
Chef はテンプレートを処理するときに、プレースホルダ <%= =>
を template リソース内の対応する変数の値に置き換えます。これらの変数はデプロイ属性から取得されます。したがって、生成されるファイルは次のようになります。