*

手軽にインフラ環境構築の自動化を実現する(したい) 其ノ壱 CloudFormationの使い方をマスターする

      2015/11/12

DQには実はインフラ専任のエンジニアは居ません。
案件担当のエンジニアがインフラも面倒を見るのが社内の風土となっています。
しかしそれだとなかなか統一化や最新ミドルウェアの採用などが追いつかなくなってきました。

そこで、ある程度インフラ環境構築を自動化する事が出来れば、やることが減る分アップデートや最新技術の取り入れ等にもっと時間が裂けるようになるんじゃないか?
と言う安直な考えの元、取り敢えず流行りの「CloudFormation」でインフラ環境構築の自動化を色々試してみようと思います。

因みにこの記事は、全3回で完結する予定です。
・CloudFormationの使い方をマスターする ← 今回の記事はコレ
・「Amamazo Aurora」のクラスタ環境の自動生成 ← 次回記事
・CodeDeploy設定の自動生成 ← 次々回記事
を試してみた結果をまとめます。

なんでAuroraとCodeDeployを試して見たのかと言うと、流行りもの好きだからw
Auroraが何者なのか、CodeDeployが何者なのかと言う話はそれぞれの章で説明します。

得られる結論は
・Aurora環境の構築は自動化出来る
・CodeDeploy設定の生成は自動化出来る
と、言うモノになっています。

 

■今回説明することを先にリンクして置きます。
前提 CloudFormationとは
CloudFormationの使い方 「テンプレートJSON」について
CloudFormationの使い方 CloudFormationの操作方法
CloudFormationでAurora構成を東京リージョンに自動環境構築する(次の記事)
・CloudFormationでCodeDeploy設定を東京リージョンに自動環境構築する(※次々回予定)

 

■前提「CloudFormation」とは
AWS_CloudFormation-200x200
「CloudFormation」を簡単に説明すると
「Amazon Web Service(AWS)が提供している、AWS上のサービスを組み合わせて作成されたシステム構成をテンプレート化して管理し、削除・再利用を簡単に出来るようにするサービス」
です。

Amazonの説明↓

AWS CloudFormation は、関連する AWS リソースの集約を整った予測可能な方法でプロビジョニングおよび更新し、開発者やシステム管理者が容易にそれらを作成・管理できるようにします。

・・・チョットナニイッテルカワラナイですね。
使ってみて分かった事を以って、もっとシンプルに言うと
「システム構成をJSONで定義して、構築・削除がいつでも一括して出来るようになるサービス」
と、言う事でした。

目次に戻る

■CloudFormationの使い方
使い方は結構簡単。
1.「システム構成をJSONで定義」して、「テンプレートJSON」を作る。又は何処かから手に入れる。
2.AWSの「CloudFormation」サービスに行き、「Create Stack」で↑で用意した「テンプレートJSON」を読み込んで「Stack」を作成する。
3.[Stack]を作成すると自動で「Stack」が実行され、構成に従ってインフラが自動構築される。
以上!簡単!!

「システム構成をJSONで定義」「テンプレートJSON」とは何なのか、簡単な例でちょっと先に説明します。
↓のJSONは、S3にバケットを新しく作成する「テンプレートJSON」です。

フムフム・・・成る程、解からん。

書いてる事を順番に調べました。
まず2行目

は、今のところ固定のようです。
Amazonさんは「テンプレートJSON」の書式にバージョンを定義しているようですね。

次の3行目は読んで時のごとく「詳細説明」

詳細説明は自分で好きなように書いて大丈夫です。但し日本語はどうもバケるクサイ・・・

4行目〜10行目は「Parameters」

と言って、テンプレートの一部を変数化して
「Stack」を実行する際に値を指定する事が出来る機能が提供されています。
その機能を利用してこのテンプレートではS3のバケット名を変数化しています。

他にも「Parameters」では色々な事が出来ます。
後ほどのAuroraの設定でも色々な定義方法が出てきますのでAmazonの説明を参考にして下さい。

11行目〜21行目は「Resources」

と言って、実際に展開されるインフラ構成を定義します。

5行目(全体像上の16行目)の「BucketName」だけが特殊で
プロパティの値として変数を指定する場合は
「”BucketName” : {“Ref” : “変数名”}」
と、指定するそうです。

フムフム・・・成る程、今度は解かった!

尚、利用出来るAWSサービスの種類や指定方法とそれのプロパティ定義の仕方はAmazonのリファレンスを良く読んで探し出して下さい。

因みに、今回これから説明する「Aurora」と「CodeDeploy」は実は日本語版のリファレンスには未だ載ってません
ので、Resoucesに関しては英語のリファレンスから探した方が良い場合も有ります。

以上「テンプレートJSON」の説明はココまで。
更に詳しい情報はAmazonさんの公開情報を見てみて下さい。↓
Amazonテンプレートリファレンス
Amazonパラメータリファレンス
Amazonリソースリファレンス(日本語版)
Amazonリソースリファレンス(英語版)

目次に戻る

■CloudFormationの操作方法
さて、前置き大分長かったですが続けます。
↑で定義したS3のテンプレートを実際に「CloudFormation」で「Create Stack」してみます。
https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks?filter=activeへ移動

cfscreen01

「Create Stack」を押したら↑で定義しいたテンプレートJSONをファイル化して置いて、CloudFormationに投げ込みます。

cfscreen02

「Next」を押して次の画面へ。

cfscreen03

先程定義したテンプレートJSONの変数
「S3BucketBucketName」
が入力項目として出てきます。
「Description」プロパティで指定した「Backet Name」もちゃんと表示されてますね。

今回は、「S3BucketBucketName」を「s3testbacket」としてみました。(※スペルが間違ってる事はナイショの方向・・・)
「Next」を押して次へ。

cfscreen04

この画面はAmazonさんが提供してくれている「タグも定義出来ますよ」的な親切心で出してくれる画面です。
今回は別に何も指定するつもりが無いので、そのまま「Next」押して次へ行きます。

cfscreen05

最終確認画面がこんな感じで出ます。
「S3BucketBucketName」もちゃんと入力した通りの値で出てきてますね。
なかなかスゴイ。
確認出来たら「Next」を押して次へ。

cfscreen06

CloudFormationの画面に戻ってきました。
自作のテンプレートJSONが「CREATE IN PROGRESS」つまり、「作成中」になって一番上に追加されてます。
暫く待つと・・・

cfscreen07

「CREATE COMPLETE」に変わった!!
おもむろにS3の画面に移動してみます。
https://console.aws.amazon.com/s3/home?region=ap-northeast-1#へ移動

cfscreen08

無事
「s3testbacket」
バケットが追加されている!!!
スゴイですね〜CloudFormation!

さて、「システム構成をJSONで定義して、構築」は出来た訳ですが
つまりコレを簡単に消す事も出来るのがCloudFormationの更にスゴイところ。

CloudFormationの画面へ移動し、「Delete Stack」ボタンを押す事で、テンプレートJSONで作成されたシステム構成を全て削除してもらう事が出来ます。
https://console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks?filter=activeへ移動

cfscreen09

先程作成した「Stack」を選んで「Delete Stack」を押します。

cfscreen10

「ホントに削除していいの?」的な確認ダイアログが出ます。
「Yes Delete」を押して次へ。

cfscreen11

Stackのステータスが「DELETE IN PROGRESS」削除中に変わりました。
暫く待ちます。すると・・・

cfscreen12

消えた!!!

はい、消えました。サックリと。
S3の画面で、バケットも消えてるか確認してみましょう。
https://console.aws.amazon.com/s3/home?region=ap-northeast-1#へ移動

cfscreen13

一番下の行に「s3testbacket」が無い!(編み消ししてるから判りにくいのはナイショ)
バケット数の表示も4に減っている!!

と、言う事でテンプレートJSONで流し込んだシステム構成は綺麗サッパリ無くなりました。
コレがCloudFormationの基本的な使い方と期待する動きになります。

このCloudFormationの機能を活用すれば、より複雑なシステム構成なAuroraやCodeDeployでさえ一発で作成・削除出来てしまいます。

んー、マーベラス。

因みに、テンプレートJSONは結構色々なサンプルをAmazonが用意してくれています。
http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/sample-templates-services-us-west-2.html
是非是非活用して下さい。

次回は「Amazon Aurora」をCloudFormationで構築します。

目次に戻る

Author Profile

saimushiTwitter:@saimushi
「UNICORN-Project」と言うPHPフレームワーク(RubyのUnicronとは無関係)のMain Autherをやってます。
社内でも幾つかの案件で、採用して頂いています。
iOS(Objective-c)、PHPを得意とし、他にもcocos2d-x(C++)が出来たり、AWSをゴニョゴニョしたりと、割りと幅広く業務させて頂いています。

UNICORN-Projectはコミッターを絶賛募集中です!
是非触って見て、感想だけでも下さい。
http://unicorn-project.github.io
  • このエントリーをはてなブックマークに追加


  関連記事

DigitalQuest
オフィス移転のご報告

本日5/23より、株式会社デジタルクエストは新オフィスにて営業を開始しております …

girl-1076998_1920
結局わたしでしょ?♡

Hi!ミシェルさんです 😀   サービスの企画とかUXについての意見て …

digitalquest_icon
SPAJAM2016 東京D予選に出てみた話 – 事前準備編 –

SPAJAM2016 東京D予選に行ってきました。 SPAJAM2016と言うの …

amazon_icon
AWS re:Inventをまとめておいた

先日行われた AWS re:Invent の内容をカンタンにまとめてみました。 …

digitalquest_icon
NAT Gatewayを使って、ELB+AutoScalling下のVPC-EC2のアウトバウンドIPを固定化してみた。

弊社サービスの3bkは外部サービス連携を幾つかしています。 そのうちの一つがアク …

打刻漏れ通知
GAS × Chatwork × Spreadsheetの勤怠管理システムを公開してみた

どうも、デジタルクエストのヒヨコエンジニアのyokoです。 今回は、Google …

amazon_icon
DNSサーバ移行 – Roadworker

DNSサーバを移行する必要があり、手動で作成されたZoneファイルを見ながら愕然 …

akerun
勤怠管理システムにAkerunを組み込んでみた

どうも、デジタルクエストのヒヨコエンジニアのyokoです。 以前、Google …

digitalquest_icon
Hello World

株式会社デジタルクエストの開発ブログです。 弊社ではWebサービス、iOS/An …

amazon_icon
【速報】PHP7をAmazon Linuxに早速入れてみて、5.6とのベンチマークを取ってみた。

PHP7が11年ぶりに正式リリースされたそうなので、早速試してみたです速報。 試 …