【초보자】AWS CloudFormation 사용하기

목적


  • CloudFormation 템플릿을 어느 정도 읽을 수 있습니다. 핸즈온 등으로 「이 템플릿을 배포해 주세요」라고 말해지는 일이 있지만, 내용을 잘 모르는 템플릿을 실행해, 예상외의 자원이 생겨 버리거나 하는 것이 싫기 때문에.

  • 했던 일


  • 다음을 구현하는 간단한 CloudFormation 템플릿을 만듭니다.
  • VPC, IGW, Subnet을 생성한다.
  • Subnet에 IGW를 위한 라우팅을 넣는다.


  • 구성도





    작업 절차


  • AWS 공식 템플릿 DNS 및 퍼블릭 IP 주소가 있는 Amazon VPC 을 보고 필요한 설정만 남기십시오.
  • 「Resources」로 설정하고 있는 내용은 이하와 같다.
  • VPC: VPC 만들기. IP 범위(10.0.0.0/16)는 고정.
  • Subnet: Subnet을 작성한다. IP 범위(10.0.0.0/24)는 고정.
  • InternetGateway: IGW를 생성한다.
  • AttachGateway: VPC에 IGW를 연결한다.
  • PublicRouteTable: RouteTable을 만듭니다.
  • Route: RouteTable에 Route(0.0.0.0/0을 IGW로)를 추가한다.
  • PublicSubnetRouteTableAssociation: RouteTable과 Subnet을 연결한다.


  • sampletemplate.json
    {
        "AWSTemplateFormatVersion" : "2010-09-09",
        "Description" : "Test template",
    
        "Parameters" : {
          "StackName": {
            "Description" : "Please input StackName.",
            "Type": "String",
            "Default" : "SampleStack",
            "AllowedPattern" : "[-a-zA-Z0-9]*",
            "ConstraintDescription" : ""
          },
        },
    
        "Resources" : {
          "VPC" : {
            "Type" : "AWS::EC2::VPC",
            "Properties" : {
              "CidrBlock" : "10.0.0.0/16",
              "Tags" : [{"Key" : "Name", "Value" : { "Ref" : "AWS::StackName" }}]
            }
          },
          "Subnet" : {
            "Type" : "AWS::EC2::Subnet",
            "Properties" : {
              "VpcId" : { "Ref" : "VPC" },
              "CidrBlock" : "10.0.0.0/24",
              "Tags" : [ {"Key" : "Name", "Value" : { "Ref" : "AWS::StackName" }} ]
            }
          },
          "InternetGateway" : {
            "Type" : "AWS::EC2::InternetGateway",
            "Properties" : {
              "Tags" : [ {"Key" : "Name", "Value" : { "Ref" : "AWS::StackName" } } ]
            }
          },
          "AttachGateway" : {
             "Type" : "AWS::EC2::VPCGatewayAttachment",
             "Properties" : {
               "VpcId" : { "Ref" : "VPC" },
               "InternetGatewayId" : { "Ref" : "InternetGateway" }
             }
          },
          "PublicRouteTable" : {
            "Type" : "AWS::EC2::RouteTable",
            "Properties" : {
              "VpcId" : {"Ref" : "VPC"},
              "Tags" : [ {"Key" : "Name", "Value" : { "Ref" : "AWS::StackName" } } ]
            }
          },
          "Route" : {
            "Type" : "AWS::EC2::Route",
            "DependsOn" : "AttachGateway",
            "Properties" : {
              "RouteTableId" : { "Ref" : "PublicRouteTable" },
              "DestinationCidrBlock" : "0.0.0.0/0",
              "GatewayId" : { "Ref" : "InternetGateway" }
            }
          },
          "PublicSubnetRouteTableAssociation" : {
            "Type" : "AWS::EC2::SubnetRouteTableAssociation",
            "Properties" : {
              "SubnetId" : { "Ref" : "Subnet" },
              "RouteTableId" : { "Ref" : "PublicRouteTable" }
            }
          },
        }
    }
    
  • 관리 콘솔에서 json 파일을 읽어 스택을 만듭니다. Parameters로 「StackName」을 입력하게 하고 있어 여기에서 입력한 값이 VPC등의 자원의 Name에 반영된다.



  • 소감


  • 이상한 자원을 만들 수 없도록, 타인의 템플릿을 실행하기 전에는 제대로 내용을 체크하도록 하고, 아울러 독해력을 높이고 싶다.
  • 좋은 웹페이지 즐겨찾기