ベースインスタンスの作成

  • ステージング環境として利用する
  • ミドルウェアアップデートに利用する
  • ベースインスタンスは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-extcapistranoにmergeされているのでいらない

Auto scalingでのdeploy

方法としては以下の方法がある

  • 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入力部分

image

Auto scalingではデプロイ対象サーバがダイナミックに変わっていく

capistrano-ec2groupcapistrano-autoscalingなどのプラグインを使ってデプロイ対象のサーバを動的に管理

capistrano-ec2group

capistrano-autoscaling

References

results matching ""

    No results matching ""