웹사이트 검색

Terraform 모듈을 만드는 방법


이 기사에서는 Terraform에서 재사용 가능한 모듈을 생성하는 방법을 살펴봅니다. 모듈을 사용하면 코드 중복을 피할 수 있습니다. 이는 동일한 코드를 사용하여 동일한 유형의 리소스를 생성할 수 있음을 의미합니다. 모듈을 사용하면 동일한 유형의 여러 리소스를 만들기 위해 코드를 복사하여 붙여넣을 필요가 없습니다.

예를 들어 Terraform 모듈 내부에 코드를 넣고 스테이징 및 프로덕션 환경에서 해당 모듈을 재사용할 수 있습니다. 이렇게 하면 코드를 여러 번 작성하는 대신 두 환경에서 동일한 모듈의 동일한 코드를 재사용할 수 있습니다.

이 글에서는 S3 Bucket을 생성하는 모듈을 예로 들어 작성하겠습니다.

전제 조건

  1. Terraform에 대한 기본적인 이해.
  2. 시스템에 Terraform이 설치되어 있습니다.
  3. AWS 계정(계정이 없는 경우 생성).
  4. AWS IAM 사용자의 access_key 및 secret_key. (AWS에서 access_key 및 secret_key를 사용하여 IAM 사용자를 생성하는 방법을 알아보려면 여기를 클릭하십시오.)

우리가 할 일

  1. 자체 모듈 작성
  2. Terraform 모듈을 사용하여 S3 버킷을 생성합니다.
  3. Terraform 모듈을 사용하여 생성된 리소스를 삭제합니다.

자체 Terraform 모듈 작성

terraform \main.tf\ 파일과 모듈을 가질 수 있는 전용 디렉토리를 만듭니다.

다음 명령을 사용하여 디렉토리를 생성합니다.

mkdir -p 모듈/aws-s3

modules/aws-s3 아래에 main.tf 파일을 생성하고 S3 버킷 생성을 위한 모듈로 사용할 다음 코드 블록을 복사하여 붙여넣습니다.

vim 모듈/aws-s3/main.tf

resource "aws_s3_bucket" "s3_bucket" {
  bucket = var.bucket_name
  acl    = "public-read"
  policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::${var.bucket_name}/*"
            ]
        }
    ]
}
EOF 
  website {
    index_document = "index.html"
    error_document = "error.html"
  }
   tags = var.tags
}


\modules/aws-s3/variables.tf\에서 필수 변수를 선언합니다. 원하는 경우 변수에 기본값을 지정할 수 있습니다. 다음 코드 블록을 복사하여 붙여넣어 파일을 만듭니다.

vim modules/aws-s3/variables.tf

variable "bucket_name" {
  description = "Name of the s3 bucket. Must be unique."
  type = string
}

variable "tags" {
  description = "Tags to set on the bucket."
  type = map(string)
  default = {}
}

이제 위의 단계에서 정의한 모듈을 호출할 \main.tf\ 파일을 만듭니다. 모듈을 호출한다는 것은 해당 모듈의 내용을 변수에 대한 특정 값이 있는 구성에 포함하는 것을 의미합니다. 모듈은 module 블록을 사용하여 다른 모듈 내에서 호출됩니다.

vim main.tf

provider "aws" {
      region     = "${var.region}"
      access_key = "${var.access_key}"
      secret_key = "${var.secret_key}"
}


module "website_s3_bucket" {
  source = "./modules/aws-s3"

  bucket_name = "${var.bucket_name}"

  tags = {
    Terraform   = "true"
    Environment = "dev"
  }
}

모든 모듈에는 소스 인수가 필요합니다. 해당 값은 모듈 구성 파일의 로컬 디렉토리 경로 또는 Terraform이 다운로드하여 사용해야 하는 원격 모듈 소스입니다.

동일한 소스 주소를 여러 모듈 블록에 지정하여 가능한 다른 변수 값을 사용하여 내부에 정의된 리소스의 여러 복사본을 만들 수 있습니다.

변수 정의를 포함할 \variables.tf\를 만듭니다. 이것은 AWS \access_key\ 및 \secret_key\와 함께 모듈에 전달해야 하는 기본값을 보유합니다.

vim variables.tf

variable "access_key" { description = "Access key to AWS console" } variable "secret_key" { description = "Secret key to AWS console" } variable "region" { description = "Region of AWS VPC" } variable "bucket_name" { description = "(Required) Creates a unique bucket name" type = "string" default = "test-bucket-rahul-delete" }

이제 AWS 사용자 자격 증명을 보관할 \terraform.tfvars\를 생성합니다. IAM 사용자의 키로 다음 키를 변경해야 합니다. 이러한 키를 지정하기 전에 AWS 콘솔에서 키를 생성해야 하며 이 키를 누구와도 공유하지 마십시오.

vim terraform.tfvars

region = "eu-west-3"
access_key = "AKIAQ6GAIA5XX54GLLNG"
secret_key = "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"

Terraform 모듈을 사용하여 S3 버킷 생성

다음 명령을 실행하기 전에 유효한 access_key 및 secret_key를 구성했는지 확인하십시오.

사용할 첫 번째 명령어는 terraform init입니다. 이 명령은 구성 내에서 사용되는 공급자에 대한 플러그인을 다운로드하고 설치합니다. 우리의 경우 AWS입니다.

 terraform init

두 번째로 사용할 명령은 terraform plan입니다. 이 명령은 인프라에서 발생할 변경 사항을 확인하는 데 사용됩니다.

 terraform plan

terraform apply 명령은 main.tf 파일에 언급된 AWS에 리소스를 생성합니다. 리소스를 생성하기 위한 입력을 제공하라는 메시지가 표시됩니다.

terraform apply

위 명령어를 실행하면 성공적으로 완료되면 1개의 새로운 리소스가 추가되고 0개의 리소스가 제거된 것을 확인할 수 있습니다.

AWS S3 콘솔로 이동하여 S3 버킷이 생성되었는지 확인할 수 있습니다.

Terraform을 사용하여 생성된 S3 Bucket 삭제

main.tf 파일에 언급된 구성을 사용하여 생성한 리소스가 더 이상 필요하지 않은 경우 \terraform destroy\ 명령을 사용하여 해당 리소스를 모두 삭제할 수 있습니다. 여기에서 다음 명령을 실행하면 S3 버킷이 삭제됩니다.

terraform destroy

결론

이 기사에서는 자체 모듈을 작성하고 이를 사용하여 S3 버킷을 생성하는 단계를 살펴보았습니다. 이제 동일한 모듈을 사용하여 여러 S3 버킷을 생성할 수 있습니다. 그렇게 하려면 변수 값을 변경하고 동일한 모듈을 재사용하기만 하면 됩니다.