翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Deploy レシピ
重要
- AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 にお問い合わせください。 AWS Support でのチーム AWS re:Post
Deploy レシピは、レイヤーの Deploy ライフサイクルイベントに割り当てられます。オプションでこのイベントを特定のインスタンスのみに制限できますが、通常は、アプリケーションのデプロイ時に、スタックのインスタンスすべてで発生します。 AWS OpsWorks スタックは、Setup レシピの完了後、新しいインスタンスでも Deploy レシピを実行します。Deploy レシピの主な目的は、コードと関連ファイルをリポジトリからアプリケーションサーバーレイヤーのインスタンスにデプロイすることです。ただし、多くの場合、その他のレイヤーでも Deploy レシピを実行します。これにより、これらのレイヤーのインスタンスで、たとえば、新しくデプロイされたアプリケーションに応じて設定を更新できるようになります。Deploy レシピを実装するときは、Deploy イベントが必ずしもアプリケーションがインスタンスにデプロイされることを意味するわけではないことに注意してください。アプリケーションがスタック内の別のインスタンスにデプロイされていることを単に通知することで、そのインスタンスで必要な更新ができるようにしているだけの場合もあります。このレシピは、適切に応答できる必要があります。それは、何も処理を実行しない場合があることを意味します。
AWS OpsWorks スタックは、標準アプリケーションタイプのアプリケーションを対応する組み込みアプリケーションサーバーレイヤーに自動的にデプロイします。アプリケーションをカスタムレイヤーにデプロイするには、アプリケーションのファイルをリポジトリからインスタンスの適切な場所にダウンロードするカスタム Deploy レシピを実装する必要があります。ただし、多くの場合、組み込みのデプロイクックブック
tomcat::deploy
レシピは、Deploy ライフサイクルイベントに割り当てられます。
include_recipe 'deploy' node[:deploy].each do |application, deploy| opsworks_deploy_dir do user deploy[:user] group deploy[:group] path deploy[:deploy_to] end opsworks_deploy do deploy_data deploy app application end ...
tomcat::deploy
レシピは、アプリケーション固有ではないデプロイの側面に組み込みのデプロイクックブックを使用します。deploy
レシピ (組み込み deploy::default
レシピの省略表現) は、deploy
属性のデータに基づいてユーザー、グループなどのセットアップの詳細を処理する組み込みレシピです。
このレシピは、2 つの組み込みの Chef 定義 opsworks_deploy_dir
と opworks_deploy
を使用して、アプリケーションをインストールします。
opsworks_deploy_dir
定義は、アプリケーションのデプロイ からのデータに基づいてディレクトリ構造を設定しますJSON。定義は、基本的にはリソース定義をパッケージするための便利な方法であり、クックブックの definitions
ディレクトリに配置されています。レシピでは、リソースと同様に定義を使用できますが、この定義自体には、定義に含まれた単なるリソースである関連付けられたプロバイダーはありません。基盤となるリソース定義に渡されるレシピ内の変数は定義できます。tomcat::deploy
recipe はuser
、デプロイ からのデータに基づいて group
、、および path
変数を設定しますJSON。これらの変数は、定義の directory リソース
注記
[:opsworks][:deploy_user][:user]
属性と [:opsworks][:deploy_user][:group]
属性により、デプロイされているアプリケーションのユーザーとグループが定義されます。これらの属性は、組み込みのデプロイクックブックの deploy.rb
属性ファイル[:opsworks][:deploy_user][:user]
の初期値は deploy
です。[:opsworks][:deploy_user][:group]
のデフォルト値は、インスタンスのオペレーティングシステムによって異なります。
-
Ubuntu インスタンスでは、デフォルトのグループは
www-data
です。 -
Nginx と Unicorn を使用する Rails アプリケーションアプリケーションサーバーレイヤーのメンバーである Amazon Linux インスタンスの場合、デフォルトのグループは
nginx
です。 -
その他のすべての Amazon Linux インスタンスの場合、デフォルトのグループは
apache
です。
カスタムJSONまたはカスタム属性ファイルを使用して適切な属性を上書きすることで、設定を変更できます。詳細については、「属性の上書き」を参照してください。
その他の定義 opsworks_deploy
は、アプリケーションのコードとリポジトリの関連ファイルの確認、およびそれらのインスタンスへのデプロイの詳細を、deploy
属性のデータに基づいて処理します。この定義は、任意のアプリケーションタイプに使用できます。ディレクトリ名などのデプロイの詳細は、コンソールまたは を通じて指定APIされ、 deploy
属性に格納されます。ただし、 は Git、Subversion、S3、 の 4 つのサポートされているリポジトリタイプでのみopsworks_deploy
機能しますHTTP。異なるリポジトリのタイプを使用する場合は、このコードを自分で実装する必要があります。
アプリケーションのファイルを、Tomcat の webapps
ディレクトリにインストールします。一般的な方法は、ファイルを webapps
に直接コピーすることです。ただし、 AWS OpsWorks スタックのデプロイは、インスタンス上に最大 5 つのバージョンのアプリケーションを保持するように設計されているため、必要に応じて以前のバージョンにロールバックできます。 AWS OpsWorks スタックはしたがって、次の処理を実行します。
-
/srv/www/my_1st_jsp/releases/20130731141527
など、名前にタイムスタンプが含まれた明確に区別できるディレクトリにアプリケーションをデプロイします。 -
この一意のディレクトリに、
current
という名前が付いた/srv/www/my_1st_jsp/current
などのシンボリックリンクを作成します。 -
webapps
ディレクトリからステップ 2 で作成したcurrent
へのシンボリックリンクがまだない場合は、これを作成します。
以前のバージョンにロールバックする必要がある場合は、該当するタイムスタンプが含まれた明確に区別できるディレクトリをポイントするように current
シンボリックリンクを変更します。例えば、/srv/www/my_1st_jsp/current
のリンクターゲットを変更します。
tomcat::deploy
の中間のセクションは、シンボリックリンクをセットアップします。
... current_dir = ::File.join(deploy[:deploy_to], 'current') webapp_dir = ::File.join(node['tomcat']['webapps_base_dir'], deploy[:document_root].blank? ? application : deploy[:document_root]) # opsworks_deploy creates some stub dirs, which are not needed for typical webapps ruby_block "remove unnecessary directory entries in #{current_dir}" do block do node['tomcat']['webapps_dir_entries_to_delete'].each do |dir_entry| ::FileUtils.rm_rf(::File.join(current_dir, dir_entry), :secure => true) end end end link webapp_dir do to current_dir action :create end ...
このレシピは、まず 2 つの変数 current_dir
と webapp_dir
を作成して、current
ディレクトリと webapp
ディレクトリをそれぞれ表します。次に、link
リソースを使用して、webapp_dir
を current_dir
にリンクします。- AWS OpsWorks スタック deploy::default
recipe は、この例に必要ではないスタブディレクトリをいくつか作成するため、抜粋の中間部分で削除します。
tomcat::deploy
の最後の部分は、必要に応じて Tomcat サービスを再起動します。
... include_recipe 'tomcat::service' execute 'trigger tomcat service restart' do command '/bin/true' not_if { node['tomcat']['auto_deploy'].to_s == 'true' } notifies :restart, resources(:service => 'tomcat') end end include_recipe 'tomcat::context'
このレシピは、最初に tomcat::service
を実行して、この Chef 実行に対してサービスが定義されるようにします。次に、execute リソース['tomcat']['auto_deploy']
が 'true'
に設定されている場合のみです。その他の場合、Tomcat は webapps
ディレクトリ内の変更をリッスンします。これにより、明示的な Tomcat サービスの再起動が不必要になります。
注記
execute
リソースは実際には実質的なことを何も実行せず、/bin/true
は単に成功コードを返すダミーのシェルスクリプトです。単に再起動通知を生成するための便利な方法として使用されています。前に説明したように、通知を使用することで、サービスが必要以上に頻繁に再起動されなくなります。
最後に、tomcat::deploy
は tomcat::context
を実行し、バックエンドデータベースが変更されている場合は、ウェブアプリケーションのコンテキスト設定ファイルを更新します。