SinatraアプリをAWS Elastic Beanstalkで動かした
Sinatraアプリを作ってみたけど環境構築が面倒、と思っていたら、ものすごく分かりやすい記事があったので、早速実践しました。
この場を借りて感謝もうしあげます。
- [Qiita] AWS Elastic Beanstalkの(多分)最速設定 by soramugi
やったこと
実際に動かしたSinatraアプリのリポジトリはこれです。
実行したコマンドなどは、リポジトリのWikiに書きました。
はまった箇所は以下です。
- IAM ユーザの権限が足りなかった
- gitのブランチを変えたら何か言われた
- アプリに渡す環境変数
IAM ユーザの権限が足りなかった
eb init
コマンドを実行するときに、AWSユーザのKEYとSECRETを入力します。
ここで最低限与えるべき権限が決まっているようです。詳細は参考URLをみてください。
私が動かすSinatraアプリは、DBを使わないので、以下の権限を与えれば大丈夫でした。
- IAM FullAccess
- ポリシーファイルとか作るらしい。よく理解していない。
- EC2 FullAccess
- EC2インスタンス作ったり消したりする。
- EIP付与したり。
- ELBとかも選択すれば使うし。
- ElasticBeanstalk FullAccess
- とりあえず。アプリとか作るし指定しておいた。
<参考>
なお、権限が足りないと、以下のような悲しい感じになります。... Select an environment tier. Available environment tiers are: 1) WebServer::Standard::1.0 2) Worker::SQS/HTTP::1.0 Select (1 to 2): 1 Select a solution stack. Available solution stacks are: Select (1 to 0): 0 Select (1 to 0): 1 Select (1 to 0): 0 Select (1 to 0): -1 Select (1 to 0): Select (1 to 0): ^C ←Ctrl+Cで抜けるしかない…
gitのブランチを変えたら何か言われた
Elastic Beanstalkは、gitのブランチごとに別の環境にデプロイできるようです。
masterブランチが本番環境、stagingブランチがステージング環境、などの使い分けができるみたいですね。
ブランチを変える場合、以下のコマンドを実行します。
コマンドを実行すると、環境の名前の入力を求められます。
eb branch
結果
% eb branch
The current branch is "tb_eb_getstart".
Enter an AWS Elastic Beanstalk environment name (auto-generated value is "aws-portal-tbebgetstart"):
Do you want to copy the settings from environment "aws-portal-env" for the new branch? [y/n]: y
<参考>
はじめ、eb init
をmasterブランチで実行したんですが、masterにいきなりコミットするのは嫌なので、ブランチを切りました。
しかし、.gitignore
が変更されているので、とりあえずコミットし、eb start
したら、「このブランチは設定してねーよ!」とか言われました。
「n」と打ってもアプリの開始はやめてくれなくて開始で5分、停止で5分待ちました。。% eb start The current branch "tb_ebtest" is not associated with an Elastic Beanstalk environment. Call "eb branch" to set up a new environment for this branch. Proceeding with default settings. Starting application "aws-portal". Would you like to deploy the latest Git commit to your environment? [y/n]: n Waiting for environment "aws-portal-env" to launch. ←やめて! 2014-05-24 00:24:24 INFO createEnvironment is starting. ...
アプリに渡す環境変数
今回使うアプリはAWSのRubyのSDK(v2)を使うので、環境変数からIAMユーザのKEYとSECRETを受け取る仕組みになっています。
コマンドなり設定ファイルなりで指定できそうですが、とりあえずマネジメントコンソールから環境変数を設定することが出来ました。
やり方はWikiに書きました。
こういったリポジトリに入れる事が出来ない情報は、どうすればいいんですかね。
自動化するときに大きな壁になると思うのですが、みなさんどうしているのでしょう。
参考URL
[Qiita] AWS Elastic Beanstalkの(多分)最速設定 by soramugi
-
[公式] Using IAM Roles with AWS Elastic Beanstalk
- 英語。日本語版も探せばあるかも。
- 絶対必要な権限はこれっぽい
json "iam:AddRoleToInstanceProfile", "iam:CreateInstanceProfile", "iam:CreateRole", "iam:PassRole", "iam:ListInstanceProfiles"
[公式] eb 入門