AWS CloudFormation으로 VPC 및 서브넷 제작

10279 단어 AWSCloudFormationtech
안녕하세요. 저는 마수야마입니다.
AWS에서 제작할 때 CloudFormation을 사용하는 경우가 있습니다.
매번 쓰는 법을 잊어버릴 때마다 반복해서 조사하기 때문에 기본적인 구성을 정리해 봅시다.

이번에 준비한 구성.

  • VPC x 1
  • 서브넷 x2
  • 공용 서브넷 x1
  • 개인 서브넷 x2
  • 인터넷 스위치 x1
  • NAT 게이트웨이(개인 서브넷용)
  • 템플릿 파일 준비


    임의의 폴더에 임의의 이름으로 yml 파일을 만듭니다.
    항목마다 하나씩 게재되지만, 마지막에는 전문도 게재되니 안심하세요.
    이번에는 cf-vpc-subnet 테스트.나는 그것을yml라고 명명했다.

    형식 버전 지정


    그럼 제가 템플릿 파일을 만들게요.
    템플릿의 형식 버전을 시작 부분에 지정합니다.
    "2010-09-09"만 지정할 수 있기 때문에 이렇게 적어 둡니다.
    AWSTemplateFormatVersion: 2010-09-09
    

    VPC 설정


    다음부터 템플릿 파일에 추가하십시오.
    템플릿 파일에는 Resources 산하가 만들고자 하는 자원, 템플릿 내 유일한 이름(Logical ID), CIDR 블록 등이 설정된다.
    ...
    Resources:
      CfVPC:
        Type: AWS::EC2::VPC
        Properties:
          CidrBlock: 10.1.0.0/16
          Tags:
            -
              Key: Name
              Value: CfVPC
    
    또한 CloudFormation 템플릿 파일에 태그를 지정할 수 있습니다.

    서브넷 설정


    그런 다음 방금 지정한 VPC에서 서브넷을 두 개 만듭니다.
    하나는 공공 서브넷이고, 다른 하나는 개인 서브넷으로 흔히 볼 수 있는 설정이다.
    ...
      CfPublicSubnet:
        Type: AWS::EC2::Subnet
        Properties:
          CidrBlock: 10.1.1.0/24
          MapPublicIpOnLaunch: true
          VpcId: !Ref CfVPC
          AvailabilityZone: ap-northeast-1a
          Tags:
            - Key: Name
              Value: CfPrivateSubnet
      CfPrivateSubnet:
        Type: AWS::EC2::Subnet
        Properties:
          CidrBlock: 10.1.2.0/24
          MapPublicIpOnLaunch: false
          VpcId: !Ref CfVPC
          AvailabilityZone: ap-northeast-1c
          Tags:
            - Key: Name
              Value: CfPrivateSubnet
    
    새로 나온 물건이 여러 개 있어요, VpcId란!Ref는 매우 중요한 내장 함수입니다.
    VPC ID로 어느 VPC 내에 서브넷을 만들지 지정하지만, 클라우드 포메이션에서 VPC를 만들지 않으면 ID를 알 수 없다.
    템플릿에 설정된 Logical ID(리소스의 논리 ID)를 필터링합니다.Ref를 참조하면 VPC ID가 자동으로 일치합니다.
    게다가 실패!Ref를 사용하면 참조자(VPC)가 서브넷과 같은 종속성 생성을 자동으로 처리합니다.
    또한, MapublicIpOnLaunch는 AWS 관리 콘솔이'공용 IPv4 주소 자동 할당 사용'에서 선택되었는지에 해당한다.
    공공 서브넷에서는 진짜이고, 개인 서브넷에서는 가짜다.

    인터넷 게이트웨이 설정


    인터넷 게이트웨이 정의


    자원 유형으로만 지정하기 때문에 간단합니다.
    ...
      CfInternetGateway:
        Type: AWS::EC2::InternetGateway
        Properties:
          Tags:
            - Key: Name
              Value: CfInternetGateway
    

    VPC에 인터넷 게이트웨이 연결


    위에서 설명한 인터넷 게이트웨이를 CfVPC에 연결합니다.
    병합 함수!Ref를 사용하여 VPC ID와 인터넷 Gateway ID를 지정합니다.
    ...
      AttachCfInternetGateway:
        Type: AWS::EC2::VPCGatewayAttachment
        Properties:
          InternetGatewayId : !Ref CfInternetGateway
          VpcId: !Ref CfVPC
    
    그리고 여기서 시도해 보세요!Ref로 Cf인터넷Gateway를 지정하고 인터넷 게이트웨이를 잘 만들어서 부착하는 동작이기 때문이다.

    인터넷으로의 라우팅 설정(공통 서브넷)


    다음 코스 준비해.우선 공공 서브넷 쪽에서 시작합니다.

    루트 테이블 만들기(공용 서브넷)


    자원 유형만 지정하기 때문에 간단합니다.
    ...
      CfRouteTableForPublicSubnet:
        Type: AWS::EC2::RouteTable
        Properties:
          VpcId: !Ref CfVPC
          Tags:
            - Key: Name
              Value: CfRouteTableForPublicSubnet
    

    라우팅 정의(공통 서브넷)


    위에서 설명한 루트 테이블을 시도해 보십시오!Ref에서 지정한 경우 인터넷 게이트웨이를 기본 게이트웨이 0.0.0/0의 수신자로 지정합니다.
    ...
      CfRouteForPublicSubnet:
        Type: AWS::EC2::Route
        Properties:
          RouteTableId: !Ref CfRouteTableForPublicSubnet
          DestinationCidrBlock: 0.0.0.0/0
          GatewayId: !Ref CfInternetGateway
    

    루트 테이블 및 서브넷 링크(공통 서브넷)


    위에서 생성한 루트 디렉토리는 서브넷과 연관되지 않으므로 루트 테이블을 공용 서브넷과 연관시킵니다.
    ...
      CfAssocciateRouteTableForPublicSubnet:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
          RouteTableId: !Ref CfRouteTableForPublicSubnet
          SubnetId: !Ref CfPublicSubnet
    

    인터넷으로 설정된 루트(개인 서브넷)


    개인 서브넷의 서버가 업데이트 등을 위해 인터넷으로 가야 한다고 가정해 보자.
    그러나 개인 서브넷은 직접 인터넷에 게시하지 않고 NAT 게이트웨이를 통해 게시한다.

    NAT 게이트웨이용 Elasic IP 설정


    NAT 게이트웨이에 Elasic IP가 할당되어 있는지 확인합니다.
    ...
      NatGatewayEIP:
        Type: AWS::EC2::EIP
        Properties:
          Domain: vpc
    

    NAT 게이트웨이 생성


    방금 지정한 Elastic IP를 설정하면서 공용 서브넷에 NAT 게이트웨이를 만듭니다.
    ...
      CfNatGateway:
        Type: AWS::EC2::NatGateway
        Properties:
          AllocationId:
            Fn::GetAtt:
              - NatGatewayEIP
              - AllocationId
          SubnetId: !Ref CfPublicSubnet
          Tags:
            - Key: Name
              Value: CfNatGateway
    

    루트 테이블 만들기(공용 서브넷)


    공통 서브넷과 마찬가지로 자원 유형만 지정하면 됩니다.
    ...
      CfRouteTableForPrivateSubnet:
        Type: AWS::EC2::RouteTable
        Properties:
          VpcId: !Ref CfVPC
          Tags:
            - Key: Name
              Value: CfRouteTableForPrivateSubnet
    

    루트 정의(개인 서브넷)


    위에서 설정한 NAT 게이트웨이를 개인 서브넷의 기본 게이트웨이로 지정합니다.
    Ref! 의 참조 방법 등은 NAT 게이트웨이의 Logical ID를 참조하는 공통 서브넷과 같습니다.
    ...
      CfRouteForPrivateSubnet:
        Type: AWS::EC2::Route
        Properties:
          RouteTableId: !Ref CfRouteTableForPrivateSubnet
          DestinationCidrBlock: 0.0.0.0/0
          NatGatewayId: !Ref CfNatGateway
    

    루트 테이블과 서브넷 링크 (개인 서브넷)


    또한 공통 서브넷과 마찬가지로 루트 테이블과 루트 디렉토리를 연관시킵니다.
    ...
      CfAssocciateRouteTableForPrivateSubnet:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
          RouteTableId: !Ref CfRouteTableForPrivateSubnet
          SubnetId: !Ref CfPrivateSubnet
    

    템플릿 파일의 전체 텍스트


    템플릿 파일은 여기까지이며 전체 텍스트로 다시 업로드됩니다.
    AWSTemplateFormatVersion: 2010-09-09
    
    Resources:
      CfVPC:
        Type: AWS::EC2::VPC
        Properties:
          CidrBlock: 10.1.0.0/16
          Tags:
            -
              Key: Name
              Value: CfVPC
    
      CfPublicSubnet:
        Type: AWS::EC2::Subnet
        Properties:
          CidrBlock: 10.1.1.0/24
          MapPublicIpOnLaunch: true
          VpcId: !Ref CfVPC
          AvailabilityZone: ap-northeast-1a
          Tags:
            - Key: Name
              Value: CfPrivateSubnet
      CfPrivateSubnet:
        Type: AWS::EC2::Subnet
        Properties:
          CidrBlock: 10.1.2.0/24
          MapPublicIpOnLaunch: false
          VpcId: !Ref CfVPC
          AvailabilityZone: ap-northeast-1c
          Tags:
            - Key: Name
              Value: CfPrivateSubnet
    
      CfInternetGateway:
        Type: AWS::EC2::InternetGateway
        Properties:
          Tags:
            - Key: Name
              Value: CfInternetGateway
    
      AttachCfInternetGateway:
        Type: AWS::EC2::VPCGatewayAttachment
        Properties:
          InternetGatewayId : !Ref CfInternetGateway
          VpcId: !Ref CfVPC
    
      CfRouteTableForPublicSubnet:
        Type: AWS::EC2::RouteTable
        Properties:
          VpcId: !Ref CfVPC
          Tags:
            - Key: Name
              Value: CfRouteTableForPublicSubnet
    
      CfRouteForPublicSubnet:
        Type: AWS::EC2::Route
        Properties:
          RouteTableId: !Ref CfRouteTableForPublicSubnet
          DestinationCidrBlock: 0.0.0.0/0
          GatewayId: !Ref CfInternetGateway
    
      CfAssocciateRouteTableForPublicSubnet:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
          RouteTableId: !Ref CfRouteTableForPublicSubnet
          SubnetId: !Ref CfPublicSubnet
    
      NatGatewayEIP:
        Type: AWS::EC2::EIP
        Properties:
          Domain: vpc
    
      CfNatGateway:
        Type: AWS::EC2::NatGateway
        Properties:
          AllocationId:
            Fn::GetAtt:
              - NatGatewayEIP
              - AllocationId
          SubnetId: !Ref CfPublicSubnet
          Tags:
            - Key: Name
              Value: CfNatGateway
    
      CfRouteTableForPrivateSubnet:
        Type: AWS::EC2::RouteTable
        Properties:
          VpcId: !Ref CfVPC
          Tags:
            - Key: Name
              Value: CfRouteTableForPrivateSubnet
    
      CfRouteForPrivateSubnet:
        Type: AWS::EC2::Route
        Properties:
          RouteTableId: !Ref CfRouteTableForPrivateSubnet
          DestinationCidrBlock: 0.0.0.0/0
          NatGatewayId: !Ref CfNatGateway
    
      CfAssocciateRouteTableForPrivateSubnet:
        Type: AWS::EC2::SubnetRouteTableAssociation
        Properties:
          RouteTableId: !Ref CfRouteTableForPrivateSubnet
          SubnetId: !Ref CfPrivateSubnet
    

    CloudFormation 테스트


    스택 만들기


    이제 콘솔에서 템플릿 파일을 업로드하고 클라우드 포메이션으로 리소스를 만듭니다.
    CloudFormation 콘솔로 이동하여 스택 만들기를 선택합니다.

    선택한 후 새 리소스 사용(기본값)을 선택합니다.

    화면 지시에 따라 템플릿 파일을 업로드합니다.

    다음 화면에서 임의의 창고 이름을 지정합니다.
    이 템플릿 파일에서 만든 자원 집합의 이름입니다.

    다음 화면에서 자세히 설정할 수 있습니다.
    레이블, IAM 스크롤 막대 등을 개별적으로 설정할 수 있지만, 이번에는 테스트인 만큼 공백에서 계속해 달라.

    마지막으로 확인 화면이 표시되며 [스택 만들기]를 선택합니다.

    스택 생성 시작 후


    제작이 시작되면 상태가 업데이트되고 자원이 자동으로 끊임없이 제작됩니다.
    (기술 오류 등의 이유로 리소스를 만들 수 없는 경우 모든 리소스가 자동으로 삭제되고 롤백되므로 안심하십시오.)

    화면 오른쪽에 있는 루프 화살표(태그 내의 업데이트 버튼)를 누르면 리소스가 업데이트됩니다.
    최종적으로 지정된 창고 이름, 즉 창고가 CREATE-COMPLETE라면 제작 완료
    망했어.

    [에셋] 탭에도 생성된 에셋이 나열되어 있으며 각 서비스의 콘솔을 통해서도 확인할 수 있습니다.
    예를 들어 VPC는 지정된 태그Name으로 제작되었음을 확인할 수 있습니다.

    스택 삭제


    시험이 끝난 후 여분의 비용이 들지 않도록 자원을 삭제하세요.
    클라우드 포메이션이 만든 리소스는 스택이라는 컬렉션으로 한 번에 삭제할 수 있어 편리하다.
    CloudFormation의 콘솔 화면에서 [삭제]를 선택하면 이번 테스트에서 작성된 리소스를 모두 삭제할 수 있습니다.

    총결산


    하나하나의 자원을 코드로 관리하면 공사를 가볍게 할 수 있을 뿐만 아니라 자원의 설정과 구성은 누가 봐도 이해할 수 있는 것이 매우 중요하기 때문에 잘 이용하고 싶습니다.
    이 IP 주소는 고정 값이지만 스택을 만들 때 콘솔에서 입력할 수 있습니다.
    또한 라벨도 버전 이름을 입력하는 등 고정값으로 매번 조금씩 변경할 수 있다는 점은 다른 기회에 소개할 수 있다.

    좋은 웹페이지 즐겨찾기