[Infra] Terraform 입문
개발자가 매번 AWS 리소스를 관리하기 위해 AWS Console을 사용하는 것은 번거로운 일입니다.
코드로 AWS 리소스를 관리하는 방법이 있는데 Terraform 과 AWS CloudFormation 이 있습니다.
그 중 AWS CloudFormation에 대해서는 아직 학습을 못해서 차이점에 대해서는 학습 후 추가하겠습니다.
이 글에서는 Terraform의 입문을 중심으로 다루겠습니다.
Terraform의 경우는 다양한 인프라 리소스를 관리할 수 있습니다.
예를들어 AWS, Azure, Google Cloud Platform .. 등등
운영체제는 Mac/OS를 기준으로 설명하겠습니다. 다른 운영체제에 대한 것은 공식 사이트의 튜토리얼에 친절하게 나와있습니다.
Terraform 설치
우선 Terraform 을 설치합니다.
설치에는 두 가지 방법이 있습니다.
1. homebrew 활용
- 먼저 'brew tap hashicorp/tap ' 명령어로 terraform hashicorp의 패키지 저장소를 homebrew에 추가합니다.
- 'brew install terraform' 명령어로 terraform 을 설치합니다.
- 'terraform -help' 명령어가 아래와 같이 정상적으로 실행되는지 확인합니다. (정상적으로 설치 완료)
2. 공식 홈페이지에서 압축된 파일(zip)을 다운로드
homebrew 를 사용하지 않고 설치하는 방법입니다.
https://www.terraform.io/downloads
- 위 링크에서 설치 파일을 다운받아 주시고 압축을 풀어줍니다.
- 터미널에서 'echo $PATH' 명령어로 '/usr/local/bin' 폴더가 포함되어 있는지 확인합니다.
- 'mv [압축해제한폴더] /usr/local/bin/' 명령어로 압출을 풀어서 나온 terraform 폴더를 '/usr/local/bin/' 위치로 옮겨줍니다.
- terraform -help 명령어가 정상적으로 실행되는지 확인합니다. (정상적으로 설치 완료)
Terraform 으로 Docker에 Nginx 띄우기
사전 준비로 Docker Desktop이 설치되어 있어야합니다.
Terraform 코드를 활용해서 Docker에 Nginx를 띄워보겠습니다.
이번 작업의 목적은 간단하게 terraform을 사용해보면서 어떤 흐름으로 리소스를 생성하는지 느껴보는 것입니다.
1. Docker Desktop을 실행 터미널에서 다음 명령어를 실행합니다.
- open -a Docker
2. terraform 파일을 생성할 폴더를 생성하고 해당 폴더로 이동합니다.
- mkdir learn-terraform-docker-container & cd learn-terraform-docker-container
3. 폴더에 terraform 소스 코드를 쓸 파일을 생성합니다. (main.tf)
- vi main.tf
4. 아래의 terraform 코드를 main.tf에 작성합니다.
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 2.13.0"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.latest
name = "tutorial"
ports {
internal = 80
external = 8000
}
}
5. 이제 main.tf파일이 있는 위치에서 'terraform init' 명령어를 사용해 Terraform이 Docker와 상호작용 할 수 있도록 하는 플러그인을 설치하도록 합니다.
6. 'terraform plan'명령어를 사용하면 현재 대상이 되는 인프라의 변경(생성/수정/삭제) 사항들을 볼 수 있습니다.
7. 'terraform apply' 명령어로 변경 사항들을 적용할 수 있습니다. 즉, 리소스를 생성하는 것입니다.
(주의! 가끔 plan 과 apply 의 내용이 다를 수 있다고 합니다.)
apply 명령어를 사용하면 아래와 같이 물어봅니다.
변경사항을 적용할지 물어보는 것인데 'yes' 를 입력하면 적용됩니다.
여기까지 정상적으로 적용됐다면 port 번호 8000번에 nginx 가 실행되고 있습니다.
http://localhost:8000 으로 접속했을 때 아래의 화면이 나오면 됩니다.
만들었던 리소스를 삭제하고 싶다면?
terraform 파일이 있는 위치에서 'terraform destroy' 명령어를 사용하면 만들었던 리소스를 삭제할 수 있습니다.
명령어를 사용하면 'terraform apply'를 사용했을 때처럼 모든 변경사항을 보여주고 정말로 모든 리소스를 삭제할건지 물어봅니다.
역시나 'yes' 명령어로 리소스 제거 작업을 수행시킬 수 있습니다.
참고자료
- https://learn.hashicorp.com/collections/terraform/aws-get-started
-
-
-