ベースインスタンスの作成
- ステージング環境として利用する
- ミドルウェアアップデートに利用する
- ベースインスタンスはReboot時に動作可能な状態とする
- 固定Private IPを避ける
- Public IPは動的に割り当てる
- ログをCloudWatch logsで回収する
deploy
- ツールはrsyncやcapistranoなどなんでもいい
- サーバ数が多く変わることが多いならprivateを取得して、deployする。
タグに「Role=Web」「Environment=Production」が設定されているEC2インスタンスのPrivate IPを取得し処理を実行するシェルスクリプトです。
ipAddresses=$(aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Role,Values=web" "Name=tag:Environment,Values=Production" | jq -r '.Reservations[].Instances[].PrivateIpAddress')
for ip in $ipAddresses; do
if [ $ip != "null" ]; then
echo "$ip"
fi
done
wercker ciを利用してdeloy
Deploying to Amazon EC2 Container Service with Wercker
rails capistranoでdeploy
上記のリンクのcapistranoのgemでcapistrano-ext
はcapistrano
にmergeされているのでいらない
Auto scalingでのdeploy
- オートスケール時のデプロイを User Data と Capistrano を使って行う(BootStrap パターン)
- Capistrano 3とaws-sdk 2でELB配下にあるインスタンスへデプロイする奴
- AWSでデプロイとスケーリングを自動化する方法まとめ
方法としては以下の方法がある
- EC2 + User Data
- Elastic Beanstalk
- OpsWorks
- CodeDeploy
User Dataにshell scriptを入れてinstanceを生成し、起動するとき(最初の1回)に実行される
User Dataで渡されたスクリプトが実行されることによって、新しく起動してくるEC2はcap deploy:setup
まで終わった状態で、
最新のコードが配置された状態でnginxなどのserverが起動するようにUser Dataスクリプトを作成する
User data入力部分
Auto scalingではデプロイ対象サーバがダイナミックに変わっていく
capistrano-ec2group
やcapistrano-autoscaling
などのプラグインを使ってデプロイ対象のサーバを動的に管理