본문 바로가기
공부/IaC

[AWS CloudFormation] #4 mapping 사용하기 (EC2 AMI)

by haejang 2021. 1. 6.
728x90
728x90

 

>>진행한 실습 GitHub

 

ec2 만든 실습에서 ami를 설정하는 부분을 좀 고쳐보겠다

지난번엔 파라미터만 사용해서, 디폴트 값이 있지만 다른 ami를 원하면 직접 복사해서 넣어야했다

이번엔 매핑을 사용해 Linux2 또는 Windows 2019 Base 둘 중 하나를 선택하면 해당 리전에 맞는 ami가 자동으로 설정되도록 해보겠다

 

Mappings:
  RegionMap: 
    us-east-1:
      Linux2: ami-0be2609ba883822ec
      Window2019: ami-0229f7666f517b31e
    us-east-2:
      Linux2: ami-0a0ad6b70e61be944
      Window2019: ami-0d5b55fd8cd8738f5
    us-west-1:
      Linux2: ami-03130878b60947df3
      Window2019: ami-0ae930fa924b34ed3
    us-west-2:
      Linux2: ami-0a36eb8fadc976275
      Window2019: ami-0706901be27b0d22b
    ap-northeast-1:
      Linux2: ami-01748a72bed07727c
      Window2019: ami-014612c2d9afaf1ac
    ap-northeast-2:
      Linux2: ami-0094965d55b3bb1ff
      Window2019: ami-02e14cbf0d1fa141a

 

Resources 위에 Mappings를 설정해준다

RegionMap이 이 매핑의 논리적id이고, 내가 설정한 리전들에서 linux와 window에 맞는 ami들을 적어넣어놨다

 

여기에 사용한 ami

 

다른 원하는 리전이나 ami는 직접 추가하면 된다

 

이제 Linux2나 Window2019를 어떻게 선택하게할까 생각해봤는데, Parameter로 넣어 정해진 값 중에 선택하게 하고싶다

Parameters:
  AMI:
    Description: AMI of EC2
    Type: String
    Default: Linux2
    AllowedValues:
      - Linux2
      - Window2019

AllowedValues로 선택할 수 있는 값들을 미리 지정해주면, 스택을 생성할 때 드롭다운으로 표시된다

 

이제 마지막으로 ec2를 생성하는 부분에서

Resources:
  EC2forWeb:
      Properties:
      ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", !Ref AMI ]

이런식으로 ImageId 부분을 수정해주자

Fn::FindInMap 함수는 Mappings 섹션에서 선언된 맵을 소환한다

맵 이름과 2개의 키를 파라미터로 받는다

AWS::Region은 가상 파라미터인데, 이는 CloudFormation에서 사전 정의된 파라미터로 Ref 함수로 사용할 수 있다

그 중에서도 AWS::Region을 참조하면 자동으로 스택을 생성하는 리전의 ID을 가져오게 된다

 

ec2-mapping.yaml
0.00MB

 

이제 이를 가지고 스택을 생성해보자

매핑에 적어둔 곳 중 아무 리전에서 실행하면 된다 

 

 

AMI를 선택할 수 있다

 

생성을 완료한 후 생성된 EC2에 접속해보니

 

 

미리 설정해둔 Amazon Linux 2로 잘 생성되었다

 

+) 앞으로 진행되는 실습은 Linux 2에서만 할거고, 리전별로 골라지기만 하면 되므로 더 간단하게

Mappings:
  RegionMap: 
    us-east-1:
      Linux2: ami-0be2609ba883822ec
    us-east-2:
      Linux2: ami-0a0ad6b70e61be944
    us-west-1:
      Linux2: ami-03130878b60947df3
    us-west-2:
      Linux2: ami-0a36eb8fadc976275
    ap-northeast-1:
      Linux2: ami-01748a72bed07727c
    ap-northeast-2:
      Linux2: ami-0094965d55b3bb1ff

Resources:
  EC2forWeb:
    Properties:
      ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", Linux2 ]

이 상태로 진행하겠다

 

ec2-mapping-simple.yaml
0.00MB

728x90
728x90

댓글