翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ステップ 3: カスタムクックブックを作成してデプロイする
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post
現時点では、スタックはまだ完全には機能していません。アプリケーションが Redis サーバーにアクセスできるようにする必要があります。最も柔軟性のある方法は、アクセス情報が含まれた YAML ファイルをアプリケーションの config
サブフォルダに配置することです。そうすれば、アプリケーションはこのファイルから情報を取得できるようになります。この方法を使用すると、アプリケーションを書き直して再デプロイすることなく接続情報を変更できます。この例では、 ファイルに という名前redis.yml
を付け、次のように ElastiCache クラスターのホスト名とポートを含める必要があります。
host:
cache-cluster-hostname
port:cache-cluster-port
このファイルをサーバーに手動でコピーすることもできますが、Chef レシピを実装してファイルを生成し、 AWS OpsWorks スタックですべてのサーバーでレシピを実行する方が良い方法です。Chef レシピは、 AWS OpsWorks スタックがパッケージのインストールや設定ファイルの作成などのタスクをインスタンスで実行するために使用する特殊な Ruby アプリケーションです。レシピはクックブックにパッケージ化されます。クックブックには、複数のレシピと関連ファイル (設定ファイルのテンプレートなど) を含めることができます。クックブックは などのリポジトリに配置され GitHub、標準のディレクトリ構造である必要があります。カスタムクックブックリポジトリがまだない場合、これをセットアップする方法の詳細については、「クックブックリポジトリ」を参照してください。
この例では、redis-config
という名前のクックブックを、次の内容でクックブックリポジトリに追加します。
my_cookbook_repository
redis-config
recipesgenerate
.rb templates defaultredis.yml.erb
recipes
フォルダには、次のように generate.rb
からアプリケーションの設定ファイルを生成する、redis.yml.erb
というレシピが保存されています。
node[:deploy].each do |app_name, deploy_config| # determine root folder of new app deployment app_root = "#{deploy_config[:deploy_to]}/current" # use template 'redis.yml.erb' to generate 'config/redis.yml' template "#{app_root}/config/redis.yml" do source "redis.yml.erb" cookbook "redis-config" # set mode, group and owner of generated file mode "0660" group deploy_config[:group] owner deploy_config[:user] # define variable “@redis” to be used in the ERB template variables( :redis => deploy_config[:redis] || {} ) # only generate a file if there is Redis configuration not_if do deploy_config[:redis].blank? end end end
recipe は、 AWS OpsWorks 各インスタンスにインストールされ、スタックとデプロイされたアプリケーションに関する詳細情報を含む、スタックスタック設定とデプロイ JSON オブジェクトのデータによって異なります。このオブジェクトの deploy
ノードの構造は次のとおりです。
{ ... "deploy": { "
app1
": { "application" : "short_name
", ... } "app2
": { ... } ... } }
deploy ノードには、デプロイする各アプリケーションに対応し、そのアプリケーションの短縮名が付けられた一連の埋め込み JSON オブジェクトが含まれます。各アプリケーションオブジェクトには、アプリケーションの設定 (ドキュメントのルートやアプリケーションタイプなど) を定義する一連の属性が含まれます。deploy 属性のリストについては、「deploy 属性」を参照してください。レシピでは、Chef の属性構文を使用して、スタック設定およびデプロイメント JSON の値を表すことができます。例えば、[:deploy][:app1][:application]
は、app1 アプリケーションの短縮名を表します。
[:deploy]
の各アプリケーションでは、レシピによって関連するコードブロックが実行されます。コードブロックでは、deploy_config
がアプリケーション属性を表します。レシピでは、まず app_root
をアプリケーションのルートディレクトリ [:deploy][:
に設定します。次に、Chef のテンプレートリソースapp_name
][:deploy_to]/currentredis.yml.erb
から設定ファイルを生成し、
に配置します。app_root
/config
通常、設定ファイルは、Chef 属性によって定義された設定が多数含まれたテンプレートから作成されます。属性を使用すると、テンプレートファイルを書き換えるのではなく、後述するカスタム JSON を使用して設定を変更できます。redis.yml.erb
テンプレートには、次の行が含まれます。
host: <%= @redis[:host] %> port: <%= @redis[:port] || 6379 %>
<%... %> 要素は、属性値を表すプレースホルダーです。
-
<%= @redis[:host] %>
は、キャッシュクラスターのホスト名であるredis[:host]
の値を表します。 -
<%= @redis[:port] || 6379 %>
は、redis[:port]
の値を表します。この属性が定義されていない場合は、デフォルトのポート値である 6379 が使用されます。
template
リソースは、次のように機能します。
-
source
とcookbook
は、それぞれテンプレート名とクックブック名を指定します。 -
mode
、group
、およびowner
は、設定ファイルにアプリケーションと同じアクセス権を与えます。 -
variables
セクションでは、テンプレートで使用する@redis
変数をアプリケーションの[:redis]
属性値に設定します。[:redis]
属性の値は、後述するカスタム JSON を使用して設定されます。これは、アプリケーションの標準属性ではありません。 -
not_if
ディレクティブは、設定ファイルがすでに存在する場合にレシピで設定ファイルを生成しないことを示します。
クックブックを作成したら、各インスタンスのクックブックキャッシュにデプロイする必要があります。このオペレーションではレシピは実行されません。スタックのインスタンスに新しいクックブックをインストールするだけです。後述するように、通常はレイヤーのライフサイクルイベントにレシピを割り当てることによってレシピを実行します。
カスタムクックブックをデプロイするには
-
AWS OpsWorks スタックスタック ページで、スタック設定 をクリックし、 を編集します。
-
[Configuration Management] (構成の管理) セクションで、[Use custom Chef cookbooks] (カスタム Chef のクックブックを使用) を [Yes] (はい) に設定し、クックブックリポジトリの情報を入力します。次に、[Save] (保存) をクリックしてスタック設定を更新します。
-
[Stack] (スタック) ページで [Run Command] (コマンドの実行) をクリックし、[Update Custom Cookbooks] (カスタムクックブックの更新) スタックコマンドを選択します。次に、[Update Custom Cookbooks] (カスタムクックブックの更新) をクリックして、インスタンスのクックブックキャッシュに新しいクックブックをインストールします。
クックブックを変更した場合は、[Update Custom Cookbooks] をもう一度実行して、最新バージョンをインストールします。この手順の詳細については、「カスタムクックブックのインストール」を参照してください。