본문 바로가기
terraform

[terraform] 테라폼 시작하기 (terraform tutorial, 테라폼 예제)

by devjh 2022. 4. 22.
반응형

aws를 잘 몰라도 테라폼을 할 수 있도록 간단한 예제 게시글을 작성합니다

 

vpc셋팅같이 aws 지식이 없을때 접근하기 힘든 리소스들 보다는 쉬운 s3버킷만 가지고 테라폼 사용법을 정리할 예정입니다.

 

이번 게시글에서는 테라폼을 aws와 연동하고 s3버킷을 생성하는 방법에 대해서 정리합니다.

aws계정에 테라폼을 이용해 버킷을 생성하고 삭제하는 예제입니다.

 

테라폼을 사용하려면 테라폼과 aws cli를 설치해야 합니다.

패키지매니저의 도움을 받거나 공식홈페이지에 가서 설치합니다

 

예제 소스코드는 아래 깃헙 레포에서 확인할 수 있습니다.(main 브랜치)

 

GitHub - jaeho310/terraform-study

Contribute to jaeho310/terraform-study development by creating an account on GitHub.

github.com

 

1. s3 버킷이란?

s3는 aws의 object 단위의 파일 서버이며 버킷은 s3의 namespace정도로 생각할 수 있습니다.

IDC 환경의 minio 랑 유사합니다.

(단일서버 환경이라면 백엔드 애플리케이션 내부 등 서버PC에 파일을 넣어놓을 수도 있지만, 여러 서버에서 접근해야 한다면 여러 서버에서 공유할 수 있는 파일서버가 필요합니다)

 

2. main.tf 작성

디렉토리를 하나 생성하고 main.tf 파일을 생성해서 아래의 정보를 입력합니다.

# provider는 인프라의 종류를 의미합니다
provider "aws" {
  # profile이 있다면 profile을 입력해주고 없다면 주석처리합니다.
  # 해당설정이 있을경우에는 ~/.aws/config의 프로필을 따라가고
  # 해당설정이 없는경우 ~/.aws/credentials를 따라갑니다.
  profile = "your profile"
  region = "ap-northeast-2"
}

# resource는 인프라 자원을 의미합니다
# aws_s3_bucket이라는 인프라 자원의 이름을 terraform_bucket로 설정(내 소스코드에서 사용되는 리소스의 이름)
# bucket의 이름은 my-terraform-bucket-01으로 생성하라는 설정입니다
resource "aws_s3_bucket" "terraform_bucket" {
  bucket = "my-terraform-bucket-01"
}

테라폼의 시작은 provider와 resource 입니다.

provider에 aws를 사용한다고 명시해주고,

resource에 s3 버킷을 관리할꺼라고 작성해줍니다.

버킷이름은 resource에 bucket필드에 작성해주면 됩니다.

3. terraform init

$ terraform init

provider와 resource를 작성한 위치에서 terraform init 을 입력합니다.

terraform init을 하게되면 provider, module, state 등의 설정을 진행합니다.

(대표적으로 terraform init을 하면 .terraform 디렉토리에 provider(aws)의 sdk가 생성됩니다.)

 

인증정보가 없다는 에러가 뜬다면

$ aws configure

을 입력해 access key, token 등의  내용을 입력해줍니다. 

 

AWS 계정 루트 사용자 - AWS Identity and Access Management

액세스 키를 삭제하는 대신에 비활성 상태로 표시할 수 있습니다. 이렇게 하면 키 ID나 보안 키를 변경하지 않고도 나중에 액세스 키를 다시 사용할 수 있습니다. 비활성 상태에 있는 동안에는 AW

docs.aws.amazon.com

테라폼은 bucket명의 중복을 허락하지 않습니다.(내 계정에 test라는 버킷이 없어도 누군가 해당 버킷명을 사용하고있다면 생성불가)

4. terraform plan

terraform plan을 입력하면 테라폼코드가 적용되면 어떤 변경사항이 일어날지 확인해줍니다.

$ terraform plan

~~~~~~
Plan: 1 to add, 0 to change, 0 to destroy.

버킷을 하나 생성하는 테라폼 코드이므로 하나의 리소스가 추가될꺼라고 나옵니다.

 

5. terraform apply

terraform apply는 실제 인프라에 적용하는 명령어 입니다.

$ terraform apply

~~~~~
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

 

6. aws console에서 확인

콘솔에 들어가보면 s3 버킷이 생성된걸 확인할 수 있습니다.

 

7. state 파일 확인

인프라에 정의된 resource는 state 파일에 정의됩니다(state 파일과 테라폼코드를 일치시키도록 해야합니다)

현재는 따로 설정을 하지 않아 로컬에 방금 생성된 terraform.tfstate파일에서도 확인할 수 있습니다.

테라폼은 여러사람이 작업해야 하므로 로컬에 state파일을 두지는 않는 경우가 많습니다.

(aws s3 버킷에 tfstate파일로 저장하는게 일반적이며 backend라고 합니다.)

 

tfstate 파일이 어디에 있던간에 아래의 명령어를 통해 확인하면 편리합니다.

 

list 옵션을 통해 현재 state파일이 가지고있는 리소스를 확인할 수 있습니다.

$ terraform state list                                                                                                                                                    ok | 5s 
aws_s3_bucket.terraform_bucket

 

위에서 나온 결과값을 show 옵션의 아규먼트로 보내면 state파일의 정보를 확인할 수 있습니다.

$ terraform state show aws_s3_bucket.terraform_bucket

 

줄여서 이런식으로 쓸 수도 있습니다.(단건인 겨우)

$ terraform state show $(terraform state list | grep terraform_bucket)

8. 버킷 삭제하기

# provider는 인프라의 종류를 의미합니다
provider "aws" {
  # profile이 있다면 본인의 프로필을 설정해주시고 없다면 주석처리합니다.
  # 해당설정이 있을경우에는 .aws/config의 프로필을 따라가고
  # 해당설정이 없는경우 .aws/credentials를 따라갑니다.
  profile = "playground"
  region = "ap-northeast-2"
}

# resource는 인프라 자원을 의미합니다
# aws_s3_bucket이라는 인프라 자원의 이름을 my_s3_study로 설정
# bucket의 이름은 tmy-terraform-bucket-01으로 생성하라는 설정입니다
#resource "aws_s3_bucket" "my_s3_study" {
#  bucket = "my-terraform-bucket-01"
#}

리소스를 주석처리하고 terraform plan, terraform apply를 하면

테라폼으로 생성했던 리소스는 삭제됩니다

 

9. 마치며

테라폼은 hcl syntax적 특징을 가진 언어로 변수가 존재합니다
이를 활용하면 하나의 리소스 틀을 만들어 변수를 바꿔 넣어 사용이 가능합니다.

아래는 변수사용법을 정리한 게시글입니다.

 

[terraform] terraform variable 사용법(테라폼 변수 사용법)

이번 게시글에서는 terraform variable 테라폼 변수 사용법에 대해 정리합니다. 1. terraform variable이란 테라폼은 hcl syntax적 특징을 가진 언어로 변수가 존재합니다. 변수를 주입하는 방법에도 여러가지

frozenpond.tistory.com

 

반응형

댓글