IaaS/퍼블릭클라우드

(AWS) VPC with Cloudformation

armyost 2021. 6. 3. 14:36
728x90

해당 YAML스크립트는 Github에서 받으세요 : https://github.com/armyost/AWSCloudformation.git

 

구성할 아키텍쳐

 

 

YAML 스크립트 시작


AWSTemplateFormatVersion: 2010-09-09
#AWSTemplateFormatVersion
#AWSTemplateFormatVersion은 Template format version을 의미하며 현재는 2010–09–09 값만 사용 가능합니다.
Description: Make a VPC 2

Resources:
#Resources는 CloudFormation를 통해 생성할 자원을 정의하는 곳입니다. 참고로 생성되는 자원간의 의존성은

#CloudFormation이 판단하여 생성해줍니다.
  ToturialVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.0.0.0/16
      EnableDnsHostnames: true

  InternetGateway:
    Type: AWS::EC2::InternetGateway

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref ToturialVPC

#!는 내장함수를 호출합니다. (이 문서 하단에 내장함수에 대한 상세내용 있음)

#Ref는 리소스이름으로 템플릿의 다른 리소스를 참조
      InternetGatewayId: !Ref InternetGateway

  PublicSubnet01:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref ToturialVPC
      CidrBlock: 172.0.0.0/24
      AvailabilityZone: !Select
#!Select는 인덱스별 객체목록에서 파라미터 0 과 !GetAZs ''를 보내어 객체 하나를 반환합니다.

        - '0'
        - !GetAZs ''

#지정된 리전의 가용 영역을 알파벳순으로 나열하는 어레이를 반환합니다

 

#AvailableZone을 한줄로 표시하면 AvailabilityZone: !Select [ 0, !GetAZs '' ] 입니다.

  PrivateSubnet01:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref ToturialVPC
      CidrBlock: 172.0.1.0/24
      AvailabilityZone: !Select
        - '0'
        - !GetAZs ''

  PublicSubnet02:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref ToturialVPC
      CidrBlock: 172.0.2.0/24
      AvailabilityZone: !Select
        - '1'
        - !GetAZs ''

  PrivateSubnet02:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref ToturialVPC
      CidrBlock: 172.0.3.0/24
      AvailabilityZone: !Select
        - '1'
        - !GetAZs ''

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref ToturialVPC

  PublicRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  PublicSubnetRouteTableAssociation1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet01
      RouteTableId: !Ref PublicRouteTable

  PublicSubnetRouteTableAssociation2:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet02
      RouteTableId: !Ref PublicRouteTable

  PrivateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref ToturialVPC

  PrivateSubnetRouteTableAssociation1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PrivateSubnet01
      RouteTableId: !Ref PrivateRouteTable

  PrivateSubnetRouteTableAssociation2:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PrivateSubnet02
      RouteTableId: !Ref PrivateRouteTable

Outputs:
  VPC:
    Description: Toturial VPC ID
    Value: !Ref ToturialVPC
  AZ1:
    Description: Availability Zone 1
    Value: !GetAtt
      - PublicSubnet01
      - AvailabilityZone
  AZ2:
    Description: Availability Zone 2
    Value: !GetAtt
      - PublicSubnet02
      - AvailabilityZone

 

 


 

내장함수 표현법

 

JSON

{ "Fn::Base64" : valueToEncode }


YAML
Fn::Base64: valueToEncode

YAML 짧은구문 !Base64 valueToEncode


내장함수 설명

(https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html 를 참고해도좋습니다.)


Base64
내장 함수는 입력 문자열의 Base64 표시를 반환합니다. 이 함수는 일반적으로 UserData 속성을 통해 인코딩된 데이터를 Amazon EC2 인스턴스에 전달하는 데 사용됩니다.

Cidr
내장 함수 Fn::Cidr은 CIDR 주소 블록의 어레이를 반환합니다. 반환된 CIDR 블록의 수는 count 파라미터에 따라 다릅니다.

FindInMap
Fn::FindInMap 내장 함수는 Mappings 섹션에서 선언된 2수준 맵의 키에 해당하는 값을 반환합니다.

GetAtt
Fn::GetAtt 내장 함수는 템플릿의 리소스에서 속성 값을 반환합니다. 특정 리소스의 GetAtt 반환 값에 대한 자세한 내용은 리소스 및 속성 참조의 해당 리소스에 대한 설명서를 참조하십시오.

GetAZs
Fn::GetAZs 내장 함수는 지정된 리전의 가용 영역을 알파벳순으로 나열하는 어레이를 반환합니다. 고객이 다른 가용 영역에 액세스할 수 있으므로 템플릿 작성자는 Fn::GetAZs 내장 함수를 사용하여 호출하는 사용자의 액세스 권한에 따라 조정되는 템플릿을 작성할 수 있습니다. 그러면 지정된 리전에 대한 전체 가용 영역 목록을 하드코딩할 필요가 없습니다.

ImportValue
내장 함수 Fn::ImportValue는 다른 스택에서 내보낸 출력의 값을 반환합니다. 일반적으로 이 함수를 사용하여 교차 스택 참조를 생성합니다. 다음 예제 템플릿 조각에서 스택 A는 VPC 보안 그룹 값을 내보내고 스택 B는 이 값을 가져옵니다.

Join
내장 함수 Fn::Join은 지정된 구분 기호로 구분된 값 세트를 단일 값에 추가합니다. 구분 기호가 빈 문자열이면 값 세트는 구분 기호 없이 연결됩니다.

Select
내장 함수 Fn::Select는 인덱스별 객체 목록에서 객체 하나를 반환합니다.

Split
결과로 얻은 문자열 목록에서 요소를 선택할 수 있도록 문자열을 문자열 값 목록으로 분할하려면 Fn::Split 내장 함수를 사용합니다. 쉼표(,)와 같은 구분 기호를 사용하여 분할 위치를 지정합니다. 문자열을 분할한 후 Fn::Select 함수를 사용하여 특정 요소를 선택합니다.

예를 들어, 쉼표로 구분된 서브넷 ID 문자열을 스택 템플릿으로 가져올 경우 각 쉼표로 문자열을 분할할 수 있습니다. 서브넷 ID 목록에서 Fn::Select 내장 함수를 사용하여 리소스에 대한 서브넷 ID를 지정합니다.

Sub
내장 함수 Fn::Sub는 입력 문자열의 변수를 지정한 값으로 바꿉니다. 템플릿에 이 함수를 사용해 스택을 생성하거나 업데이트해야만 사용할 수 있는 값이 포함된 명령 또는 출력을 만들 수 있습니다.

Transform
내장 함수 Fn::Transform은 스택 템플릿의 일부분인 사용자 지정 처리를 수행하는 매크로를 지정합니다. 매크로를 통해 찾기 및 바꾸기 작업 같은 간단한 작업부터 전체 템플릿 변형과 같은 작업까지 템플릿에 대한 사용자 지정 처리를 수행할 수 있습니다. 자세한 정보는 AWS CloudFormation 매크로를 사용하여 템플릿에 사용자 지정 처리 수행 단원을 참조하세요.

또한 Fn::Transform을 사용하여 AWS CloudFormation에서 호스팅된 매크로인 AWS::Include 변환 변형을 호출할 수 있습니다.

Ref
Ref 내장 함수는 지정된 파라미터 또는 리소스에 대한 정보를 반환합니다.

파라미터의 논리적 이름을 지정하면 파라미터의 값이 반환됩니다.

리소스의 논리적 이름을 지정하면 해당 리소스를 참조하는 데 일반적으로 사용할 수 있는 값이 반환됩니다(예: 물리적 ID).

템플릿에서 리소스를 선언하는 데 이름으로 또 다른 템플릿 리소스를 지정해야 하는 경우 Ref를 사용하여 해당하는 다른 리소스를 참조할 수 있습니다. 일반적으로, Ref는 리소스의 이름을 반환합니다. 예를 들어 AWS::AutoScaling::AutoScalingGroup에 대한 참조는 Auto Scaling 그룹 리소스의 이름을 반환합니다.

일부 리소스의 경우 리소스 측면에서 또 다른 중요한 의미를 지닌 식별자가 반환됩니다. 예를 들어, AWS::EC2::EIP 리소스는 IP 주소를, AWS::EC2::Instance는 인스턴스 ID를 반환합니다.

|