ysuekkom의 IT study note

[terraform 따라하기] IaC로 AWS 인프라 구축하기 본문

DevOps/terraform

[terraform 따라하기] IaC로 AWS 인프라 구축하기

ysuekkom 2022. 12. 15. 23:40

IaC(Infrastrucure as Code)?

코드로 인프라 스트럭처를 생성/관리 하는 것을 말하며, 대표적으로 테라폼의 HCL언어를 사용해 클라우드 자원을 생성함

 *HCL(Hashicorp Configuration Language): 테라폼에서의 모든 설정과 리소스 선언/정의에 사용되며, 확장자는 .tf를 사용함


terraform?

*Provisioning: 프로세스 및 서비스를 실행하기 위한 준비 단계로, 네트워크 컴퓨팅 자원의 할당, 구축 및 각 자원의 의존성 체크 등의 단계로 나뉘어짐

*Provider: 테라폼과 외부 서비스(AWS, GCP 등)을 연결해주는 모듈로,  테라폼을 이용하여 각 클라우드 서비스의 자원을 생성하기 위해서 가장 먼저 셋업 해야 함

 *resource: 특정 프로바이더가 제공해주는 자원이며, 프로바이더는 리소스 타입을 제공하고 이를 이용하여 클라우드 리소스를 생성/조작/삭제 등 관리가 가능함

 

terraform 동작원리를 이해하는 것이 가장 중요함*

terraform으로 작성되는 리소스들은 .tf 파일에 선언되는데, 

1. 생성/수정하고자 하는 리소스를 작성한 뒤, 2. 각 프로바이더에 생성하기 위한 상태를 확인(생성되기 전 예비)한다. 그 이후, 3. 실제 프로바이더 상태에 리소스를 생성하는 과정을 거치게 된다.

 

1번 즉 개발자가 작성한 로컬 코드와 실제 프로바이더의 리소스(코드)상태의 일치함이 중요하다.

궁극적으로 실제 인프라와 백엔드에 저장된 상태가 일치하도록 만들고, 유지할 수 있도록 한다.

1~2: terraform plan

3: terraform apply

 

IaC와 Terraform에 대한 이해는 Hashicorp사 링크의 영상과 글을 참고하면 좋을 것! 

 

 

 

사전 작업-terraform/aws cli 다운로드

아래 링크에서 OS에 맞는 zip 파일을 링크 복사, 붙여넣기를 통해 다운로드/unzip 파일명을 통해 압축을 풀어준다. 

https://releases.hashicorp.com/terraform/0.12.29/

 

Terraform v0.12.29 Binaries | HashiCorp Releases

 

releases.hashicorp.com

 

terraform 바이너리 확인

 

AWS CLIv2 설치 완료

 

terraform /usr/local/bin으로 이동시켜주고, 사용완료한 zip파일은 삭제해준다.

 

aws configure 작업(액세스키와 시크릿키, 리전 등 입력)

 

 

따라하기 시작!

ec2 인스턴스를 생성 및 ssh로 연결 후 작업

디렉터리를 생성하여 provider.tf를 생성, 내용을 작성해준다

 * resource "aws_vpc" "main"{

        cidr_block = "10.0.0.0/16"

    }

 >>순서대로, aws(프로바이더)에서 제공하는 리소스(vpc) 타입, 리소스의 임의 name로 테라폼 코드의 다른 코드에서 참조시 사용된다.

 

그리고나서 terraform paln 실행 시, 에러 --> terraform init가 먼저!

Error메시지가 뜨면 에러메시지를 확인하여  반영하기

 

terraform plan

>>선언한 자원들의 실제 생성 가능 여부를 체크하는 단계로, terraform apply전 항상 plan으로 체크할 것.

이 단계에서 실제로 작성한 코드(리소스)들이 프로바이더에 적용되었을 때 terraform에서 수행할 내용에 대해 상세히 피드백을 받을 수 있음. 즉 생성 예정인 리소스들에 대한 체크를 한다고 생각.

+는 신규로 생성되었다는 의미, ~는 업데이트 되었다는 의미, - destroy는 삭제 의미(아래 사진은 신규로 추가만 되었기에 변경사항없이 +만 확인 가능함)

>Plan의 결과가 1 to add, 0 to change, 0 to destroy로 확인 가능

 

 

terraform apply

선언한 리소스들을 plan으로 확인 후, apply를 통해 실제 프로바이더 서비스에 적용하여 생성하는 단계

>>성공 시, 실제 aws console에서 생성된 vpc를 확인 할 수 있음

 

 

aws console에 접속하여 선언한 리소스가 생성되었는지  확인

 

 

 

vpc에 이어 자원 생성하기 계속

subnet 생성하기 >  public, private

내부통신을 위한 private subnet 1개, 외부 통신을 위한 public subnet 을 각각 선언해주고, plan, apply해 준다

 

igw, nat(eip 포함) 생성하기 

 

nat gateway 생성은 시간 오래걸림

 

 

>>각 리소스들을 선언한 코드

 

 

aws console에서 확인한 생성된 vpc, subnet, igw, nat 

 

 

 

실습 후, 각 자원들은 반드시** 삭제해주어야한다(provider.tf에서 주석처리로 destroy 가능)

본 실습은 테스트용도로 리소스 정보를 공개한 것이지만, 공개되지 않도록 주의할 것!