AWS CloudFormationを使いたかった

AWSを本気で使い始めるようになると、検証でAWSリソースを作っては消し、作っては消しの繰り返しで、もはや目・肩・腰が、限界です。そこで、検証につ使うVPCやEC2などのリソースのCloud Formationのテンプレート化を試みました・・・。

CloudFormation概要

・テンプレートによる、AWSリソースの自動作成、自動削除が可能
・テンプレートの形式は、YAMLかJSON。YAMLの場合、コメントが書ける
・テンプレートは、S3(CF専用)にアップロードして実行する
・登録したテンプレートを削除時、テンプレートで作られたリソースを全部消してくれる
・無料!

CloudFormationテンプレートの書き方(YAML)

0. YAMLファイルの準備

gitで管理されているフォルダ内にYAMLファイルを作り、エディタで開く。
下記はコマンドの例。

mkdir aws-cloudformation-wo-tukaitai
cd !$
git init
touch test-cloudformation.yml
vim !$

1. Headerセッションの記述

お約束を書く

AWSTemplateFormatVersion : '2010-09-09'     #固定
Description: Test Environment of Ore System #適当な説明

2. Resources セッション

AWSリソースの状態を定義

Resources:
 # VPCの定義
 cfnVpc:   # リソースの名前。(自分で決める)
   Type: AWS::EC2::VPC  # リソースのタイプ。(マニュアルから探してくる)
   Properties:
     CidrBlock: 10.0.0.0/16  # リソースのプロパティを指定。(マニュアルから探してくる)
     Tags:
       - Key: Name
         Value: cfn-vpc-ore-testenv

説明

・先に作成したリソースのID(VPCIDなど)は、!Ref <リソースの名前>で参照できる。例えば、下記のような記述ができる。

 # Frontend Subnet 1
 cfnFrontendSubnet1:
   Type: AWS::EC2::Subnet
   Properties:
     … snip ...
     VpcId: !Ref cfnVpc

・CloudFormationは、!Ref関数を元にリソースの間の依存関係を解釈してくれるので、リソースを作成する順に記述しなくても良い
Dependson プロパティを使っても、リソース間の依存関係を定義できる

2.Parameters セッション

テンプレート実行時、選択や入力させたい値を定義

Parameters:
 EC2InstanceType: # パラメータ名。(自分で決める)
   Type: String  #パラメータの型
   Default: t2.micro #デフォルト値を記述
   AllowedValues: # 選択肢
     - t2.micro
     - t2.small
   Description: Select EC2 instance type. # 説明

説明

・Parametersに定義した値は、Resourcesセッションから、!Ref <パラメータ名>で参照する
・「パラメータ名」や「説明」は、CloudFormation実行時に表示されるので、使う人の気持ちになって、わかりやすいものにしておく
・パラメータの型には、AWS固有パラメータというのも指定できる。これを使うと、EC2のKey Pairなども選択できる。例えば下記のようなパラメータ定義が可能。

 KeyPair:
   Type: AWS::EC2::KeyPair::KeyName
   Description: Select Key Pair.

マニュアル(超重要)

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html#cfn-rds-dbinstance-dbinstanceclass
https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html

俺流テンプレート作り方

1.AWSリソースそのものを理解するため、Webコンソールを使い手動でRDSなどを作ってみる。
2.作り方に慣れたら、Webコンソールのスクリーンショットを撮る。このとき、リソース作成に必要な別のAWSリソースや設定項目を理解する
3.スクリーンショットをもとに、テンプレート上に必要なリソースを定義、設定値を指定していく


この記事が気に入ったらサポートをしてみませんか?