ブログ

ryuzeeによるブログ記事。不定期更新

Auto Scalingで起動したインスタンスにEIPを自動で設定する方法

みなさんこんにちは。@ryuzeeです。

ピーク性のあるWebシステムをAWS上で運用している場合、Auto Scalingを使ってサーバの台数を増減させるのがベストプラクティスの1つです。こうすることで最大時にあわせたムダなキャパシティを確保する必要がなくなります。

一方で、Webシステムでは、他の外部システムと連携したり、APIを呼び出したりといったことも多くあり、さらに外部システム側ではアクセス元のIPアドレスを絞り込んでいることがあります。

この場合に、外部システムとの通信を行うために、Proxyを用意するというのも手ですが、Proxy自体の可用性や拡張性の問題もあります。 そこで以下では、Auto Scalingで起動したインスタンスに自動でEIPを割り当てる方法を紹介します。こうすることでProxyを経由させる必要もなくなります。

なお、なんでもかんでもEIPを割り当てるのは良い方法とは言えません。上記のような制約がある場合のみで使うことをお勧めします。

事前準備

  • 割り当て対象となるEIPを確保します。その際に、Auto Scalingの最大インスタンス起動数にあわせてEIPを確保することになります。なおデフォルトでは1リージョンあたりで使えるEIPの数は5個なので、それで足りない場合は、上限緩和申請をすることになります。
  • 起動したEC2インスタンスの中からAPIコールを行ないますので、IAM Roleを作成してください。

スクリプトの作成

方式としては、インスタンスの中でスクリプトを実行し、事前準備のところで確保しておいたEIPの中からまだ割り当てられていないものを割り当てるようにします。

スクリプト(ここではファイル名をeip_from_pool.shとします)は以下のようになります。必要な情報はインスタンスメタデータから取得しますので、特にリージョンによる違いはありません。(なお、EC2-Classicではなく、VPC環境での利用を想定していますので、もしEC2-Classic環境の場合は適宜書き換えが必要です)

#!/bin/sh

## 以下は自分の環境に合わせる。
## 作成済みAMIでサービスの起動設定ができていればこういった記述は不要
sudo yum -y install httpd
sudo \rm /etc/httpd/conf.d/welcome.conf
sudo touch /var/www/html/index.html
sudo chmod 666 /var/www/html/index.html
echo "I LOVE SUSHI!!" > /var/www/html/index.html
sudo /sbin/chkconfig --level 2345 httpd on
sudo /etc/rc.d/init.d/httpd restart

## 以下EIPの自動割り当て処理
INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id`
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk -F\" '{print $4}'`

for ALLOC_ID in `aws ec2 describe-addresses --region=$REGION --filter "Name=domain,Values=vpc"  --output text | grep -v eipassoc- | awk '{print $2}'`
do
  CMD="aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --no-allow-reassociation --region=$REGION"
  $CMD
  STATUS=$?
  if [ 0 = $STATUS ] ; then
    exit 0
  fi
done
exit 1

Auto ScalingのLaunch Configurationの設定

あとは、Auto Scalingの設定をすればOKです。作成自体はコマンドラインでもマネジメントコンソールからでもどちらからでも作成できます。ここではマネジメントコンソール経由で作成します。

ここから先は基本的な話です。手順で肝となるのはUser Dataに上記で作ったスクリプトを指定するところだけなので、そんなん知っている、という場合は読み飛ばしてOKです。

マネジメントコンソールでEC2の項目を開き、左ナビゲーションから、Launch Configurationを選択します。

Launch Configurationの一覧

ここで、Create launch configurationをクリックします。すると以下のようにAMIの選択の画面に進みます。

AMIの選択

自分が利用したいAMIを選択して次に進んでください。なお、本稿で紹介する方式はcloud-initawscliを利用していますので、予めAMIの中にそれらが含まれている必要があります。ここでは、Amazon Linux AMI 2014.09.1 (HVM)を選択しました。

以下のようにインスタンスタイプの選択画面が表示されるので、好きなものを選びます。

インスタンスタイプの選択

次に詳細設定です。ここが肝になります。

詳細設定

ここでは

  • IAM Roleのプルダウンで事前準備で作成しておいたIAM Roleを選択して、起動したEC2インスタンスからアクセスキーやシークレットキーの埋め込みなしでAPIコールできるようにします。
  • Advanced Detailsの項目をクリックして展開します。
  • そこで、User dataの項目があるので、As fileを選択してください。ダイアログが表示されるので、先ほど作成したeip_from_pool.shを選択します。
  • IP Address Typeの箇所でAssign a public IP address to every instance.を選択してください。

以上が終わったら、次に進みます。以下のようにストレージ容量の設定が出ますので、適当なサイズを指定します。

ストレージ設定

次に、セキュリティグループの設定です。

セキュリティグループ設定

さらに進むと確認画面が表示されます。

確認画面

問題なければページ右下のCreate launch configurationボタンをクリックします。さらにキーペアの選択ダイアログが表示されますので、利用するキーペアを指定します。

Launch Configuration完了

引き続き、Auto Scaling Groupを作ります。上記の画面右下のCreate an Auto Scaling group using this launch configurationをクリックします。

以下のような画面が表示されるので、初期の台数や起動するVPC、Subnet、紐付けるELBなどを指定します。

Auto Scaling Groupの設定

必要に応じて、スケーリングポリシーの設定をしたりしてください(ここでは割愛します)。

スケーリングポリシーの設定

次に通知設定が表示されますので、ここでも必要に応じて設定してください。

通知の設定

起動するインスタンスに対するタグ付けの設定をお好みに応じて行ないます。

タグの設定

確認画面が表示されます。

確認画面

問題なければ先に進みます。以下のような画面が表示されればOKです。

完了画面

これで暫く待っていればEC2インスタンスが起動してきます。このタイミングで先ほどLaunch configurationで設定したスクリプトが動き、EIPが割り当てられます。

EIPの一覧画面で見てみると、以下のように表示されることが分かると思います。

EIPの割り当て完了

それでは。

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら
  • スクラム実践者が知るべき97のこと
  • 著者/訳者:Gunther Verheyen / 吉羽龍太郎 原田騎郎 永瀬美穂
  • 出版社:オライリージャパン(2021-03-23)
  • 定価:¥ 2,640
  • スクラムはアジャイル開発のフレームワークですが、その実装は組織やチームのレベルに応じてさまざまです。本書はスクラムの実践において、さまざまな課題に対処してきた実践者が自らの経験や考え方を語るエッセイ集です。日本語書き下ろしコラムを追加で10本収録
  • プロダクトマネジメント ―ビルドトラップを避け顧客に価値を届ける
  • 著者/訳者:Melissa Perri / 吉羽龍太郎
  • 出版社:オライリージャパン(2020-10-26)
  • 定価:¥ 2,640
  • プロダクト開発を作った機能の数やベロシティなどのアウトプットで計測すると、ビルドトラップと呼ばれる失敗に繋がります。本書ではいかにしてビルドトラップを避けて顧客に価値を届けるかを解説しています。
  • SCRUM BOOT CAMP THE BOOK 【増補改訂版】
  • 著者/訳者:西村直人 永瀬美穂 吉羽龍太郎
  • 出版社:翔泳社(2020-05-20)
  • 定価:¥ 2,640
  • スクラム初心者に向けて基本的な考え方の解説から始まり、プロジェクトでの実際の進め方やよく起こる問題への対応法まで幅広く解説。マンガと文章のセットでスクラムを短期間で理解できます。スクラムの概要を正しく理解したい人、もう一度おさらいしたい人にオススメ。
  • みんなでアジャイル ―変化に対応できる顧客中心組織のつくりかた
  • 著者/訳者:Matt LeMay / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン(2020-3-19)
  • 定価:¥ 2,640
  • アジャイルで本当の意味での成果を出すには、開発チームだけでアジャイルに取り組むのではなく、組織全体がアジャイルになる必要があります。本書にはどうやってそれを実現するかのヒントが満載です
  • レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
  • 著者/訳者:David Scott Bernstein / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン( 2019-9-18 )
  • 定価:¥ 3,132
  • レガシーコードになってから慌てるのではなく、日々レガシーコードを作らないようにするにはどうするか。その観点で、主にエクストリームプログラミングに由来する9つのプラクティスとその背後にある原則をわかりやすく説明しています。
  • Effective DevOps ―4本柱による持続可能な組織文化の育て方
  • 著者/訳者:Jennifer Davis、Ryn Daniels / 吉羽 龍太郎、長尾高弘
  • 出版社:オライリージャパン( 2018-3-24 )
  • 定価:¥ 3,888
  • 主にDevOpsの文化的な事柄に着目し、異なるゴールを持つチームが親和性を高め、矛盾する目標のバランスを取りながら最大限の力を発揮する方法を解説します
  • ジョイ・インク 役職も部署もない全員主役のマネジメント
  • 著者/訳者:リチャード・シェリダン / 原田騎郎, 安井力, 吉羽龍太郎, 永瀬美穂, 川口恭伸
  • 出版社:翔泳社( 2016-12-20 )
  • 定価:¥ 1,944
  • 米国で何度も働きやすい職場として表彰を受けているメンローの創業者かつCEOであるリチャード・シェリダン氏が、職場に喜びをもたらす知恵や経営手法、より良い製品の作り方などを惜しみなく紹介しています
  • アジャイルコーチの道具箱 – 見える化の実例集
  • 著者/訳者:Jimmy Janlén / 原田騎郎, 吉羽龍太郎, 川口恭伸, 高江洲睦, 佐藤竜也
  • 出版社:Leanpub( 2016-04-12 )
  • 定価:$14.99
  • この本は、チームの協調とコミュニケーションを改善したり、行動を変えるための見える化の実例を集めたものです。96個(+2)の見える化の方法をそれぞれ1ページでイラストとともに解説しています。アジャイル開発かどうかに関係なくすぐに使えるカタログ集です
  • カンバン仕事術 ―チームではじめる見える化と改善
  • 著者/訳者:原田騎郎 安井力 吉羽龍太郎 角征典 高木正弘
  • 出版社:オライリージャパン( 2016-03-25 )
  • 定価:¥ 2,138
  • チームの仕事や課題を見える化する手法「カンバン」について、その導入から実践までを図とともにわかりやすく解説した書籍。カンバンの原則などの入門的な事柄から、サービスクラス、プロセスの改善など、一歩進んだ応用的な話題までを網羅的に解説します。
  • Software in 30 Days スクラムによるアジャイルな組織変革“成功"ガイド
  • 著者/訳者:Ken Schwaber、Jeff Sutherland著、角征典、吉羽龍太郎、原田騎郎、川口恭伸訳
  • 出版社:アスキー・メディアワークス( 2013-03-08 )
  • 定価:¥ 1,680
  • スクラムの父であるジェフ・サザーランドとケン・シュエイバーによる著者の日本語版。ビジネス層、マネジメント層向けにソフトウェア開発プロセス変革の必要性やアジャイル型開発プロセスの優位性について説明
  • How to Change the World 〜チェンジ・マネジメント3.0〜
  • 著者/訳者:Jurgen Appelo, 前川哲次(翻訳), 川口恭伸(翻訳), 吉羽龍太郎(翻訳)
  • 出版社:達人出版会
  • 定価:500円
  • どうすれば自分たちの組織を変えられるだろう?それには、組織に変革を起こすチェンジ・マネジメントを学習することだ。アジャイルな組織でのマネージャーの役割を説いた『Management 3.0』の著者がコンパクトにまとめた変化のためのガイドブック