LoginSignup
1
0

More than 3 years have passed since last update.

[AWS] [tomcat]インスタンスタイプによってsetenv.shを置き換える

Posted at

AWSのEC2のインスタンスタイプによって CATALINA_OPTSに記載されているヒープサイズを変えたいということはよくあることだと思います。

ここではお手軽に、インスタンスタイプごとのsetenv.shをS3に用意しておいて、それを起動時シェルで置き換えるという方法を紹介します。

複数のsetenv.shを用意する

まず、利用する可能性があるインスタンスタイプごとのsenenv.shを用意します。
今回はt3.mediumとt5.largeの2パターンを用意します。
ファイル名は{インスタンスタイプ}.setenv.shとつけて下さい。

今回ですと、t3.medium.setenv.shとr5.large.setenv.shとなります。

t3.medium.setenv.sh

t3.mediumはメモリ4GBなので、以下のように2048MBをtomcatに割り当ててみました。

t3.medium.setenv.sh
export CATALINA_OPTS="\
 ${CATALINA_OPTS} \
 -Xms2048m \
 -Xmx2048m \
 ...
"

r5.large.setenv.sh

r5.largeはメモリ16GBなので、以下のように8192MBをtomcatに割り当ててみました。

r5.large.setenv.sh
export CATALINA_OPTS="\
 ${CATALINA_OPTS} \
 -Xms8192m \
 -Xmx8192m \
 ...
"

S3にアップロード

以下のように、上記で作成したファイルをS3の任意のバケットに保存します。

Screen Shot 2021-03-03 at 13.56.35.png

setenv.shを置き換える

それでは、EC2のユーザーデータなどの起動時スクリプトに以下を記述しておきます。

S3からsetenv.shをダウンロード

S3から用意したインスタンスタイプのsetenv.shを全部落としてきます。IAMロールなどのパーミッションをセットするのを忘れずに。配置場所はtomcatディレクトリのbinフォルダの中です。

$ aws s3 sync s3://your-bucket/middleware/tomcat/setenv/ /path-to-tomcat/bin/

インスタンスタイプに合わせて置き換える

以下のコマンドで自身のインスタンスタイプを取得して、{インスタンスタイプ}.setenv.shsetenv.shに置き換えます(コピーします)。

$ ec2-metadata -t | cut -d":" -f2 | xargs echo | xargs -I{} ls {}.setenv.sh | xargs -I{} cp {} setenv.sh

以上になります。
このやり方なら、インスタンスタイプに合わせて自由にsetenv.shを用意することができ、利用するインスタンスタイプが増えたとしてもS3上のファイルを増やせば対応できますので、ソースコードの修正は不要になります。
setenv.shたちをGit管理しておくのもおすすめです。

オートスケーリングで複数のインスタンスタイプを利用しながら、スケールアウトしていく場合などに利用する想定で作成しました。

以上ご参考になればと。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0