Setup レシピ - AWS OpsWorks

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

Setup レシピ

重要

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

Setup レシピは、レイヤーの Setup ライフサイクルイベントに割り当てられ、インスタンスの起動後に実行されます。このレシピは、パッケージのインストール、設定ファイルの作成、サービスの開始などのタスクを実行します。Setup レシピの実行が完了したら、 AWS OpsWorks スタックは Deploy レシピを実行して、新しいインスタンスにアプリケーションをデプロイします。

tomcat::setup

tomcat::setup レシピは、レイヤーの Setup ライフサイクルイベントに割り当てられます。

include_recipe 'tomcat::install' include_recipe 'tomcat::service' service 'tomcat' do action :enable end # for EBS-backed instances we rely on autofs bash '(re-)start autofs earlier' do user 'root' code <<-EOC service autofs restart EOC notifies :restart, resources(:service => 'tomcat') end include_recipe 'tomcat::container_config' include_recipe 'apache2' include_recipe 'tomcat::apache_tomcat_bind'

tomcat::setup レシピは、主としてメタレシピです。Tomcat および関連パッケージのインストールと設定の詳細のほとんどを処理する一連の依存レシピが含まれています。tomcat::setup の最初の部分は、後で説明する次のレシピを実行します。

  • tomcat::install レシピは、Tomcat サーバーパッケージをインストールします。

  • tomcat::service レシピは、Tomcat サービスをセットアップします。

tomcat::setup の中央部分は、Tomcat サービスを有効にして起動します。

  • Chef service リソースは、Tomcat サービスを起動時に有効にします。

  • Chef bash リソースは Bash スクリプトを実行して autofs デーモンを起動します。これは Amazon EBS-backed インスタンスに必要です。次に、このリソースは、Tomcatサービスの再起動を service リソースに通知します。

    詳細については、「autofs」(Amazon Linux の場合) または「Autofs」(Ubuntu の場合) を参照してください。

tomcat::setup の最後の部分は、設定ファイルを作成し、フロントエンド Apache サーバーをインストールおよび設定します。

  • tomcat::container_config レシピは、設定ファイルを作成します。

  • apache2 レシピ ( の省略形apache2::default) は です。 AWS OpsWorks Apache サーバーをインストールして設定するスタック組み込みレシピ。

  • tomcat::apache_tomcat_bind レシピは、Tomcat サーバーのフロントエンドとして機能するように Apache サーバーを設定します。

注記

組み込みのレシピを使用して必要なタスクの一部を実行することにより、多くの場合、時間と労力を削減できます。このレシピは、組み込みの apache2::default レシピを使用することで、Apache を最初から実装する必要なくインストールします。組み込みのレシピを使用するその他の例については、「Deploy レシピ」を参照してください。

以下のセクションでは、Tomcat クックブックの Setup レシピについてさらに詳しく説明します。apache2 レシピの詳細については、「opsworks-cookbooks/apache2」を参照してください。

tomcat::install

tomcat::install recipe は、Tomcat サーバー、Open JDK、My サーバーへの接続を処理する Java コネクタライブラリをインストールしますSQL。

tomcat_pkgs = value_for_platform( ['debian', 'ubuntu'] => { 'default' => ["tomcat#{node['tomcat']['base_version']}", 'libtcnative-1', 'libmysql-java'] }, ['centos', 'redhat', 'fedora', 'amazon'] => { 'default' => ["tomcat#{node['tomcat']['base_version']}", 'tomcat-native', 'mysql-connector-java'] }, 'default' => ["tomcat#{node['tomcat']['base_version']}"] ) tomcat_pkgs.each do |pkg| package pkg do action :install end end link ::File.join(node['tomcat']['lib_dir'], node['tomcat']['mysql_connector_jar']) do to ::File.join(node['tomcat']['java_dir'], node['tomcat']['mysql_connector_jar']) action :create end # remove the ROOT webapp, if it got installed by default include_recipe 'tomcat::remove_root_webapp'

このレシピは、次のタスクを実行します。

  1. インスタンスのオペレーティングシステムに応じて、インストールするパッケージのリストを作成します。

  2. リストに各パッケージをインストールします。

    Chef package resource (パッケージリソース) は適切なプロバイダを使用します。yum Amazon Linux および apt-get Ubuntu の場合— インストールを処理します。パッケージプロバイダーは Open JDKを Tomcat の依存関係としてインストールしますが、MySQL コネクタライブラリは明示的にインストールする必要があります。

  3. Chef リンクリソースを使用して、Tomcat サーバーの lib ディレクトリから の MySQL コネクタライブラリへのシンボリックリンクを作成しますJDK。

    デフォルトの属性値を使用すると、Tomcat lib ディレクトリは /usr/share/tomcat6/libで、MySQL コネクタライブラリ (mysql-connector-java.jar) は にあります/usr/share/java/

tomcat::remove_root_webapp recipe は、一部のセキュリティ問題を回避するために、ROOTウェブアプリケーション (/var/lib/tomcat6/webapps/ROOTデフォルトでは) を削除します。

ruby_block 'remove the ROOT webapp' do block do ::FileUtils.rm_rf(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT'), :secure => true) end only_if { ::File.exists?(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT')) && !::File.symlink?(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT')) } end

only_if ステートメントにより、このレシピは、ファイルが存在する場合にのみファイルを削除します。

注記

Tomcat のバージョンは、['tomcat']['base_version'] 属性で指定されます。この属性ファイルでは 6 に設定されています。Tomcat 7 をインストールするには、カスタムJSON属性を使用して属性を上書きできます。スタック設定を編集してJSONカスタム Chef JSON ボックスに以下を入力するか、既存のカスタム に追加しますJSON。

{ 'tomcat' : { 'base_version' : 7 } }

カスタムJSON属性はデフォルトの属性を上書きし、Tomcat バージョンを 7 に設定します。属性の上書きの詳細については、「属性の上書き」を参照してください。

tomcat::service

tomcat::service レシピは、Tomcat サービスの定義を作成します。

service 'tomcat' do service_name "tomcat#{node['tomcat']['base_version']}" case node[:platform] when 'centos', 'redhat', 'fedora', 'amazon' supports :restart => true, :reload => true, :status => true when 'debian', 'ubuntu' supports :restart => true, :reload => false, :status => true end action :nothing end

このレシピは、Chef service リソースを使用して Tomcat サービス名 (デフォルトでは tomcat6) を指定し、supports 属性を設定して、さまざまなオペレーティングシステムでサービスの restart コマンド、reload コマンド、および status コマンドを Chef によって管理する方法を定義します。

  • true は、Chef が init またはその他のサービスプロバイダーを使用してコマンドを実行できることを示します。

  • false は、Chef がその他の方法でコマンドの実行を試みる必要があることを示します。

action:nothing に設定されていることに注意してください。ライフサイクルイベントごとに、 AWS OpsWorks スタックは Chef 実行を開始して、適切なレシピセットを実行します。Tomcat クックブックは、レシピでサービスの定義を作成するがサービスの再起動はしないという一般的なパターンに従います。Chef 実行のその他のレシピは、通常、設定ファイルの作成に使用する notifies リソースに template コマンドを含めることで、再起動を処理します。通知を使用すると、設定が変更された場合にのみサービスが再起動されるため、通知はサービスの再起動のための便利な方法です。また、Chef 実行で 1 つのサービスに対して複数の再起動通知がある場合、Chef は最大で 1 回サービスを再起動します。これにより、Tomcat のエラーの一般的原因である、完全には機能していないサービスを再起動しようとする際に発生する可能性がある問題が回避されます。

Tomcat サービスは、再起動通知を使用する任意の Chef 実行に対して定義する必要があります。したがって、tomcat::service は複数のレシピに含まれ、それぞれの Chef 実行に対してサービスが定義されることになります。Chef 実行に tomcat::service の複数のインスタンスが含まれる場合のペナルティはありません。これは、Chef ではレシピの実行回数が Chef 実行ごとに 1 回のみであるためです。

tomcat::container_config

tomcat::container_config レシピは、クックブックテンプレートファイルから設定ファイルを作成します。

include_recipe 'tomcat::service' template 'tomcat environment configuration' do path ::File.join(node['tomcat']['system_env_dir'], "tomcat#{node['tomcat']['base_version']}") source 'tomcat_env_config.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'tomcat') end template 'tomcat server configuration' do path ::File.join(node['tomcat']['catalina_base_dir'], 'server.xml') source 'server.xml.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'tomcat') end

このレシピは、必要に応じてサービスを定義する tomcat::service を最初に呼び出します。このレシピの大部分は、2 つの template resources で構成され、クックブックのいずれかのテンプレートファイルから設定ファイルを作成し、ファイルのプロパティを設定し、Chef にサービスを再起動するよう通知します。

Tomcat 環境設定

最初の template リソースは、tomcat_env_config.erb テンプレートファイルを使用して Tomcat 環境設定ファイルを作成します。このファイルは、JAVA_HOME などの環境変数の設定に使用します。デフォルトのファイル名は、template リソースの引数です。tomcat::container_config は、path 属性を使用し、デフォルト値を上書きして設定ファイルに /etc/sysconfig/tomcat6 (Amazon Linux の場合) または /etc/default/tomcat6 (Ubuntu の場合) の名前を付けます。また、template リソースは、ファイルの所有者、グループ、およびモードの設定を指定し、バックアップファイルを作成しないように Chef に指示します。

ソースコードを確認すると、実際には 3 つのバージョンの tomcat_env_config.erb が存在し、それぞれ templates ディレクトリの異なるサブディレクトリ内にあります。ubuntu ディレクトリおよび amazon ディレクトリには、それぞれのオペレーティングシステムに対応するテンプレートが含まれます。default フォルダには、1 行のコメント行があるダミーのテンプレートが含まれています。このテンプレートは、サポートされていないオペレーティング システムを使用するインスタンスでこのレシピを実行しようとした場合にのみ使用されます。tomcat::container_config レシピでは、使用する tomcat_env_config.erb を指定する必要はありません。Chef は、「File Specificity」で説明されているルールに基づいて、インスタンスのオペレーティングシステム用の適切なディレクトリを自動的に選択します。

この例の tomcat_env_config.erb ファイルは、大部分がコメントで構成されています。追加の環境変数を設定するには、適切な行をコメント解除し、新しい値を指定します。

注記

変更する可能性がある設定は、テンプレートにハードコーディングするのではなく、属性として定義する必要があります。そうすれば、設定を変更するためにテンプレートを書き直す必要はなく、属性を上書きするだけで済みます。

次の抜粋に示すように、Amazon Linux テンプレートは 1 つの環境変数のみを設定します。

... # Use JAVA_OPTS to set java.library.path for libtcnative.so #JAVA_OPTS="-Djava.library.path=/usr/lib" JAVA_OPTS="${JAVA_OPTS} <%= node['tomcat']['java_opts'] %>" # What user should run tomcat #TOMCAT_USER="tomcat" ...

JAVA_OPTS を使用して、ライブラリパスなどの Java オプションを指定できます。デフォルトの属性値を使用すると、このテンプレートは Amazon Linux の Java オプションを設定しません。カスタム['tomcat']['java_opts']属性を使用するなど、 属性を上書きすることで、独自の Java オプションを設定できますJSON。例については、スタックの作成を参照してください。

次のテンプレートの抜粋に示すように、Ubuntu テンプレートは複数の環境変数を設定します。

# Run Tomcat as this user ID. Not setting this or leaving it blank will use the # default of tomcat<%= node['tomcat']['base_version'] %>. TOMCAT<%= node['tomcat']['base_version'] %>_USER=tomcat<%= node['tomcat']['base_version'] %> ... # Run Tomcat as this group ID. Not setting this or leaving it blank will use # the default of tomcat<%= node['tomcat']['base_version'] %>. TOMCAT<%= node['tomcat']['base_version'] %>_GROUP=tomcat<%= node['tomcat']['base_version'] %> ... JAVA_OPTS="<%= node['tomcat']['java_opts'] %>" <% if node['tomcat']['base_version'].to_i < 7 -%> # Unset LC_ALL to prevent user environment executing the init script from # influencing servlet behavior. See Debian bug #645221 unset LC_ALL <% end -%>

デフォルトの属性値を使用すると、このテンプレートは次のように Ubuntu 環境変数を設定します。

  • Tomcat のユーザーとグループを表す TOMCAT6_USER および TOMCAT6_GROUP は、いずれも tomcat6 に設定されます。

    ['tomcat']['base_version'] を tomcat7 に設定する場合、変数名は TOMCAT7_USER および TOMCAT7_GROUP に解決され、いずれも tomcat7 に設定されます。

  • JAVA_OPTS は、-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC に設定されます。

    • -Djava.awt.headlesstrue に設定すると、インスタンスがヘッドレスでコンソールがないことがグラフィック エンジンに通知されます。これにより、特定のグラフィカルアプリケーションの不良動作に対処します。

    • -Xmx128m は、この例で JVMに十分なメモリリソース 128MB があることを確認します。

    • -XX:+UseConcMarkSweepGC は、コンカレントマークスイープガベージコレクションを指定します。これは、ガベージコレクションの一時停止を限定するのに役立ちます。

      詳細については、「コンカレントマークスイープコレクタの拡張機能」を参照してください。

  • Tomcat のバージョンが 7 より前の場合、このテンプレートは、Ubuntu のバグに対処する LC_ALL を取り消します。

注記

デフォルトの属性を使用すると、これらの環境変数の一部が単にデフォルト値に設定されます。ただし、環境変数を属性に明示的に設定することは、デフォルトのJSON属性を上書きし、カスタム値を提供するカスタム属性を定義できることを意味します。属性の上書きの詳細については、「属性の上書き」を参照してください。

完全なテンプレートファイルについては、ソースコードを参照してください。

Server.xml 設定ファイル

2 番目のtemplateリソースは、 server.xml.erbを使用して、サーブレット/JSPコンテナを設定するsystem.xml設定ファイル を作成します。 server.xml.erbにはオペレーティングシステム固有の設定がないため、templateディレクトリの default サブディレクトリにあります。

このテンプレートは、標準設定を使用しますが、Tomcat 6 または Tomcat 7 のいずれかに対して system.xml ファイルを作成できます。たとえば、このテンプレートのサーバーセクションの次のコードは、指定されたバージョンに合わせてリスナーを適切に設定します。

<% if node['tomcat']['base_version'].to_i > 6 -%> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <% end -%> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <% if node['tomcat']['base_version'].to_i < 7 -%> <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <% end -%> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <% if node['tomcat']['base_version'].to_i > 6 -%> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <% end -%>

テンプレートはハードコードされた設定の代わりに属性を使用するため、カスタムJSON属性を定義することで設定を簡単に変更できます。例:

<Connector port="<%= node['tomcat']['port'] %>" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="<%= node['tomcat']['uri_encoding'] %>" redirectPort="<%= node['tomcat']['secure_port'] %>" />

詳細については、ソースコードを参照してください。

tomcat::apache_tomcat_bind

tomcat::apache_tomcat_bind レシピは、Apache サーバーが Tomcat のフロントエンドとして動作すること、つまり、受信するリクエストを受け取って Tomcat に転送し、応答をクライアントに返すことを可能にします。この例では、Apache のプロキシ/ゲートウェイとして mod_proxy を使用します。

execute 'enable mod_proxy for apache-tomcat binding' do command '/usr/sbin/a2enmod proxy' not_if do ::File.symlink?(::File.join(node['apache']['dir'], 'mods-enabled', 'proxy.load')) || node['tomcat']['apache_tomcat_bind_mod'] !~ /\Aproxy/ end end execute 'enable module for apache-tomcat binding' do command "/usr/sbin/a2enmod #{node['tomcat']['apache_tomcat_bind_mod']}" not_if {::File.symlink?(::File.join(node['apache']['dir'], 'mods-enabled', "#{node['tomcat']['apache_tomcat_bind_mod']}.load"))} end include_recipe 'apache2::service' template 'tomcat thru apache binding' do path ::File.join(node['apache']['dir'], 'conf.d', node['tomcat']['apache_tomcat_bind_config']) source 'apache_tomcat_bind.conf.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'apache2') end

mod_proxy を有効にするには、proxy モジュールとプロトコルベースのモジュールを有効にする必要があります。プロトコルモジュールには、次の 2 つのオプションがあります。

このレシピの両方の execute リソースa2enmod コマンドを実行します。このコマンドは、必要なシンボリックリンクを作成することで、指定されたモジュールを有効にします。

  • 最初の execute リソースは、proxy モジュールを有効にします。

  • 2 番目の execute リソースは、デフォルトで proxy_http に設定されているプロトコルモジュールを有効にします。

    を使用したい場合はAJP、カスタム を定義JSONして apache_tomcat_bind_mod 属性を上書きし、 に設定しますproxy_ajp

apache2::service レシピは AWS OpsWorks Apache サービスを定義するスタック組み込みレシピ。詳細については、「」の「 recipe」を参照してください。 AWS OpsWorks スタック GitHub リポジトリ。

template リソースでは、apache_tomcat_bind.conf.erb を使用して、デフォルトで tomcat_bind.conf という名前のファイルを作成します。ファイルは、['apache']['dir']/.conf.d ディレクトリに配置されます。['apache']['dir'] 属性は、組み込みの apache2 属性ファイルで定義され、デフォルトでは /etc/httpd (Amazon Linux の場合) または /etc/apache2 (Ubuntu の場合) に設定されます。この template リソースが設定ファイルを作成または変更する場合は、notifies コマンドが Apache サービスの再起動をスケジュール設定します。

<% if node['tomcat']['apache_tomcat_bind_mod'] == 'proxy_ajp' -%> ProxyPass <%= node['tomcat']['apache_tomcat_bind_path'] %> ajp://localhost:<%= node['tomcat']['ajp_port'] %>/ ProxyPassReverse <%= node['tomcat']['apache_tomcat_bind_path'] %> ajp://localhost:<%= node['tomcat']['ajp_port'] %>/ <% else %> ProxyPass <%= node['tomcat']['apache_tomcat_bind_path'] %> http://localhost:<%= node['tomcat']['port'] %>/ ProxyPassReverse <%= node['tomcat']['apache_tomcat_bind_path'] %> http://localhost:<%= node['tomcat']['port'] %>/ <% end -%>

テンプレートは、 ProxyPassおよび ProxyPassReverseディレクティブを使用して、Apache と Tomcat 間のトラフィックを渡すために使用されるポートを設定します。両方のサーバーは同じインスタンス上にあるため、localhost を使用できURL、どちらもデフォルトで に設定されますhttp://localhost:8080