S3 백엔드
S3 백엔드
Amazon S3 버킷에서 주어진 키로 state를 저장하는 s3 백엔드를 설명해 드릴게요. DynamoDB 또는 lockfile을 이용한 state 잠금을 지원해요.
출처: 문서
본문
s3 백엔드는 Amazon S3의 주어진 버킷에서 주어진 키로 state를 저장해요. use_lockfile 인자를 true로 설정해 state 잠금을 활성화할 수 있으며, 별도의 DynamoDB 테이블(dynamodb_table)로도 잠금을 지원해요.
경고: 우발적 삭제와 사람 실수로 인한 state 복구를 위해 S3 버킷에서 버전 관리(Bucket Versioning)를 활성화하는 것을 강력히 권장해요.
예시 구성 (Example Configuration)
terraform {
backend "s3" {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
}
}
이 예시는 mybucket이라는 이름의 S3 버킷이 생성되어 있다고 가정해요. Terraform state는 path/to/my/key 키에 작성돼요. access credentials에는 부분 구성(partial configuration)을 권장해요.
버전 관리로 state 관리를 강화하고 DynamoDB로 잠금을 사용하려면:
terraform {
backend "s3" {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
dynamodb_table = "terraform-locks"
}
}
데이터 소스 구성 (Data Source Configuration)
data "terraform_remote_state" "foo" {
backend = "s3"
config = {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
}
}
구성 변수 (Configuration Variables)
경고: 자격 증명과 기타 민감 데이터를 제공할 때는 환경 변수를 사용하는 것을 권장해요.
-backend-config를 사용하거나 이런 값을 구성에 직접 하드코딩하면 Terraform이.terraform하위 디렉터리와 plan 파일 양쪽에 이 값을 포함해요.
다음 구성 옵션 / 환경 변수를 지원해요:
bucket- (필수) state를 저장할 S3 버킷의 이름.key- (필수) state를 저장할 버킷 안의 경로 키.region/AWS_DEFAULT_REGION- (선택) S3 버킷의 리전. 기본값은 AWS SDK의 기본 리전 감지.endpoint- (선택) S3 API의 커스텀 엔드포인트. 커스텀 S3 호환 스토리지(MinIO 등)를 사용할 때 유용해요.encrypt- (선택) state 파일의 서버 측 암호화 활성화 여부. 기본값은false.kms_key_id- (선택) 서버 측 암호화에 사용할 KMS 키의 ARN.dynamodb_table/TF_DYNAMODB_TABLE- (선택) 잠금에 사용할 DynamoDB 테이블 이름.LockID라는 문자열 기본 키가 필요해요.use_lockfile- (선택) S3 객체 잠금을 사용해 state 잠금을 활성화. 기본값은false.profile/AWS_PROFILE- (선택) AWS 자격 증명 파일의 프로필 이름.shared_credentials_file/AWS_SHARED_CREDENTIALS_FILE- (선택) 공유 자격 증명 파일의 경로.token/AWS_SESSION_TOKEN- (선택) 임시 자격 증명의 세션 토큰.access_key/AWS_ACCESS_KEY_ID- (선택) AWS 접근 키.secret_key/AWS_SECRET_ACCESS_KEY- (선택) AWS 시크릿 접근 키.role_arn- (선택) 위임할 IAM 역할의 ARN.assume_role- (선택) IAM 역할 위임 설정 블록.workspace_key_prefix- (선택) 워크스페이스 state의 키 접두사. 기본값은env:.skip_credentials_validation- (선택) 자격 증명 검증 건너뛰기. 기본값은false.skip_region_validation- (선택) 리전 검증 건너뛰기. 기본값은false.skip_requesting_account_id- (선택) 계정 ID 요청 건너뛰기. 기본값은false.skip_metadata_api_check- (선택) EC2 메타데이터 API 확인 건너뛰기. 기본값은false.skip_s3_checksum- (선택) S3 객체에 대한 요청에 콘텐츠 체크섬을 포함할지 여부. 기본값은true.force_path_style- (선택)true면 버킷 주소에 일반적인 가상 호스트 스타일 대신 경로 스타일을 사용. 기본값은false.max_retries- (선택) 작업 실패 시 최대 재시도 횟수.sts_endpoint/AWS_STS_ENDPOINT- (선택) STS API의 커스텀 엔드포인트.use_fips_endpoint- (선택) FIPS 엔드포인트 사용 여부.
state 잠금 (State Locking)
s3 백엔드는 기본적으로 dynamodb_table로 지정한 DynamoDB 테이블(LockID 문자열 기본 키 필요)로 잠금을 지원해요. 테이블을 지정하지 않으면 잠금은 비활성화돼요. use_lockfile가 true면 DynamoDB 대신 S3 객체 잠금을 사용해요.
terraform apply 전에 terraform force-unlock으로 고아 잠금을 해제할 수 있어요.
S3 호환 스토리지 (S3-compatible storage)
endpoint를 설정하면 MinIO 같은 S3 호환 스토리지에서도 이 백엔드를 사용할 수 있어요. skip_credentials_validation과 skip_region_validation을 true로 설정해야 할 수 있어요.