👨🌾
CloudFormation
【概要】
AWSリソースをコード化して、作成、削除などができるマネージドサービスのこと。
YAMLかJSON形式で記述することができます。
【覚えておくべき用語】
用語 | 意味 |
---|---|
テンプレート | YAMLかJSON形式で記述したAWSリソースをどういう構成にするか書いてあるもの |
スタック | テンプレートを使用して、できたAWSリソースの集合体こと |
!Ref関数 | 同一テンプレート内で作成された、パラメータ、リソースを返します。 |
クロススタック | 構成をひとまとめに書くのではなく、おおまかなリソースに分けて書いて、別テンプレート間で値を取ってこれるようにする。 |
【特徴】
・ 記述する内容は前後しても良い(EC2から書いて後からVPCでも良い)
・ ロールバックの機能があるため失敗したテンプレートでも中途半端な作成などは起きない
・ 冪等性(EC2を1つ追加したい場合、変更点だけが追加されるので、重複した作成は起きない)
・ ドリフトを検出(テンプレート内容との現時点の内容の差分を検出し、誤操作の発見に約立つ)
【作ってみよう】
基本的には、CloudFormationのドキュメントを見て、その値が必要なのかどうか調べながら行っていきます。
まずは今回は簡単な構成を作っていきます。
VPC,サブネット、セキュリティグループ
AWSTemplateFormatVersion: 2010-09-09
Resources:
myVPC2:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.8.0/21
EnableDnsSupport: true
Tags:
- Key: Name
Value: MyVPC2CF
subnetName:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: "ap-northeast-1a"
VpcId: !Ref myVPC2
CidrBlock: 10.0.8.0/24
Tags:
- Key: Name
Value: subnetCF
secGroupName:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: Group-SG
GroupDescription: Group-SG
VpcId: !Ref myVPC2
SecurityGroupIngress:
- IpProtocol :tcp
FromPorm :22
ToPort :22
CidrIp :0.0.0.0/0
Tags:
- Key: Name
Value: SGCF
コード見せられただけでは、私は全然わかんないんで、画像で解説
ざっくりと作ったので、足りないところはドキュメントを調べるのが良いかと
次はクロススタック。
基本的に1つのテンプレートに全て書くことはAWS側は非推奨。
ネットワーク、セキュリティ、アプリケーションで分けておいて、各々のテンプレートから値を取ってくることを推奨しています。
今度は、EC2を上記のネットワークに組み込んでみます。
左がVPCとか 右がEC2の作成
「Outputs:」でスタックを跨ぐ値を指定します。
「!ImportValue」で跨いだ値をとってきます。
ざっとの説明になってしまいましたが、ドキュメントを読んで習うより慣れろって感じですね。
この記事はAWS初学者を導く体系的な動画学習サービス
「AWS CloudTech」の課題カリキュラムで作成しました。
Discussion