Contents
AWS CloudFormationとは?
AWS CloudFormationとはEC2やS3などのAWSリソースを、yamlファイルを元に作成できるサービスです。
AWS CloudFormationを使用するメリット
AWS CloudFormationは非常に重要なサービスで、使用することで3つの大きなメリットがあります。
yamlファイルなのでGit管理できる
Infrastracture as Code と呼ばれる、コードベースでインフラ管理するのが現在の主流です。
コンソールの操作をキャプチャを撮り、手順書に貼り付けるのではなくて、
コードとしてインフラ構成を記述できるため、Githubなどでバージョン管理できるようになります。
それにより、変更箇所の把握が容易になります。
AWSの利用コストがわかりやすい
CloudFormationでyamlを元にAWSリソースを作成するときに、
予想コストが表示されます。
それによって、このインフラ構成ではどれぐらいの料金がかかるのか把握しやすくなります。
リソース群を作成・削除しやすい
yamlファイルを記述しておけば、そのファイルを元にいつでも何度でもリソース群を作成することができます。
逆もまた然りで、リソース群の一括削除もできます。
同じリソース群を複数環境作りたい場合、何度もコンソールからポチポチ作成するのは大変です。
ですが、AWS CloudFormationを使えば、その大変さが省けます。
どれも大きなメリットです。
強いてデメリットをあげれば、記述方式を覚える必要があることです。
ですが、勉強する価値は大きいです。
AWS CloudFormationの基本用語
スタック
AWS CloudFormationでは、1つのyamlを元に作成されるAWSリソース群をまとめて「スタック」を呼びます。
テンプレート
AWS CloudFormationでは、リソース群をyamlファイルに記述します。
そのyamlファイルのことを「テンプレート」と呼びます。
テンプレートは、テキストファイルにJSON形式またはYAML形式で記述します。
コメントが付与できたり、文法が緩いことからYAML形式で記述するのが一般的です。
AWS CloudFormationの利用の流れ
例として、EC2-RDSという構成をAWS CloudFormationを使用して作成します。
テンプレートを書く
ローカルで任意の名前のyamlファイルを作成します。
下記はVPCのみ作成する最低限の記述内容です。
AWSTemplateFormatVersion: 2010-09-09
Description:
"This create only VPC."
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/24
EnableDnsSupport: true
EnableDnsHostnames: true
InstanceTenancy: default
DeletionPolicy: Retain
各リソースごとに設定可能なプロパティは下記で調べて書きます。
AWS リソースおよびプロパティタイプのリファレンス
AWS CloudFormationでスタックを作成する
AWSのマネコンからCloudFormationを開きます。
スタックの作成ボタンから開始します。
ステップ 1 テンプレートの指定
テンプレートは記述済みなので、テンプレートの指定>テンプレートファイルのアップロードからローカルのymlを選択します。
ステップ 2 スタックの詳細を指定
スタックの名前は、任意の名前を入力します。
例えば、sample-vpc-stackなど。
(このスタックの名前で、VPCなどのリソースにタグ付けされます。)
ステップ3 スタックオプションの設定
特にありませんので、そのまま次へを押します。
ステップ 4 レビュー
入力内容を確認して、スタックの作成ボタンを押します。
予想コストリンク から、概算コストを見ることができます。
しばらくすると、テンプレートの内容に基づいてAWSリソースが作成されています。
AWS CloudFormationのテンプレートの記法
AWS CloudFormationのテンプレートにパラメータを埋め込む!Refと!Sub
パラメータだけそのまま使うときは、!Ref パラメータ名
で埋め込みます。
パラメータを任意の文字と連結させるには、!Sub "xxx-${パラメータ名}-yyy"
の要領で埋め込みます。
サンプルは次の項目で併せてお見せしています。
AWS CloudFormationのテンプレートにスタック名を埋め込む
テンプレート
AWSTemplateFormatVersion: 2010-09-09
Description:
"This create only VPC."
Parameters:
ProjectName:
Type: String
Resources:
VPC:
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock: "10.0.0.0/24"
EnableDnsSupport: "true"
EnableDnsHostnames: "true"
InstanceTenancy: default
Tags:
- Key: "Name1"
Value: !Sub "${ProjectName}-vpc"
- Key: "Name2"
Value: !Sub "${AWS::StackName}-vpc"
- Key: "genarated by"
Value: "vpc-only-vpc"
DeletionPolicy: Retain
Tags:
の- Key: "Name1"
と- Key: "Name2"
にパラメータとスタック名を埋め込みます。
スタック作成画面
ymlで定義した独自パラメータは、このようにスタック作成画面に入力欄が作られます。
今回はスタックの名前にfoo、パラメータのProjectNameにbarと入力したので、次のようになるはずです。
Tags:
- Key: "Name1"
Value: !Sub "${ProjectName}-vpc" >bar-vpc
- Key: "Name2"
Value: !Sub "${AWS::StackName}-vpc" >foo-vpc
動作確認
できたVPCのタグ名を確認します。
期待通りに埋め込まれていますね。
AWS CloudFormationとTerraformの違いは?
CloudFormationの類似サービスとして、HashiCorp社のTeraformがあります。
TeraformもInfrastructure as Code を実現するサービスで、AWSのほか、Microsoft AzureやGoogle Coludにも対応していることが大きな違いです。
Teraformの他にも、IaCを実現するサービスはありますので、違いをまとめます。
CloudFormation | Teraform | |||
対応クラウド | AWS | AWS/Azure/GoogleCloud | ||
記述方法 | yaml or json | |||