CloudNet@ 팀의 가시다님께서 Leading 하시는 Terraform T101 Study 내용 요약
해당 Terraform Study 는 Terraform Up and Running 책을 기반으로 진행 중입니다.
1. EC2 Instance 배포
EC2 Instance는 AWS에서 사용하는 기본적인 IaaS 서비스입니다.
편의를 위해 Default VPC를 사용할 예정이므로, Default VPC가 없다면 실습 전 생성해 줍니다.
1.1. Main.tf 작성
main.tf 파일 생성 후 아래의 내용을 넣고 실행해봅니다.
// main.tf
// provider 를 통해 aws를 사용할 것임을 선언
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
// ami 는 aws에서 사용하는 서버 이미지
ami = "ami-0c76973fbe0ee100c"
// instance type은 해당 서버의 성능을 나타낸다.
instance_type = "t2.micro"
}
1.2. Terraform 실행
아래의 명령어를 통해 Terraform 을 실행해봅니다.
terraform init && terraform plan && terraform apply -auto-approve
문제없이 배포가 되었다면 아래와 같은 화면이 보일 것입니다.
실제로도 잘 배포가 되었을지 콘솔에서 확인해봅니다.
EC2 Instance가 잘 실행되고 있는 것을 확인했습니다.
이제 다시 Terraform 명령어를 사용해서 배포한 EC2를 삭제해봅니다.
terrafrom destroy -auto-approve
문제없이 수행되었다면 마찬가지로 아래와 같은 화면이 보일 것입니다.
굉장히 간단하게 AWS EC2 서버를 배포하고 삭제했습니다.
그럼 방금 진행한 일련의 과정 속에 어떠한 일들이 있었는 지 하나씩 자세하게 살펴보겠습니다.
2. Terraform 파헤치기
2.1. tf 파일
.tf 는 Terraform 에서 사용하는 확장자명
Terraform은 HashiCorp 사에서 Go 언어를 기반으로 개발한 오픈소스 프로비저닝 도구라고 앞서 설명하였습니다.
Terraform은 HCL 이라고 하는 언어로 동작하게 되는데, 이 때 HCL 이 동작할 수 있는 파일이 바로 .tf 확장자가 붙은 파일입니다.
Ex) Python > .py 파일 , JavaScript > .js 파일 , Terraform > .tf 파일 !!
그래서 처음에 main.tf 파일을 만들어서 terraform 을 실행시켜 주었습니다.
그렇다면 main.tf 안의 내용은 어떻게 구성했던 것일까요??
2.2. Terraform Resource
provider 는 어떤 클라우드 리소스 공급자를 사용할 것인 지 정하는 것입니다. (AWS, GCP 등)
// main.tf
resource "aws_instance" "example" {
// ami 는 aws에서 사용하는 서버 이미지
ami = "ami-0c76973fbe0ee100c"
// instance type은 해당 서버의 성능을 나타낸다.
instance_type = "t2.micro"
}
위 리소스는 아래와 같이 해석할 수 있습니다.
AWS 라는 Provider가 제공하는,
Instance 라는 Resource Type을 생성하겠다.
여기서 생성하는 AWS_Instance 에는 Example 이라는 이름을 부여할 것이다. 해당 이름은 마음대로 지정해줘도 되지만 생성할 리소스가 어떤 리소스인지 구분될 수 있는 이름을 부여해주는 것이 좋습니다.
Example 이라는 Instance는 "ami-0c76973fbe0ee100c" 라는 ami 를 이용해 생성할 것이며, "t2.micro" 유형으로 생성할 것이다.
실제로는 이 외에도 굉장히 많은 config 가 필요할 것이므로 아래 문서에서 지원하는 Config 유형을 확인해보는 것이 좋습니다.
2.3. Terraform Command
Terraform Resource 가 어떻게 구성되는 지 알아보았다면,
이제 Resource를 실제로 생성하고 삭제하는 Terraform 명령어를 살펴보겠습니다.
Terraform 은 기본적으로 init, plan, apply, destroy 의 수명 주기를 가지고 있습니다.
Terraform init
해당 Terraform 코드가 어떤 공급자를 사용하는지 확인하고, 공급자에 대한 코드를 다운로드하는 작업 실행
또한, Backend 및 Lock 상태 확인 등의 작업을 실행
저는 aws 공급자를 사용하기에 실제로 aws 공급자 에 대한 정보를 다운로드 했는 지 확인해보겠습니다.
해당 내용은 terraform init 을 실행하면 생성되는 .terraform 디렉토리를 확인하면 됩니다.
Terraform plan
테라폼을 실제 변경하기 전에 테라폼이 수행할 작업 확인 가능
plan 으로 변경되는 리소스에 대한 결과값은+, -, ~ 등으로 표현됨 (Linux 의 Diff 명령어와 유사)
실제 리소스를 생성하지 않고 코드를 스캔하는 작업이므로, 여러번 수행해도 리소스에는 영향을 미치지 않음
위 사진처럼 terraform plan 명령어를 입력했을 때, 변경되는 리소스를 확인할 수 있습니다.
해당 내역은 -out={file} 옵션으로 별도 출력할 수도 있습니다.
terraform plan -out=test.tf
Terraform apply
테라폼 리소스를 실제로 배포하는 작업
apply 명령어를 실행하면 실제로 배포를 수행할 것인지 묻는 메시지가 출력되는데, 이를 피하기 위해서 -auto-apply 옵션을 함께 사용할 수 있습니다.
Terraform destroy
terraform apply 명령어로 생성한 리소스를 삭제하는 작업
apply 작업과 마찬가지로 실제 삭제를 수행할 것인지 묻는 메시지가 출력되는데,
이를 피하기 위해서 -auto-apply 옵션을 함께 사용할 수 있습니다.
Terraform 을 통해 리소스를 생성하는 법과 Terraform 명령어에 대해 알아보았습니다.