皆さん、こんにちは。
AWS認定試験ソリューションアーキテクトアソシエイトを合格して半年経ちましたが何を隠そうほとんど座学一辺倒で認定試験に合格したため、理屈だけ頭の中ではなんとなく理解していても、実際に何をすれば何が出来上がるのかいまいちピンとこない…という状態が続いていました。
ということで今回は、実務経験やハンズオンをほとんどない私がALBを使って複数のEC2にリクエストを振り分けてくれる負荷分散モデルを、CloudFormationを初めて使って構築してみた というレポートです。
■使用するサービス
・VPC
・CloudFormation
・EC2インスタンス
– ALB用 x1
– サービス用 x2
※外部ツールとしてEC2にssh接続して色々操作するのにteratermを使用しました。
①VPCの作成
まずEC2およびALBが動作するVPCを構築します。
ここでもCloudFormationを使用しますが、後述するEC2達とは別のスタックを作成します。
テンプレート内では、コメントを日本語で記述してもエラーが出るので
サンプルを拾ってきたとしても、自分に優しくするためのTipsを散りばめるみたいなことがあまり出来ません…。
どこに何がどんなルールで記載されているかは、頑張って文献を探して読み解いていきます…。

テンプレートがちゃんと完成すると

上から値をはめ込むだけで…

VPCの作成が完了しました。
1回目は大変でしたが、次同じものを作ろうとしたとき、同じテンプレートを使うことができます。
②ALBとEC2を作る
動かす場所が出来上がったので、さっそくEC2を作っていきたい所ですが
どんなEC2を構築するかをいちいちCloudFormationのテンプレートに書き連ねるわけにはいかないので、AMIを指定してそのイメージと同じインスタンスを作成してくれるようなテンプレートを作ってみます。

今回は空っぽのLinuxを一旦作成してみました。このAMI IDを使って、自動作成するEC2インスタンスを自由に選べるようにしようという魂胆です。
なお、この過程で作成したEC2に対するキーペアは、後でssh接続する際に使用するため大事に保管しておきます。AMIの作成が完了したら、改めてEC2とALBを作成するためのCloudFormationテンプレートを作成します。

VPCの際も同様ですが、テンプレートを作成するのは当初予定していたより作るのが大変でお手軽に構築を自動化!というイメージとは程遠く、不慣れなのを差し引いてもなかなか苦労しました。
テンプレートが作成できたらこちらも上から機械的に値をはめ込んでいくだけで…


作成完了したようです。
実際にそれぞれのサービスからインスタンスをチェックしてみます。


EC2もロードバランサーもどうやらちゃんとインスタンスが動いている様子。
③動作確認
作っただけでは、実際にちゃんとした構成になっているかがわからないので
ALBがちゃんと機能して、リクエストがそれぞれに振り分けられているかどうかを確認します。
確認する前に、ベースにしたAMIは空っぽのLinuxなので、振り分け確認ができるような状態に環境を整えます。具体的には、それぞれssh接続してhttpdをインストールし振り分けられていることを確認するために /var/www/html/index.html の記載内容を個別に用意しておきます。
AMI作成時のキーペアや、作成したEC2に割り当てられているパブリックIPアドレス(Elastic IPアドレス)を使ってssh接続し、今回はteratermで操作をしていきます。

※Linuxの操作なので、詳細は割愛します。
準備が整ったら、ALBにアクセスしてページを表示してみます。
まず1回目

そして2回目

3回目の実行では画像は省略しますが1回目と同じページが表示されました。
どうやら正しく振り分けられている様子。
例えば誰かが同じテンプレートを使って同様の環境を構築しようとした場合
手順書さえあれば知識があまりなくても、10分もあれば構築が完了するでしょう。確かに次もう一回同じ構成を作る時はとても便利であることがわかります。
■実際にやってみた感想や反省
・お手軽なのはテンプレートが作成し終わった後で、テンプレート自体の作成はとても大変。
・ハンズオンをほとんど無しでSAAを取得した場合、AWSマネジメントコンソールを使う所からつまづきますし、何が何やらわからないといったことが平気で起こります。 こんなシンプルな構築でも、CloudFormationのお勉強やトラブルシューティングに時間がかかって20時間ぐらい使ってしまいました。
実務で扱うことを目指す足掛かりとして、実際にログインして今回のような構築を行い、イメージとリアルのギャップを埋めた方が良いでしょう。
・今回はCloudFormationでのスタック作成が失敗した時に、効率の良いトラブルシューティングが出来ませんでした。(テンプレートを上から全部見直したりいちから作り直したりした) どこが悪いのかチェックする手段をもっと知っておけば楽にテンプレートが作成できたかもしれませんが、今回は力技で解決しました…。

AWSリセールサービス(請求代行)をご利用いただくだけで、利用料金を5%安くすることができます!