フェイス・ソリューション・テクノロジーズ株式会社 IS 本部 OS ユニットの Saki@猫好き です。AWS 活用していますか?
いくら AWS 認定資格 6 冠を達成していても、基本は大事。今日は、私が特に好きなサービスである、CloudFormation について学習しなおしてみようと思います。いえ、どちらかというと。OS ユニットの全メンバーに対する「勉強のお時間」です。
はじめに
AWS で環境構築をするとしたら、まず VPC を作成して、EC2 や ELB を作成して、セキュリティグループを設定して、そうだ、S3 に繋ぐために IAM ロールを作成して、S3 バケットを作成して、みたいに 1 つずつ作成、設定を行っていると思います。
では、これを検証環境として、まったく同じ本番環境を作成するとしたらどうでしょう。
どこかで一つ間違いを犯していても本番稼働までは気づくことができないかもしれません。また、その間違いを見つけて修正するまでの間、サービスを止めてしまう可能性もあります。
他にも、EC2 インスタンスを複数、例えば超短期間のうちに 100 台規模で作成しなければならない場合、弊社の 24h365d の強みを活かして 24 時間体制で作成すればできなくもないでしょうけれど、ミスなく、というのは困難だと思います。
こういうときに是非活用したいサービスが、AWS CloudFormation です。
AWS CloudFormation とは?
IaC(Infrastructure as Code)でクラウドプロビジョニングを高速化するサービス。
目に見えないインフラの構成を、コードという形にして、目に見える形にします。すなわち、必要な AWS 環境をテキスト化されたコードとして保存することができます。これにより、同じ環境を作成する時間を大幅に削減することができます。
メリット
- 一度作成してしまえば、設計・構築・試験にかかる工数を削減することができる。
すなわち、開発環境、試験環境、本番環境があるとして、開発環境を作成してしまえば、後は、テキスト化されたコードを利用して試験環境、本番環境を作成することができるようになる。
- 同じ環境が何度でも作成できる。
すなわち、同じような環境を作ったり消したりすることが容易にできる。パラメータを渡すことが可能であるため、パラメータの調整を行うことで複数のユニークな環境を容易に作成できる。 - メンテナンス、保守に係る工数を大幅に削減することができる。
すなわち、これまでの運用であれば、なんらかの修正が発生すると、開発環境、試験環境、本番環境でそれぞれ対応する必要があったが、CloudFormation を利用すれば、テキストを修正するだけでよい。
ここに挙げたメリットでは、工数削減によるコストメリットばかりに目が行くが、品質向上への貢献も高い。テキスト化されたコードを CloudFormation で走らせれば構築が完了するのだから、構築時に人間の手を介することがない。これは、ミスが起きにくいと言える。
デメリット
特には思いつかないが、手法を確立するまでの学習コストがかかることだろうか。
AWS CloudFormation を触ってみる
AWS CloudFormation でリソースを作成する方法は幾つかあります。AWS が用意したサンプルテンプレートを利用する方法、デザイナーでテンプレートを作成する方法、独自にテンプレートを用意する方法などです。
サンプルテンプレートは、SingleAZ、MultiAZ で LAMP 環境、Ruby on Rails 環境、Worddpress 環境の作成、Widows で、Windows Server 環境、Active Directory 環境が作成できるテンプレートが用意されています。
デザイナーでテンプレートを作成する方法は、将来に期待です。ドラッグアンドドロップでテンプレートの作成ができるのですが、メタ情報が多く紛れ込んでしまうため、後で見返したときにわかりづらい。進化の早い AWS ですから、アップデートを待ちましょう。
ここでは、独自にテンプレートを用意する方法を試します。
テンプレートは、JSON もしくは YAML 形式で記述します。ゼロから作る猛者もいらっしゃるでしょうが、私はおとなしく、AWS の用意している「テンプレートスニペット」を利用します。
EC2 インスタンスを立ち上げる(スタックの作成)
テンプレートスニペットの左の柱→テンプレートの使用→テンプレートスニペット→Amazon EC2
※コレ、よく忘れるやつ!

中ほどに、Amazon EC2 Instance リソースがあります

基本はここで公開されているテンプレートスニペットを利用してテンプレートを作成します
今回はAMIの指定を「Amazon Linux2」のもの、利用するインスタンスを「t2.micro」に指定したもので作成を試みたいと思います。(スニペットでは AZ を指定していますが、指定しなければ、CloudFormation を利用するリージョンに自動的に作られます)
これをテキストファイルに貼り付け、拡張子を「.yml」として保存します。
※文字コードは utf-8 にしてください。
Resources:
MyEC2Test:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0bba69335379e17f8
InstanceType: t2.micro
AWS CloudFormation のマネジメントコンソール画面から、スタックの作成を選択します
もしくは、左の柱から「スタック」→「スタックの作成(新しいリソースを使用(標準))」を選択します。

赤枠を上から順番に選択してください
作成した YAML ファイルを選択します。

スタックの名前を設定します
スタックとは、テンプレートからプロビジョニングされるリソースの集合のことです。

スタックオプションの設定については、今回は、そのまま「次へ」
レビューについては、今回は、そのまま「送信」
スタックの作成が始まります

CREATE_COMPLETE になるとスタックの作成が成功しています

EC2 のマネジメントコンソールで確認します

問題なく起動していることが確認できました。
スタックの削除(EC2 インスタンスを削除する)
今度はスタックを削除してみます。
これは、マネジメントコンソールから簡単に行うことができます。
本当に簡単に削除できてしまうので、間違えて重要なスタックを削除してしまわないように、十分注意して作業してください。
削除対象のスタックを選択します(間違えないようによく確認してください)

削除をクリックします

最終の確認

削除が始まります

DELETE_COMPLETE になるとスタックの削除が成功しています

EC2 のマネジメントコンソールで確認します

「停止」ではなく「終了」となっていることが確認できました。
最後に
これだけでは、AWS CloudFormation を利用する価値、有用性はあまり見えてこないかもしれません。しかし、EC2 インスタンスをテキストから立ち上げることができることを確認することができました。
次回は、パラメータを利用して、一つの YAML ファイルから複数のユニークな環境を構築することができることを確認してみたいと思います。
引き続き、よろしくお願いいたします!
コメント