はじめに
AWSで手元にあるアプリケーションを出来るだけ簡単にデプロイしたい場合、Elastic Beanstalkがお勧めです。自由は効きませんがHerokuの様にお手軽にデプロイ出来ます。ただHerokuの何倍ものデプロイ時間がかかるのでそのつもりで・・・。
ここではそんなElastic Beanstalkを少しカスタマイズしたい場合の方法やその考え方、見つけ方を書き記します。余りにも大きく変える場合はEC2やRDSを生のまま使ったりOpsWorks、CloudFormationもご検討下さい。
参考文献
基本的にはAWSのドキュメントが詳しいです。以下と
そこから辿れる以下が基本になると思います。
他にもありますが、それはおいおい。
AWS Elastic Beanstalkで作成されるリソース(EC2, RDSなど)をカスタマイズする方法
設定ファイルの保存場所
".ebextensions"というディレクトリをアプリのホームディレクトリに作成し、その下に拡張子".config"の設定ファイルを保存します。このファイルにカスタマイズ内容を記述します。
ファイルはいくつでもOKです。作成してぽいぽい突っ込んでいきましょう。なおファイルは名前順に適用されていきます。
例: EC2で自動的にgitをインストール
EB(Elastic Beanstalk)で作成されるEC2にはデフォルトでgitが入っていません。例えばこれだとRubyのGemfileでgithubを指定している場合、gitが使えずgithubからgemを取得出来ずデプロイに失敗してしまうことがあります。
このようにEC2をカスタマイズする方法はEC2 インスタンス上のソフトウェアのカスタマイズに文法が詳しく書いてあります。例も豊富で迷うことも少ないと思います。
例えばgitのインストールであれば以下の様にすることで可能です。
packages:
yum:
git: []
ただ冒頭のGemfileでgithubを指定している際に起こる問題に対処する場合は、もう少し工夫が必要です。いつも通りぐぐると設定ファイルが見つかるので、コピペしましょう。今回の場合は以下で上手くいきました。
例: RDSでParameter Groupを指定
EBで作成されるRDSではデフォルトのParameter Groupが使用されます。ただUTF-8対応にしたい場合などは自分で作成したParamete Gruopを適用させたRDSを作成したい場合があります。
この場合は環境リソースのカスタマイズに文法が書いてあります。ただちょっと例が少ないので、以下にこの場合の例を示します。
Resources:
AWSEBRDSDatabase:
Properties:
DBParameterGroupName: mysql55-utf8
ここではEBが作成するRDSに自分で作成したParameter Groupである"mysql55-utf8"を設定しています。環境リソースのカスタマイズにある冒頭の"構文"と末尾にある"AWS Elastic Beanstalk のリソース名"を組み合わせて記述しています。"DBParameterGroupName"といったプロパティ名はCloudFormationのドキュメントを参照して下さい。今回の場合であればAWS::RDS::DBInstanceのページに"DBParameterGroupName"含む使用できるプロパティが記されています。
余談ですがこうやってParameter Groupでutf-8を指定してあげても自動作成されるデータベース(データベース名: ebdb)のcharacter_set_databaseはlatin1になってしまいます。(RDSのDBパラメータグループはインスタンス起動後にしか反映されない?などを参照)AWSのサポートによるとこれは現在の仕様らしいのですが、どうにかこうにかそれも自動でutf-8に修正できる方法があったら誰かテンプレ下さい〜。
おわりに
いかがだったでしょうか?正直、立ち上げた後自分で一つ一つ設定した方が早いこともあるかと思います。でも出来る環境があるのならやってみたいと思うのがエンジニアだと思います。AWSのサポートに加入している方は自分で調べた上で分からなければ問い合わせてみるのも良いかもしれません。