翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Setup レシピ
重要
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、 AWS re:Post
Setup レシピは、レイヤーの Setup ライフサイクルイベントに割り当てられ、インスタンスの起動後に実行されます。このレシピは、パッケージのインストール、設定ファイルの作成、サービスの開始などのタスクを実行します。Setup レシピの実行が完了すると、 AWS OpsWorks Stacks は 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 resource
(bash リソース) は、Bash スクリプトを実行して autofs デーモンを起動します。これは、Amazon EBS-backed インスタンスに必要です。次に、このリソースは、Tomcatサービスの再起動を service
リソースに通知します。詳細については、「autofs
」(Amazon Linux の場合) または「Autofs 」(Ubuntu の場合) を参照してください。
tomcat::setup
の最後の部分は、設定ファイルを作成し、フロントエンド Apache サーバーをインストールおよび設定します。
-
tomcat::container_config レシピは、設定ファイルを作成します。
-
apache2
レシピ ( の省略形apache2::default
) は、Apache AWS OpsWorks サーバーをインストールして設定する スタックの組み込みレシピです。 -
tomcat::apache_tomcat_bind レシピは、Tomcat サーバーのフロントエンドとして機能するように Apache サーバーを設定します。
注記
組み込みのレシピを使用して必要なタスクの一部を実行することにより、多くの場合、時間と労力を削減できます。このレシピは、組み込みの apache2::default
レシピを使用することで、Apache を最初から実装する必要なくインストールします。組み込みのレシピを使用するその他の例については、「Deploy レシピ」を参照してください。
以下のセクションでは、Tomcat クックブックの Setup レシピについてさらに詳しく説明します。apache2
レシピの詳細については、「opsworks-cookbooks/apache2
tomcat::install
tomcat::install
レシピは、Tomcat サーバー、OpenJDK、および Java コネクターライブラリをインストールします。Java コネクターライブラリは、MySQL サーバーへの接続を処理します。
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'
このレシピは、次のタスクを実行します。
-
インスタンスのオペレーティングシステムに応じて、インストールするパッケージのリストを作成します。
-
リストに各パッケージをインストールします。
Chef package resource
(パッケージリソース) は適切なプロバイダを使用します。 yum
Amazon Linux およびapt-get
Ubuntu の場合— インストールを処理します。package プロバイダーは、Tomcat の依存関係として OpenJDK をインストールしますが、MySQL コネクターライブラリは明示的にインストールする必要があります。 -
Chef link リソース
を使用して、Tomcat サーバーの lib ディレクトリに JDK の MySQL コネクターライブラリへのシンボリックリンクを作成します。 デフォルトの属性値を使用すると、Tomcat の lib ディレクトリは
/usr/share/tomcat6/lib
となり、MySQL コネクターライブラリ (mysql-connector-java.jar
) は/usr/share/java/
にあります。
tomcat::remove_root_webapp
レシピは、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 を、[Custom 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 リソースsupports
属性を設定して、さまざまなオペレーティングシステムでサービスの restart コマンド、reload コマンド、および status コマンドを Chef によって管理する方法を定義します。
-
true
は、Chef が init またはその他のサービスプロバイダーを使用してコマンドを実行できることを示します。 -
false
は、Chef がその他の方法でコマンドの実行を試みる必要があることを示します。
action
が :nothing
に設定されていることに注意してください。ライフサイクルイベントごとに、 AWS OpsWorks スタックは 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
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 オプションを設定しません。例えば、カスタム JSON 属性を使用して、['tomcat']['java_opts']
属性を上書きすることにより、独自の Java オプションを設定できます。例については、スタックの作成を参照してください。
次のテンプレートの抜粋に示すように、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.headless
をtrue
に設定すると、インスタンスがヘッドレスでコンソールがないことがグラフィック エンジンに通知されます。これにより、特定のグラフィカルアプリケーションの不良動作に対処します。 -
-Xmx128m
により、JVM は適切なメモリリソース (この例では 128 MB) を確保します。 -
-XX:+UseConcMarkSweepGC
は、コンカレントマークスイープガベージコレクションを指定します。これは、ガベージコレクションの一時停止を限定するのに役立ちます。詳細については、「コンカレントマークスイープコレクタの拡張機能
」を参照してください。
-
-
Tomcat のバージョンが 7 より前の場合、このテンプレートは、Ubuntu のバグに対処する
LC_ALL
を取り消します。
注記
デフォルトの属性を使用すると、これらの環境変数の一部が単にデフォルト値に設定されます。一方、属性に対して環境変数を明示的に設定することは、カスタム JSON 属性を定義し、デフォルトの属性を上書きしてカスタム値を指定することを意味します。属性の上書きの詳細については、「属性の上書き」を参照してください。
完全なテンプレートファイルについては、ソースコード
Server.xml 設定ファイル
2 番目の template
リソースは、 server.xml.erb
を使用して 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 つのオプションがあります。
-
HTTP:
proxy_http
-
Apache JServ Protocol
(AJP) : proxy_ajp
AJP は、内部の Tomcat プロトコルです。
このレシピの両方の execute リソースa2enmod
コマンドを実行します。このコマンドは、必要なシンボリックリンクを作成することで、指定されたモジュールを有効にします。
-
最初の
execute
リソースは、proxy
モジュールを有効にします。 -
2 番目の
execute
リソースは、デフォルトでproxy_http
に設定されているプロトコルモジュールを有効にします。AJP の方を使用する場合は、カスタム JSON を定義し、
apache_tomcat_bind_mod
属性を上書きして、proxy_ajp
に設定できます。
apache2::service
レシピは、Apache サービスを定義する AWS OpsWorks スタックの組み込みレシピです。詳細については、 スタック GitHub AWS OpsWorks リポジトリの recipe
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 -%>
このテンプレートは、ProxyPasshttp://localhost:8080
に設定されます。