Deploy レシピ - AWS OpsWorks

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

Deploy レシピ

重要

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

Deploy レシピは、レイヤーの Deploy ライフサイクルイベントに割り当てられます。オプションでこのイベントを特定のインスタンスのみに制限できますが、通常は、アプリケーションのデプロイ時に、スタックのインスタンスすべてで発生します。 AWS OpsWorks スタックは、Setup レシピの完了後、新しいインスタンスでも Deploy レシピを実行します。Deploy レシピの主な目的は、コードと関連ファイルをリポジトリからアプリケーションサーバーレイヤーのインスタンスにデプロイすることです。ただし、多くの場合、その他のレイヤーでも Deploy レシピを実行します。これにより、これらのレイヤーのインスタンスで、たとえば、新しくデプロイされたアプリケーションに応じて設定を更新できるようになります。Deploy レシピを実装するときは、Deploy イベントが必ずしもアプリケーションがインスタンスにデプロイされることを意味するわけではないことに注意してください。アプリケーションがスタック内の別のインスタンスにデプロイされていることを単に通知することで、そのインスタンスで必要な更新ができるようにしているだけの場合もあります。このレシピは、適切に応答できる必要があります。それは、何も処理を実行しない場合があることを意味します。

AWS OpsWorks スタックは、標準アプリケーションタイプのアプリケーションを対応する組み込みアプリケーションサーバーレイヤーに自動的にデプロイします。アプリケーションをカスタムレイヤーにデプロイするには、アプリケーションのファイルをリポジトリからインスタンスの適切な場所にダウンロードするカスタム Deploy レシピを実装する必要があります。ただし、多くの場合、組み込みのデプロイクックブックを使用してデプロイの一部の側面を処理することで、記述する必要のあるコードの量を制限することができます。たとえば、サポートされているリポジトリの 1 つにファイルを保存する場合、リポジトリからレイヤーのインスタンスへのファイルダウンロードの詳細を組み込みのクックブックで処理できます。

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_diropworks_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 スタックはしたがって、次の処理を実行します。

  1. /srv/www/my_1st_jsp/releases/20130731141527 など、名前にタイムスタンプが含まれた明確に区別できるディレクトリにアプリケーションをデプロイします。

  2. この一意のディレクトリに、current という名前が付いた /srv/www/my_1st_jsp/current などのシンボリックリンクを作成します。

  3. 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_dirwebapp_dir を作成して、current ディレクトリと webapp ディレクトリをそれぞれ表します。次に、link リソースを使用して、webapp_dircurrent_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::deploytomcat::context を実行し、バックエンドデータベースが変更されている場合は、ウェブアプリケーションのコンテキスト設定ファイルを更新します。