はじめに
はじめまして。
サーバサイドエンジニアのkdmです。
Node.jsでサーバサイドアプリケーションの開発をやってます。
普段はAWS周りのメンテナンスや開発はメインの担当ではないのですが、
担当している案件でCloudFormation(以下CFn)を利用することになり、
現在ゴリゴリのゴリラでCFnを触っています。
本記事では自身の頭の中をまとめる意味も含め、簡単ではありますがCFnについて紹介します。
目次
- CFnについて
- CFnを使ってVPCを作ってみる
CFnについて
とりあえず 公式ドキュメント です。
まぁあれですね、Infrastructure as Codeってやつですね。
AWSで利用するEC2やVPCなどのインフラをコードでビルドできるわけです。
単なるコードですので、
- バージョン管理が可能になり
- 冪等性を担保したデプロイが可能になる
上記のようなメリットがあるという認識です。
コードとしてメンテナンスをし続けることで、
「○○さんしか作業方法を知らない」という職人芸を排除できそうです。
しかし、コードの管理が職人芸になってしまったら悲しみですな!
CFnを使ってVPCを作ってみる
序章
こういったものはとりあえず手を動かしてみましょう。理解が早いと思います。
今回はとりあえずVPCを作ってみましょう。
CFnにはテンプレートという概念が存在しており、
JSON or YAML形式のテキストファイルとしてコードを記述していきます。
テンプレートを元にして、AWSのCloudFormation上にスタックというものができあがります。
スタックはリソース(EC2とかVPCなど)の変更点を1まとめにしたものです。
cd /path/to/workspace
touch vpc.yaml
本記事ではYAMLを採用します。
I Love JSON な方には申し訳ないです😇
こちらはCFnのVPCリファレンスです。
AWSTemplateFormatVersionはテンプレートの形式バージョンを指しています。
任意の項目ですので、なくてもよいです。
現在最新で唯一のバージョンは 2010-09-09
です。
Resources以下に定義を記述していくのですが、そのほかにDescriptionやParametersも定義が可能です。
ここまでの内容をまとめると以下のようなYAMLになります。
AWSTemplateFormatVersion: "2010-09-09"
Description: >
This is template of VPC.
Parameters:
Hoge:
Type: String
Description: >
sample param.
Resources:
・
・
・
こんな感じです。
パラメータにもdescriptionを定義できます。
ここからは具体的なVPCの定義(Resourcesの記述)をしていきましょう!
第1章 VPCの作成
まずはリファレンスのサンプルを参考に記述をします。
AWSTemplateFormatVersion: "2010-09-09"
Description: >
This is template of VPC.
Parameters:
VpcCIDR:
Type: String
Description: >
sample param.
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref VpcCIDR
EnableDnsSupport: false
EnableDnsHostnames: false
InstanceTenancy: dedicated
Tags:
- Key: hoge
Value: fuga
こんな感じですね。
!Ref
ってやつがいきなり出てきましたが、これはCFnの組み込み関数です(ドキュメント)。
本記事ではパラメータ(VpcCIDRという名前で定義されています)の論理名を指定し、その値を利用するようにしました。
いったんこの状態でAWSにデプロイしてみましょう。
AWS CLIでデプロイをします。
stackname='test-vpc-stack'
VpcCIDR='10.0.0.0/16'
aws cloudformation deploy --stack-name ${stackname} \
--template-file vpc.yaml \
--parameter-overrides \
VpcCIDR=${VpcCIDR}
こんな感じでスタック名やテンプレートファイルを指定してデプロイします。
stackname='test-vpc-stack'
VpcCIDR='10.0.0.0/16'
aws cloudformation deploy --stack-name ${stackname} \
--template-file vpc.yaml \
--parameter-overrides \
VpcCIDR=${VpcCIDR}
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - test-vpc-stack
スタックの作成が完了しました。
AWSコンソールで確認します。
こちらはCFnの画面にて、スタック名で絞り込んだ状態のスクショです。
スタックが作成されていますね。
スタック名のリンクをクリックして詳細を見てみましょう。
画面の一部を切り取ったスクショです。
CREATE_COMPLETEしています。
VPCが作られていますね(リソースのセクションに注目)。
VPCの画面を開いて、作成されたVPCの物理IDで検索をしてみます。
どん!
VPCが作られていますね。
こんな感じのノリでAWSリソースを作成できます。
作成されることが確認できたので削除します。
aws cloudformation delete-stack --stack-name test-vpc-stack
CFnの画面に戻ります。
削除されました。
DELETE_COMPLETEです。
VPCの画面を開きます。
先ほど作成したVPCの物理IDで検索をすると、表示されなくなりました。
終章
今回はVPCのみを作成するシンプルなものでしたが、
複雑にテンプレートを作り込めば一度にさまざまなリソースを作成できます。
使い方に慣れてくれば便利な気配がするので、頑張って覚えようと思います。
みなさんもぜひ、利用する機会があればCFnを使ってみてください。