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.スクリーンショットをもとに、テンプレート上に必要なリソースを定義、設定値を指定していく
この記事が気に入ったらサポートをしてみませんか?