元々は関西在住だったのですが、東京在住になりました。
人混みがあまり好きではない、ディーネットの谷口です。
今回は、AWSの環境をオートメーション化が行える CloudFormationで利用する
テンプレートファイルの書き方について簡単にまとめたいと思います。
CloudFormationは手作業で行っていた事をコード化し、
テンプレートする事で環境をコード管理する事が出来る便利なツールです。
テンプレートファイル
JSON/YAML形式の記述で書く必要があります。
今回は見やすく書きやすいYAML形式を利用します。
テンプレートの細かい書式は 公式を参照
VPC作成~インターネットゲートウェイをVPC接続
VPCを作成し、インターネットゲートウェイをVPCに接続する所までを
YAMLファイルで記載した場合は以下のような記載方法になります。
AWSTemplateFormatVersion: '2010-09-09'
Description: Test Stack
# 設定値
Mappings:
StackConfig:
VPC:
CIDR: 10.0.0.0/16
# VPC作成
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !FindInMap [ StackConfig, VPC, CIDR ]
Tags:
- Key: Name
Value: VPC
# インターネットゲートウェイ作成
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: VPC-IGW
# インターネットゲートウェイをVPCに接続
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
AWSTemplateFormatVersion
テンプレートのフォーマットバージョンになります。
最新のテンプレートの形式バージョンは 2010-09-09 であり、現時点で唯一の有効な値です。
※2018年05月14日現在
テンプレートフォーマットのバージョン宣言の値は、リテラル文字列にする必要があります。
AWSTemplateFormatVersion: '2010-09-09'
Description
テンプレートに関する任意のコメントを含めることができます。
Description は、AWSTemplateFormatVersion セクションの後に記述する必要があります。
説明の宣言の値は、長さ 0 ~ 1024 バイトのリテラル文字列である必要があります。
Description: Test Stack
Parameters
パラメータを使用すると、テンプレート内で参照する事が可能になります。
Parameters:
InstanceTypeParameter:
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- m1.small
- m1.large
テンプレート内でのパラメーターの参照
パラメーターを参照するには、Ref 組み込み関数を使用します。
※「Parameters」に指定したユーザーによる入力値や「Resources」に指定したAWSリソースについて参照する関数です。
先ほど上記で宣言したパラメータを参照する場合は以下
Ref: InstanceTypeParameter
参照:Intrinsic Function Reference
Mappings
キーと名前付きの一連の値とが対応付けられます。
マップ内の値を取得する場合は、Fn::FindInMap 組み込み関数を使用します。
Mappings:
StackConfig:
VPC:
CIDR: 10.0.0.0/16
マッピングした値を参照する場合は以下
!FindInMap [ StackConfig, VPC, CIDR ]
Resources
デプロイしたいAWSリソース、設定を宣言します。
次の例は、VPCを「10.0.0.0/16」で作成します。
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: VPC
参照:AWS Resource Types Reference
CloudFormationを利用することでAWSリソースのセットアップが容易になります。
テンプレート化する事で、AWS構成の見える化と管理が出来るようになります。
次回はCloudFormationで作成した内容を更新した場合にどうなるか等を書ければと思います。