👨‍🌾

CloudFormation

2021/02/12に公開

【概要】

AWSリソースをコード化して、作成、削除などができるマネージドサービスのこと。
YAMLかJSON形式で記述することができます。

【覚えておくべき用語】

用語 意味
テンプレート YAMLかJSON形式で記述したAWSリソースをどういう構成にするか書いてあるもの
スタック テンプレートを使用して、できたAWSリソースの集合体こと
!Ref関数 同一テンプレート内で作成された、パラメータ、リソースを返します。
クロススタック 構成をひとまとめに書くのではなく、おおまかなリソースに分けて書いて、別テンプレート間で値を取ってこれるようにする。

【特徴】

・ 記述する内容は前後しても良い(EC2から書いて後からVPCでも良い)
・ ロールバックの機能があるため失敗したテンプレートでも中途半端な作成などは起きない
・ 冪等性(EC2を1つ追加したい場合、変更点だけが追加されるので、重複した作成は起きない)
・ ドリフトを検出(テンプレート内容との現時点の内容の差分を検出し、誤操作の発見に約立つ)

【作ってみよう】

基本的には、CloudFormationのドキュメントを見て、その値が必要なのかどうか調べながら行っていきます。
https://docs.aws.amazon.com/ja_jp/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」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com

Discussion