share facebook facebook2 twitter menu hatena pocket slack

2016.01.25 MON

AWSでIPアドレスという概念を無くす方法【cloudpack大阪ブログ】

村主 壮悟

WRITTEN BY村主 壮悟

EC2は柔軟だ

EC2は、オンプレミスで作られた設計と同じように構成出来る柔軟性を持っています。
そのため、元々の設計によっては多少の変更は必要ですが、オンプレミス時代の設計でAWS環境を構築することが出来ます。

このようにオンプレミスの設計を持ち込む事でも、AWSへの移行メリットはあるかと思います。
例えば、サーバの調達が早くなる。スペックを柔軟に変えられるので単純に安くなった。夜は止めることでコストダウンが出来た。など。
これらも非常に大きなメリットで、より良いサービス提供が出来るでしょう。

ただ、、、もったいない!!!!!!!!

せっかくクラウドを利用しているので、使いこなさないともったいないです!
使いこなすには発想の転換が必要となりますが、使いこなすことでより低コストでより柔軟な自動化などが図れます。
そろそろ次のステップに移りましょう!!

ということで、今後、もろもろ記載していきたいと思いますが、まずはIPアドレスについて、

IPアドレスなんか無くしちまえ

そう、ミスターマリックのようにハンドパワーで消すことで、よりクラウドっぽく使えるようになります。
なぜIPアドレスを無くしたいかというと、AutoScaleを使ってスケーラブルな構成にしたり、
障害時の復旧などを自動的に行えるようにし、運用負荷を軽減させたいのです。

なので、IPアドレスはアサインするものではなく、
意識しない(DHCPによる自動割当)設計が必要になります。

本題

では、本題に入ります。
以下はよくやる構成かと思います。

よくやる構成

20151126215711

これはELB配下になるのでEC2上のApacheはIPベースではなくNameベースのバーチャルホストになっているかと思います。
そのため、以下の感じになります。

Route53 -> ELB A-Alias or CNAME
ELB -> EC2 インスタンスIDで紐付け
EC2 -> RDS DNS Name

上記にはIPアドレスで紐付けられていません。
実質的にEC2にはIPアドレスが割り当てられていますが、
IPアドレスで繋げていないので、例えIPアドレスが変わったとしてもサービスは継続されます。
つまり、AutoScaleなどが利用可能になります。

次に、以下のような構成も多いと思います。
これはNothing例です。

Nothing例

20151126215716

この状態だと片方のEC2のIPが固定化され、例えば片方のEC2が壊れて復元する場合に、
IPアドレスを引き継ぐ必要があります。

復元時に覚えておいたIPアドレスを手作業で引き継ぐか、手順書に埋め込むか、
コードに埋め込むか。など、まぁやること自体は単純なんですが、

IPアドレスが変わった時など、あちこちの資料を更新しないといけない。とかつらい思いで有りますよね。
言いたいことは「その作業、本当に必要なの?」です。

はじめに設計で何とかしとけば、不要な作業になりえるのです。

では、何とかしてみましょう。done.

オススメ例

20151126215723

はい。この構成で、EC2起動時に動的に自分のIPアドレスを調べて
Route53のAレコードを書き換える処理(下記コード)を入れておくだけで
IPアドレスを意識する事無い構成になりました。

費用も100~200円程度で出来ますね。
IPの事考えたり、資料更新したり。。どっちのコストが安いんでしょうね。

また、動的にIPアドレスを取得しますので、
コード内にもIPアドレスが埋め込まれることがなくなりました。

コード例

IP_ADDRESS=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`
sed -e 's/hogehoge/$IP_ADDRESS/g' /home/ec2-user/template.json > /home/ec2-user/update.json
aws route53 change-resource-record-sets --hosted-zone-id ABCDXYZ --change-batch file:////home/ec2-user/update.json

※template.jsonファイルはレコード内容に応じて別途生成する必要があります。
http://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html

そして、、、、IPアドレスが消えました。

ちっちゃいですが、この辺りに作業がなくなりましたね。

復元時に覚えておいたIPアドレスを手作業で引き継ぐか、手順書に埋め込むか、
コードに埋め込むか。など、まぁやること自体は単純なんですが、
IPアドレスが変わった時など、あちこちの資料を更新しないといけない。とかつらい思いで有りますよね。

このようにして、一つづつ色々なものを引き剥がしていくことで、
不要な作業を撲滅していきましょう。

以上、

元記事はこちら

AWSでIPアドレスという概念を無くす方法【cloudpack大阪ブログ】

村主 壮悟

村主 壮悟

ご縁があってcloudpackにjoinしました。構築・運用を担当しています。 関西のJAWS-UG界隈に出没していますので、機会があれがお声がけください。