도와줘, Localstack. 당신은 나의 유일한 희망이야.
Source: Dev.to
Introduction
지난 해 저는 Discord 그룹과 함께 Terraform을 배웠습니다. 강사는 최신 Amazon Linux 2023 AMI를 사용하여 특정 VPC와 서브넷 내에 AWS EC2 인스턴스를 설정하고, Terraform 상태를 S3 버킷에 저장하는 방법을 포함한 탄탄한 소개를 제공했습니다. 이를 통해 탄탄한 기반을 다졌지만, 정기적인 연습이 없으면 지식이 사라집니다.
제 일상 업무는 AWS와 관련이 없기 때문에 안전하게 연습할 방법이 필요합니다. 실제 AWS 계정을 사용하면 무료 티어라도 예상치 못한 비용이 발생할 위험이 있습니다.
LocalStack은 AWS 서비스를 로컬에서 에뮬레이션하여 비용 없이 Terraform을 연습할 수 있게 해줍니다.
LocalStack 설치
-
운영 체제에 맞는 공식 설치 가이드를 따르세요.
-
LocalStack을 시작합니다:
localstack start -
다른 터미널에서 실행 중인지 확인합니다:
curl http://localhost:4566/_localstack/health
사용 가능한 서비스가 나열된 JSON 응답이 표시되면 LocalStack이 정상적으로 작동하고 있는 것입니다.
Configure an AWS CLI Profile for LocalStack
LocalStack은 자격 증명을 검증하지 않지만, 여전히 AWS 프로필이 필요합니다.
localstack이라는 프로필을 생성합니다:
aws configure --profile localstack
다음 더미 값을 사용하세요:
- AWS Access Key ID:
test - AWS Secret Access Key:
test - Default region name:
us-east-1 - Default output format:
json
~/.aws/config 파일을 편집하고 엔드포인트 URL을 추가합니다:
[profile localstack]
region = us-east-1
output = json
endpoint_url = http://localhost:4566
Note: AWS CLI v2.13.0 이상을 사용하고 있는지 확인하세요. 이전 버전은 설정 파일의
endpoint_url을 무시할 수 있습니다.
버전을 확인합니다:
aws --version
aws-cli/2.13.0 Python/3.x와 같은 출력이 표시되어야 합니다. 필요하면 업그레이드하세요.
Terraform 설정
새 디렉터리에 다음 두 파일을 생성합니다.
terraform.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.92"
}
}
required_version = ">= 1.2"
}
main.tf
provider "aws" {
profile = "localstack"
region = "us-east-1"
s3_use_path_style = true
skip_credentials_validation = true
skip_metadata_api_check = true
endpoints {
s3 = "http://s3.localhost.localstack.cloud:4566"
}
default_tags {
tags = {
Environment = "tutorial"
Project = "localstack-terraform"
}
}
}
resource "aws_s3_bucket" "example" {
bucket_prefix = "localstack-terraform"
}
main.tf 설명
| 블록 | 목적 |
|---|---|
provider "aws" | Terraform에 사용할 AWS 공급자를 선언합니다. |
profile = "localstack" | 앞서 구성한 AWS CLI 프로파일을 사용합니다. |
region = "us-east-1" | LocalStack이 로컬에서 실행되지만 필요합니다. |
s3_use_path_style = true | 경로 스타일 S3 URL을 강제합니다 (LocalStack에서 필요). |
skip_credentials_validation = true | LocalStack이 자격 증명을 검증하지 않으므로 자격 증명 검사를 건너뜁니다. |
skip_metadata_api_check = true | EC2 메타데이터 서비스 호출을 비활성화합니다. |
endpoints { s3 = "http://s3.localhost.localstack.cloud:4566" } | 모든 S3 요청을 LocalStack으로 보냅니다. |
default_tags | 이 공급자가 생성하는 모든 리소스에 지정된 태그를 자동으로 추가합니다. |
resource "aws_s3_bucket" "example" | localstack-terraform 접두사가 붙은 고유한 이름의 S3 버킷을 생성합니다. |
구성 적용
작업 디렉터리를 초기화하고 구성을 적용합니다:
terraform init
terraform apply
Terraform은 LocalStack 내부에 S3 버킷을 생성합니다. 이는 실제 AWS 계정 없이 로컬에서 AWS 리소스를 테스트할 수 있음을 보여줍니다.
tflocal 로 보일러플레이트 감소
서비스 엔드포인트, 프로바이더 플래그 및 기타 LocalStack‑특화 설정을 수동으로 구성하는 것은 번거로울 수 있습니다.
tflocal 래퍼는 엔드포인트를 자동으로 처리하고 Terraform 코드에서 필요한 설정 양을 줄여 이 과정을 단순화합니다. 규모가 큰 프로젝트에서는 tflocal을 사용하면 LocalStack과 작업할 때 Terraform 파일을 보다 깔끔하고 유지보수하기 쉬워집니다.