CloudFormation으로 EC2 & ElasticIP 생성하기
AWS CloudFormation으로 EC2 인스턴스를 생성하고 ElasticIP를 EC2에 할당해보자
Last updated
Was this helpful?
AWS CloudFormation으로 EC2 인스턴스를 생성하고 ElasticIP를 EC2에 할당해보자
Last updated
Was this helpful?
CloudFormation은 인프라 리소스를 코드 기반으로 프로비저닝하는 IAC(Infrastructure As Code)를 제공한다. 언어 형식은 JSON
과 YAML
두 가지를 지원한다. JSON
또는 YAML
로 프로비저닝할 리소스를 정의하고 config를 설정한 코드를 템플릿이라고 하고 템플릿을 이용하여 AWS 클라우드에 생성되는 리소스들의 묶음 단위를 스택이라고 한다. CloudFormation 템플릿을 YAML
로 작성하여 EC2 인스턴스와 ElasticIP를 생성해보자.
EC2 인스턴스와 ElasticIP를 생성하는 템플릿은 아래와 같이 크게 3가지 속성으로 되어있다.
속성
역할
Description
템플릿 내용이나 작성자에 대한 설명을 기재한다.
Mappings
키-값 구조의 데이터를 정의한다.
Resources
스택에 생성하고 싶은 AWS 리소스들을 정의한다.
위 속성들 외에 다른 템플릿 속성을 알고싶다면 를 참고하면 된다.
Resources에 EC2 인스턴스를 정의해보자. 아래와 같은 형식으로 리소스를 정의할 수 있다.
원하는 이름을 <ResourceName>
에 정의한다. EC2 인스턴스를 생성하므로 리소스 타입은 AWS::EC2::Instance
이다. Properties
키에는 EC2 인스턴스를 생성하는 데 필요한 설정들을 키-값 형태로 정의한다. 위 형식을 참고하여 리소스 이름과 속성을 정의하면 아래와 같다.
속성
역
AvailabilityZone
인스턴스가 생성될 AZ를 정의한다. 위 코드에서는 GetAZs
함수로 가용 AZ들을 조회하여 그 중 첫번째 AZ에 인스턴스를 생성한다. 리전을 기준으로 AZ가 결정되므로 aws-cli
명령어에서 지정한 리전이 바뀌면 가용 AZ도 바뀐다.
ImageId
어떤 AMI(AWS Machine Image)를 사용할 지 정의한다. AMI는 리전과 OS별로 ID가 다르기 때문에 Mappings 에 리전 - AMIID
구조로 값을 미리 정의해서 사용했다.
InstanceType
인스턴스의 사양을 설정한다. t2.micro
가 free-tier로 제공되므로 t2.micro
로 설정했다.
KeyName
인스턴스에 SSH으로 접속할 때 사용할 키의 이름을 명시한다. 인스턴스가 한 번 스택에 생성되고나면 바꿀 수 없다.
ImageId
에서 사용하는 AmiRegionMap
은 아래와 같다. Ubuntu 18.04 64bit
에 해당하는 AMI만을 사용할 것이기 때문에 리전 당 AMI의 ID는 1개씩 정의했다.
ElasticIP를 Resources
에 정의하고 스택 생성 시 위에서 정의한 EC2에 ElasticIP가 할당되도록 해보자. ElasticIP를 정의하는 형식도 속성만 다를 뿐 EC2와 동일한 형식을 갖는다.
속
역
InstanceId
ElasticIP가 퍼블릭 주소로 할당될 인스턴스를 지정한다. 위에서 미리한 EC2 리소스의 이름을 지정했다.
Tags
리소스를 구분하기 위해 태그를 지정한다.
위에서 작성한 코드를 종합해보면 아래와 같다.
이 템플릿을 이용하여 AWS 클라우드에 EC2 인스턴스와 ElasticIP를 생성해보자. 스택을 생성하는 aws-cli 명령어는 아래와 같다.
옵션
역
--stack-name
생성할 스택의 이름을 지정한다.
--template-body
위에서 만든 템플릿 파일의 이름을 지정한다.
--capabilities
리소스를 생성할 권한이 있는 IAM 유저임을 AWS에 알린다.
--profile
AWS 유저프로필의 이름. 유저프로필에 정의된 리전에 의해 AZ가 결정된다.
AWS 콘솔에 접속하여 확인해보자.
CloudFormation의 Stacks
메뉴에서 생성된 스택을 확인할 수 있다. EC2 인스턴스와 Elastic IP가 잘 생성되었다. Logical ID
필드에 직접 정의했던 리소스의 이름이 나타난다. Physical ID
필드의 값을 클릭하면 EC2 콘솔로 이동하여 생성된 인스턴스와 IP를 확인할 수 있다.
사용된 내장함수 Fn::Select
, Fn::GetAZs
, Fn::FindInMap
, Fn::Ref
에 대해 자세히 알고싶다면 를 참고한다.
create-stack
뿐만 아니라 update-stack
으로 기존의 스택을 수정할 수도 있다. (cloudformation 명령어에 대해 자세히 알고싶다면 를 참고한다.) 위 명령어를 이용하여 스택을 성공정으로 생성하면 아래와 같이 생성된 스택의 ID를 받을 수 있다.