Terraform 기본 리소스 생성

LinuxBeginner
지금 연습하기

소개

Terraform 은 HashiCorp 에서 만든 오픈 소스 Infrastructure as Code (IaC) 도구입니다. 선언적 구성 언어 (declarative configuration language) 를 사용하여 데이터 센터 인프라를 정의하고 프로비저닝할 수 있습니다. 즉, 구성 파일에 원하는 인프라를 설명하면 Terraform 이 해당 상태에 맞게 리소스를 생성, 업데이트 또는 삭제하는 방법을 알아냅니다.

핵심 Terraform 워크플로우는 세 가지 주요 단계로 구성됩니다.

  1. 작성 (Write): 코드로 인프라를 작성합니다.
  2. 계획 (Plan): 적용하기 전에 변경 사항을 미리 확인합니다.
  3. 적용 (Apply): 인프라를 프로비저닝하고 관리합니다.

이 랩에서는 매우 간단한 리소스인 로컬 파일 (local file) 을 생성하여 이 전체 워크플로우를 따라가게 됩니다. local 프로바이더를 사용하는 것은 클라우드 프로바이더에 대한 자격 증명 없이도 Terraform 의 메커니즘을 학습하는 훌륭한 방법입니다. 파일을 정의하고, 생성 계획을 세우고, 변경 사항을 적용하고, 결과를 확인하게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 98%입니다.학습자들로부터 97%의 긍정적인 리뷰율을 받았습니다.

main.tf 에 local_file 리소스 정의하기

이 단계에서는 Terraform 구성 파일에 리소스를 정의하는 것으로 시작합니다. 모든 Terraform 구성은 .tf 확장자로 끝나는 파일에 작성됩니다. 기본 구성 파일은 일반적으로 main.tf라고 명명됩니다.

resource 블록은 인프라 객체를 선언하는 기본 구문입니다. 이는 주어진 유형 (예: local_file) 과 주어진 로컬 이름 (예: example) 을 가진 리소스를 정의합니다. 유형과 이름의 조합은 모듈 내에서 고유해야 합니다.

먼저, nano 텍스트 편집기를 사용하여 ~/project 디렉터리에서 main.tf 파일을 엽니다.

nano main.tf

이제 파일에 다음 코드를 추가합니다. 이 코드는 local_file 유형의 리소스를 정의하고 로컬 이름으로 example을 지정합니다. 현재 리소스 블록은 비어 있습니다.

resource "local_file" "example" {
}

코드를 추가한 후, Ctrl+X를 누른 다음 Y, 마지막으로 Enter를 눌러 nano에서 파일을 저장하고 종료합니다.

리소스 블록에 filename 및 content 지정하기

이 단계에서는 생성하려는 파일의 속성을 지정하기 위해 리소스 블록에 인자 (argument) 를 추가합니다. 인자는 리소스 블록 내에서 구성을 정의하는 키 - 값 쌍입니다. local_file 리소스의 경우 가장 중요한 두 가지 인자는 filenamecontent입니다.

  • filename: 생성될 파일의 경로입니다.
  • content: 파일에 작성될 내용입니다.

다시 nanomain.tf 파일을 엽니다.

nano main.tf

아래와 같이 filenamecontent 인자를 포함하도록 local_file 리소스 블록을 수정합니다.

resource "local_file" "example" {
  content  = "Hello, Terraform!"
  filename = "${path.module}/hello.txt"
}

여기서 Terraform 에게 현재 프로젝트 디렉터리에 hello.txt라는 파일을 생성하도록 지시하고 있습니다. ${path.module}은 현재 모듈의 경로로 해석되는 Terraform 의 특수 표현식이며, 이 경우 ~/project가 됩니다. 파일의 내용은 문자열 "Hello, Terraform!"이 됩니다.

Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다.

Terraform 초기화 및 변경 사항 미리보기

이 단계에서는 먼저 Terraform 프로젝트를 초기화한 다음 terraform plan 명령을 실행하여 실행 계획 (execution plan) 을 생성합니다.

변경 사항을 계획하기 전에 프로젝트를 초기화해야 합니다. terraform init 명령은 구성을 스캔하고 필요한 프로바이더 (이 경우 local_file용) 를 다운로드하며 백엔드를 설정합니다.

터미널에서 먼저 terraform init을 실행합니다.

terraform init

초기화가 성공적으로 완료되면 terraform plan을 실행합니다. 이 명령은 변경 사항에 대한 "드라이 런 (dry run)"을 제공하므로 Terraform 워크플로우의 중요한 부분입니다. 실제로 변경 사항을 적용하지 않고 Terraform 이 인프라에 대해 수행할 작업을 보여줍니다. 이를 통해 의도된 작업을 검토하고 확인할 수 있습니다.

terraform plan

Terraform 은 구성 파일을 읽고 현재 인프라 상태 (현재 비어 있음) 와 비교합니다. 그런 다음 조치 계획을 표시합니다. 생성될 리소스가 하나 있음을 나타내는 아래와 유사한 출력을 보게 될 것입니다.

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

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

resource "local_file" "example" 옆의 + 기호는 이 리소스가 생성될 것임을 나타냅니다. 출력에는 새 파일에 설정될 모든 속성이 자세히 나와 있습니다.

리소스 생성을 위해 terraform apply 실행

이 단계에서는 terraform apply 명령을 사용하여 변경 사항을 적용함으로써 실제로 파일을 생성합니다. 이 명령은 terraform plan 출력에서 제안된 작업을 실행합니다.

기본적으로 terraform apply는 진행하기 전에 다시 계획을 보여주고 상호 확인 (interactive confirmation) 을 요청합니다. 랩 (lab) 이나 자동화에 유용한 비대화형 (non-interactive) 으로 만들려면 -auto-approve 플래그를 사용할 수 있습니다.

터미널에서 다음 명령을 실행합니다.

terraform apply -auto-approve

이제 Terraform 이 계획을 실행합니다. 출력에는 먼저 계획이 다시 표시된 다음 적용 진행 상황이 표시됩니다. 완료되면 확인 메시지가 표시됩니다.

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.
local_file.example: Creating...
local_file.example: Creation complete after 0s [id=42086c02e03bf671ddf621ed9922f52f2c7a605c]

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

"Apply complete!" 메시지는 Terraform 이 구성에 정의된 대로 리소스를 성공적으로 생성했음을 확인합니다.

파일 시스템에서 생성된 파일 확인

마지막 단계에서는 Terraform 이 로컬 파일 시스템에 지정된 대로 파일을 성공적으로 생성했는지 확인합니다. local_file 리소스를 사용했으므로 결과는 Terraform 구성 파일과 함께 프로젝트 디렉터리에 실제 파일이 생성된 것입니다.

먼저 ls 명령을 사용하여 현재 디렉터리의 파일을 나열합니다. 이제 Terraform 구성 파일과 함께 hello.txt가 보여야 합니다.

ls

예상 출력:

hello.txt  main.tf  terraform.tfstate

다음으로 cat 명령을 사용하여 새로 생성된 hello.txt 파일의 내용을 표시합니다.

cat hello.txt

main.tf에서 정의한 내용을 보게 될 것입니다.

Hello, Terraform!

이는 Terraform 구성이 성공적으로 적용되었으며 코드로 정의한 대로 리소스가 정확하게 생성되었음을 확인시켜 줍니다.

요약

축하합니다! 첫 번째 Terraform 프로젝트를 성공적으로 완료했습니다.

이 랩 (lab) 에서 Terraform 의 기본 워크플로우를 배웠습니다.

  1. 작성 (Write): main.tf 구성 파일에 local_file 리소스를 정의했습니다.
  2. 계획 (Plan): terraform plan을 사용하여 아무것도 변경하지 않고 파일 생성 미리보기를 수행했습니다.
  3. 적용 (Apply): terraform apply를 사용하여 계획을 실행하고 로컬 파일 시스템에 파일을 생성했습니다.

로컬 파일을 생성하는 이 간단한 예제는 Infrastructure as Code(코드형 인프라) 의 핵심적인 강력함을 보여줍니다. 구성 파일에 리소스의 원하는 상태를 선언했고, Terraform 이 해당 상태를 달성하기 위한 로직을 처리했습니다. 이러한 동일한 원칙은 클라우드에서 가상 머신, 네트워크, 데이터베이스와 같은 더 복잡한 인프라를 관리할 때도 적용됩니다.