AWS BeanstalkにCakePHPのサンプルをGitでデプロイした
BeanstalkでPHPをGitでデプロイできるそうなのでどんなことができるのかやってみました。
CakePHPでのサンプルアプリ作成手順
環境の設定などはこちらのブログを参考にしながら、以下の手順で行いました。
http://d.hatena.ne.jp/j3tm0t0/20120404/1333531368
ちょこちょこつまづきながらも、できました。Gitデプロイ便利ですね。
確認/少し工夫したこと
Gitでの開発→テストを簡単にしたい
開発→開発環境でのテスト→ステージング環境でのテスト→本番へのデプロイ というサイクルを回しやすくしたい。
つまり、↓を回しやすくしたいということです。
出典: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/create_deploy_PHP.sdlc.html
リンク先の開設の中でも、以下のように述べられているわけですが、どのように実現できるのか確認してみました。
The following diagram illustrates a typical software development life cycle including deploying your application to AWS Elastic Beanstalk.
手順
- ステージングと本番環境の用意
- RDSもステージングと本番で二つ用意
- アプリケーションの中に二つの環境を作成
- ステージングはもったいないのでWebサーバーは1台にしておく (Actions->Edit/Load Configuration)
- テスト環境と本番環境でアプリの設定を変更するようにアプリを変更
- 今回は環境によって接続先DBを変更させるようにした
- Consoleで環境にごとにオプションの値を変更 (Actions->Edit/Load Configuration)
- app/AppModelの中でオプションの値によって接続先DBを変更するように修正
- 今回は環境によって接続先DBを変更させるようにした
public function __construct($id = false, $table = null, $ds = null) { parent::__construct($id, $table, $ds); if (!get_cfg_var('aws.param1')) { $this->useDbConfig = 'development'; } else { if (get_cfg_var('aws.param1') == 'production') { $this->useDbConfig = 'default'; } else { $this->useDbConfig = 'test'; } } }
- test 環境にだけ push する
- テスト環境でOKであることが確認できたら、本番にデプロイ
- 本番にデプロイするときにはセレクトボックスからリビジョンを選ぶだけなので、非常に簡単でした。
エラーログの確認
デプロイ後、テスト環境で正常に表示されなかったため、CakePHPのログを確認しました。
以下のように、-e の後ろに環境名を付けて コマンドを実行すると、その環境のWebサーバーが返ってくるので、そのIDに対してSSHログインしました。
$ elastic-beanstalk-describe-environment-resources -e XXXXXX AutoScalingGroups | EnvironmentName | Instances | LaunchConfigurations | LoadBalancers | Triggers ------------------------------------------------------------------------------------------------- awseb-XXXXX-zbLQ9Yk4kG | XXXXX | i-06980XXX, i-509e0XXX | awseb-XXXXX-5Cc71hQOwh | awseb-XXXXX | awseb-XXXXX-zbLQ9Yk4kG
デプロイしたファイルは/var/www 以下に配置されるようです。
Gitで誰がデプロイするか
git aws.push は git push -f ....へのエイリアスなので、複数の開発者がpushすれば、親子関係などを無視してpushできてしまいます。開発者は共通のレポジトリにpushするだけにして、Beanstalkにpushする際には注意を払ってmasterのHEADが必ず上がるようにした方がいいのですかね。
Auto Scaleするか確認してみたいですね。
*1:http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog/blog.html