본문 바로가기
교육

[48일 차] 21.09.29 : AWS 8

by ballena 2021. 9. 29.

AWS CloudFormation + 실습(EC2, VPC, Subnet, Endpoint 등)


1교시

 

 

  • IaC(Infrastructure as a Code)

코드로 인프라 배포. 콘솔이 아닌 쉘 기반의 스크립트를 사용한 배포

-> 코드로 만들어 파일화 시킨 것을 배포하면 자동화 가능

비용 절감 + 빠른 실행 + 리스트 관리

 

  • IaC의 도구

1. 구성 조정 도구(Configuration Orchestration Tool)

-> 서버/기타 인프라의 구축을 자동화하도록 설계

-> AWS CloudFormation, Terraform 등

2. 구성 관리 도구(Configuration Management Tool)

-> 이미 프로비저닝 된 인프라의 SW와 시스템을 구성하고 관리하도록 설계

-> Chef, Ansible 등

 

  • 주요 개념

1. Template : 스택 리소스 프로비저닝 및 구성을 위해 필요한 파일. CloudFormation 스택에서 프로비저닝 할 리소스를 설명한다.

2. Stack : 하나의 단위로 관리할 수 있는 AWS 리소스 모음. 스택의 생성, 수정 삭제를 통해 리소스 모음의 생성, 수정, 삭제 가능. 스택의 모든 리소스는 CloudFormation 템플릿을 통해 정의된다. 스택을 삭제하면 관련 리소스가 모두 삭제된다.

3. CloudFormation : 스택을 생성하고 스택에 대한 변경 사항을 확인 및 업데이트. 스택의 생성 및 변경 중 에러 감지를 통한 롤백 지원

 

-> 템플릿을 CloudFromation 서비스에 넣으면 스택이 된다. 이 스택 정보를 CloudFormation이 읽어서 인프라를 구성

 

  • AWS CloudFormation

-> 모든 클라우드 인프라 리소스를 모델링 및 프로비저닝 하여 리소스 관리 시간을 줄이고, AWS에서 실행되는 App에 더 많은 시간을 사용하도록 해주는 IaC 기반 구성 조정 도구

1. 인프라 관리 간소화 : 리소스를 스택 단위로 손쉽게 구성 및 관리 가능

2. 신속한 인프라 복제 : App의 가용성을 높이기 위해 CloudFormation을 이용해 여러 리전에 복제 가능

3. 인프라 변경 사항을 쉽게 제어 및 추적 : 인프라의 프로비저닝을 위한 리소스와 설정이 템플릿에 저장되어 버전 관리 기능을 통해 이전과의 차이점을 추적하여 인프라 변경 사항을 쉽게 알 수 있다.

 

 

템플릿은 JSON과 YAML 형식이 있는데, 수업은 YAML 형식으로 진행. 

 

코드 작성 시

지시자: 값 <- 이 형식

ex) ImageID: ami-~~

-> 인스턴스에 사용할 AMI ID

하나의 지시자에 대해 여러 개의 값이라면

지시자1: 

  - 값1

  - 값2

  - 값3

  지시자2:

    - 값4

    - 값5

들여쓰기는 스페이스 2번, 공백에 민감하니 주의

 

대충 AWS CloudFormation에 사용할 수 있는 지시자와 대응되는 값이 정해져 있다는 의미.

 

템플릿 구성을 보면 크게 2가지의 지시자 그룹으로 나뉜다.

Parameters와 Resources

파라미터에서 리소스에 사용할 변수 지정

필요하다면 관련 문서 읽어보기

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/Welcome.html

 

AWS CloudFormation이란 무엇인가요? - AWS CloudFormation

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

템플릿 관련 가이드

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/CHAP_TemplateQuickRef.html

 

템플릿 코드 조각 - AWS CloudFormation

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com


2~3교시

 

 

Resources에 들어갈 내용에 대한 추가 문서

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/template-reference.html

 

템플릿 참조 - AWS CloudFormation

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

영문 버전으로 Template Reference > Resource and property reference > 하위 항목들에서 여러 정보를 볼 수 있다.

 

 

 

파라미터 섹션의 Description은 설명 부분

Type 필드는 왼쪽에서 오른쪽으로, :: 으로 구분해서 작성

EC2 서비스의 키 페어 부분에서 특정 키를 지정하려면 : AWS::EC2::KeyPair::KeyName

 

리소스 섹션에서 첫 지시자는 사용자가 이름을 붙이는 것이니 자유. 하지만 그 블록 내부의 지시자들은 지정된 것을 사용해야 한다.

yaml 파일 예시

 

이제 AWS 서비스 중 CloudFormation으로 들어가서 스택 생성 클릭

1단계 템플릿 지정

-> 만들어진 파일을 사용할 예정이니 '준비된 템플릿' 체크

-> '템플릿 파일 업로드' 체크

-> '파일 선택' 클릭 > 파일 선택

2단계 스택 세부 정보 지정

-> 스택 이름 지정(필수)

-> 파라미터에서 키 선택, 이것이 Parameters 섹션의 KeyName 하위의 Type에 지정된 KeyName에 들어가는 것이다.

(위 사진의 7번 라인)

3단계 스택 옵션 구성

-> 기본값으로 두고 넘어간다

4단계 검토

-> 따로 건드리는 것 없이 넘어간다

-> 생성

이제 생성이 되고, 생성 중 문제가 생겼다면 '이벤트' 탭으로 가서 어디에서 문제가 발생했는지 알 수 있다.

문제가 발생하면 롤백된다. 생성했던 것 모두 삭제됨.

 

생성 완료가 뜨면 만들어진 내용들을 확인해 보자.

※ 11, 12번 라인에 설명 오류 : 이 파일 안에서 사용되는 이름이지, 인스턴스 이름이 아니다.


4~5교시

 

 

만든 리소스를 삭제하려면 스택을 CloudFormation의 스택 목록에서 지우면 싹 지워진다.

 

이번에는 VPC, 서브넷, 라우팅 테이블, 인터넷 게이트웨이, EC2 생성 실습

 

코드에서 해당 블록(작업)의 이름(=로컬 ID)과 만들어지는 결과물의 이름은 별개라는 것을 명심해야 한다.

콘솔에서 해당 구성을 생성할 때 무엇을 설정했는지 생각하며 코드를 작성할 것!

 

1. VPC 생성 부분

Resources 섹션 하위의 VPC 생성 블록

콘솔에서는 VPC를 들어갈 때 네트워크 쪽으로 들어갔는데, 코드 상으로는 EC2를 통해 들어간다.

 

2. 인터넷 게이트웨이 생성 부분 : 동일하게 Resources 섹션 하위에 있다.

생성과 Attachement가 별개의 블록임에 주의.

Resources 섹션 하위의 IGW 생성 블록

 

3. 서브넷 생성 부분 : 당연히 Resources 섹션 하위에 있다.

서브넷 생성 단계에서는 퍼블릭/프라이빗에 차이가 없다.

 

4. 라우팅 테이블 생성/연동 부분

라우팅 테이블 생성
라우팅 테이블과 서브넷 연동

 

5. 보안 그룹 생성

FromPort, ToPort의 번호에 ' ' 를 씌울지 말지는 별 상관없다.

※ 사진에서 빼먹었는데, Properties 블록 하위에 "VpcId: !Ref CloudVPC"를 추가해야 한다.

 

6. 인스턴스 생성

아까와 동일하지만, 이번에는 내가 생성한 VPC와 서브넷에 인스턴스를 만들 예정이고, 퍼블릭 IP를 할당할 것이다.

기본 서브넷에 생성할 경우, 퍼블릭 IP 할당이 기본값으로 활성화되어 있어 따로 설정이 필요 없었다.

 

  6-1. 생성한 퍼블릭 서브넷에 생성할 경우, 퍼블릭 IP 할당이 비활성화되어 있으니 따로 설정을 해야 한다.

  -> 이전에 한 코드에 VPC, 서브넷 설정 코드를 추가해야 한다.

퍼블릭 인스턴스 생성

인스턴스 생성 시 서브넷은 설정하면서(line 145) VPC는 설정 안 하나요?

-> CloudPublicSubnet 작업에서 CloudVPC를 참조하므로(line 43) 안 해도 된다.

 

  6-2. 생성한 프라이빗 서브넷에 생성할 경우, 어차피 퍼블릭 IP 할당을 비활성화할 예정이다.

프라이빗 인스턴스 생성

 

만들어놓은 스택을 업데이트하는 방법은 내일이나 모레에 진행할 예정.


6~8교시

 

 

이번에는 게이트웨이 엔드포인트 생성 실습

-> 위 실습 코드에 이어서 작성

 

 

스택 업데이트하기

-> 해당 스택 클릭해서 세부 정보로 들어가서 우측 상단의 업데이트 클릭

> 현재 템플릿 교체 > 템플릿 파일 업로드 > 4단계 검토 맨 하단의 변경 세트 미리 보기에서 변경 사항이 뜬다.

> 이제 스택 업데이트

 

 

인터페이스 엔드포인트 생성 실습

인터페이스 엔드포인트 생성

여기까지만 하면 테스트가 안될 것이다.

 

+ 추가로 생각해야 할 점이 있다

 

1. VPC에서 DNS 호스트 이름/DNS 확인 활성화

VPC 블록에 추가

-> 여기까지만 하면 기본 DNS와 내부 DNS의 dig +short 결과가 다르다.

 

2. 프라이빗 DNS 활성화/비활성화에 따라 달라지는 통신 흐름

-> 인터페이스 엔드포인트 설정 시 프라이빗 DNS 활성화 필요.

인터페이스 엔드포인트 블록에 추가

-> 이러면 2가지 dig +short 결과가 같게 나온다.

 

9.17일 수업 3교시 참고


2교시(10:30~11:00) 다시 듣기

'교육' 카테고리의 다른 글

[50일 차] 21.10.01: AWS 10  (0) 2021.10.01
[49일 차] 21.09.30 : AWS 9  (0) 2021.09.30
[47일 차] 21.09.28 : AWS 7  (0) 2021.09.28
[46일 차] 21.09.27 : AWS 6  (0) 2021.09.27
[45일 차] 21.09.24 : AWS 5  (0) 2021.09.24

댓글