본문 바로가기

IaC/Terraform

[Terraform]파일(file, templatefile)을 활용한 리소스 구성하기

테라폼(Terraform)을 사용하여 리소스를 구성할 때 외부 파일을 데이터 소스로 활용하는 방법에 대해 알아보겠습니다. 테라폼에서는 IAM 역할의 정책, EC2의 사용자 데이터(User Data) 등을 정의할 때 JSON, Shell 스크립트 같은 파일을 사용하여 리소스를 보다 효율적으로 관리할 수 있습니다.

왜 파일을 사용하나요?

  • 가독성 향상: 긴 설정 코드를 별도의 파일로 분리하면 테라폼 코드의 가독성이 향상됩니다.
  • 재사용성 증가: 동일한 설정을 여러 리소스에 걸쳐 재사용할 수 있습니다.
  • 관리 용이성: 복잡한 설정 값을 별도의 파일에서 관리함으로써 유지보수가 용이해집니다.

사용 예시: file 함수 사용하기

IAM Role Policy:

IAM 역할에 대한 정책을 JSON 파일로 작성하여 테라폼 코드에 통합할 수 있습니다.

예시: iam_role_policy.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::example_bucket"
    }
  ]
}

테라폼에서 해당 파일을 사용하는 방법:

resource "aws_iam_role_policy" "example" {
  name   = "example_policy"
  role   = aws_iam_role.example.name
  policy = file("${path.module}/iam_role_policy.json")
}

EC2 User Data:

EC2 인스턴스 시작 시 실행되는 사용자 데이터를 Shell 스크립트 파일로 작성할 수 있습니다.

예시: user_data.sh

#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd

테라폼에서 해당 파일을 사용하는 방법:

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  user_data = file("${path.module}/user_data.sh")
  ...
}

file 함수 활용 시 고려사항

  • 파일 경로: 테라폼의 file 함수를 사용할 때, 파일의 상대 경로나 절대 경로를 정확히 지정해야 합니다.
  • 보안: 민감한 데이터를 파일에 저장할 경우 보안에 주의해야 합니다. 가능한 경우 테라폼의 변수나 Vault와 같은 비밀 관리 도구를 사용하세요.
  • 파일 유지: 리소스와 관련된 파일은 테라폼 코드와 함께 안전하게 보관 및 관리되어야 합니다.

사용 예시: templatefile 함수 사용하기

templatefile 함수는 템플릿 파일 내의 플레이스홀더를 실제 값으로 대체하여 구성 파일을 동적으로 생성하는 데 유용합니다.

EC2 User Data with Template:

EC2 인스턴스에 대한 사용자 데이터를 템플릿 파일로 작성하고, 필요한 변수를 동적으로 삽입할 수 있습니다.

예시: user_data.sh

#!/bin/bash
echo "Welcome to ${instance_name}"
yum update -y
yum install -y httpd
systemctl start httpd

여기서 **${instance_name}**은 동적으로 대체될 플레이스홀더입니다.

테라폼에서 templatefile 함수를 사용하는 방법:

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"

  user_data = templatefile("${path.module}/user_data.tpl", {
    instance_name = "MyEC2Instance"
  })
  ...
}

이 예시에서 templatefile 함수는 user_data.tpl 파일을 사용하고, instance_name 변수에 "MyEC2Instance"라는 값을 전달하여 최종적인 사용자 데이터를 생성합니다.

templatefile 함수 활용 시 고려사항

  • 변수 대체: 템플릿 파일 내의 모든 변수는 적절한 값으로 대체되어야 합니다.
  • 템플릿 파일 관리: 템플릿 파일은 테라폼 코드와 함께 관리되어야 하며, 파일 내용이 변경될 경우 테라폼 코드에도 영향을 미칠 수 있습니다.
  • 플레이스홀더 형식: 템플릿 파일 내의 플레이스홀더는 ${...} 형식을 사용합니다.

templatefile 함수를 사용하면 보다 복잡하고 동적인 구성 파일을 쉽게 관리할 수 있습니다. 파일 내용을 필요에 따라 조정하여 테라폼 코드의 유연성과 재사용성을 높일 수 있습니다.