【初心者必見】はじめてのAWS CloudFormation
投稿日: 2020/11/20
はじめに
突然ですが、みなさんAWSの環境構築はどのように実施しているでしょうか。
普段はコンソールにてEC2やELBなどの設定を1つずつ実施していくと思います。もし、EC2やセキュリティグループの作成要件が何十個もある場合、手作業で行っていくと時間もかかり、ミスも起きるかもしれません。そういうときはCloudFormationの活用を選択肢にいれてみてはいかがでしょうか。CloudFormationはコードでAWS環境が構築できるツールです。
今回はこのCloudFormationについてご紹介させていただきます。
AWS CloudFormationとは?
CloudFormationはプログラミング言語やテキストファイルを使用してAWSリソースを自動で構築するサービスです。所望のAWS環境をテンプレート化しておくことで、同じ環境を作成する時間を削減することができます。CloudFormation特徴としては以下があげられます。
- AWSリソースを自動で作成できる
- テンプレートを作成すると、同じ構成を何度も構築できる
- 利用料金は無料(利用するのに必要なリソース分の料金がかかる)
AWS CloudFormationの使い方
CloudFormationを使用するにはます「スタックの作成」からになります。スタックを作成するためにはリソース情報を記述したテンプレートを準備する必要があります。テンプレートはjsonまたはyamlで記述していきます。
- テンプレートは分割して作成
- 規模が大きくなると管理に手間がかかる
- 変更時の影響も小さくすることができる
- スタックを削除するとリソースも削除される
テンプレートの作成方法
テンプレートの作成方法は以下の3つあります。
-
クイックスタート
・AWSのベストプラクティスに基づいてセキュリティや可用性を考慮してあるテンプレート
・15分程度でアプリケーションをAWS上に展開可能 -
サンプルテンプレート&テンプレートスニペット
・独自のテンプレートを短時間で作成したい場合使用する
・サンプルを用いて独自に作成する際の参考にする -
自らテンプレートを作成
・JSON、YAML形式でテンプレートをゼロから作成する
導入のしやすさはクイックスタートになりますが、本記事では柔軟性が高い方に注目し、自らテンプレートを作成していく方法について説明させていただきます

テンプレートは以下の要素で構成されます。以下のうちの「Resources」がテンプレートを作成するうえで必須の項目となります。
AWSTemplateFormatVersion:
"version date" => テンプレートのバージョンを記載
Description:
"String" => テンプレートの説明文
Metadata:
template metadata => テンプレートに対する追加情報
Parameters:
set of parameters => 実行時にユーザ入力を求めるパラメータ
Mappings:
set of mappings => キーと値のマッピング
Conditions:
set of conditions => 条件名と条件判断内容
Transform:
set of transforms => サーバレスアプリケーションの場合に必要
Resources:
set of resources => スタックを構成するリソースやプロパティ
Outputs:
set of Outputs => スタック構築後にCFnから出力させる値
リソースの指定には以下の項目を入力する必要があります。
Resources:
Logical ID: => 論理ID
Type: Resource type => リソースタイプ
Description: Set of properties => リソースごとのプロパティ
ここでは、例として以下にEC2インスタンスの作成するときのテンプレートを表示します。「Type」にてEC2インスタンスの作成を宣言し、「Properties」にてAMIを宣言することでOSタイプを指定します。

テンプレートを作成してみる
テンプレートの作成はリファレンスページを参考にして作成しましょう。AWS CloudFormation でサポートされているすべての AWS リソースタイプおよびプロパティタイプのリファレンス情報が含まれています。
Type: AWS::EC2::SecurityGroupProperties:
GroupDescription: String
GroupName: String
SecurityGroupEgress:
- Egress
Tags:
- Tag
VpcId: String
以下が今回作成するセキュリティグループの設定になります。
セキュリティグループ名 => security-group01
説明 => test-create
VPC => vpc-xxxxxxxxxxxxxxxxx
インバウンド① => タイプ:SSH プロトコル:TCP ポート範囲:22 ソース:カスタム、xxx.xxx.xxx.xxx/xx
タグ => キー:Name 値:security-group01
上記内容を組み込んだYAMLファイルは以下のようになります。
AWSTemplateFormatVersion: "2010-09-09"
Description: sg-create
Resources:
SG1:
Type: "AWS::EC2::SecurityGroup"
Properties:
GroupDescription: "test-create"
GroupName: "security-group01"
VpcId: "vpc-xxxxxxxxxxxxxxxxx"
Tags:
- Key:"Name"
Value:"secg-01"
SecurityGroupIngress:
- IpProtocol:tcp
FromPort:22
ToPort:22
CidrIp : "xxx.xxx.xxx.xxx/xx"
完成です!
上述のコードをCloudFormationに取り入れることで、セキュリティグループが作成されます。
おわりに
AWS CloudFormationはプログラミング言語やテキストファイルを使用してAWSリソースを自動で構築するサービスです。
リソースを作成するための基本的な構文はリファレンスページにて記述してあるので、そこから要件を満たす設定を記述するだけであっさりと所望のリソースが作成できます。
一度作成してしまえば構文自体は使いまわせるのできっと作業工数が減り、結果的に楽になると思います。
ぜひ、触る機会があれば試してみてください。
CTCは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。