OSS 백엔드

OSS 백엔드

oss 백엔드는 Alibaba Cloud OSS의 주어진 버킷에 있는 주어진 키로 스테이트(state)를 저장해요. 이 백엔드는 Alibaba Cloud Table Store를 통한 스테이트 잠금과 일관성 검사도 지원하며, tablestore_table 필드를 기존 TableStore 테이블 이름으로 설정하면 활성화할 수 있어요. 이 백엔드는 TableStore를 통한 스테이트 잠금을 지원해요.

출처: 문서

본문

참고: OSS 백엔드는 terraform 버전 0.12.2부터 사용할 수 있어요.

예시 구성 (Example Configuration)

terraform {
  backend "oss" {
    bucket = "bucket-for-terraform-state"
    prefix   = "path/mystate"
    key   = "version-1.tfstate"
    region = "cn-beijing"
    tablestore_endpoint = "https://terraform-remote.cn-hangzhou.ots.aliyuncs.com"
    tablestore_table = "statelock"
  }
}

이 예시는 bucket-for-terraform-state라는 OSS Bucket, terraform-remote라는 OTS Instance, 그리고 statelock이라는 OTS TableStore가 이미 생성되어 있다고 가정해요. Terraform 스테이트는 path/mystate/version-1.tfstate 파일에 기록돼요. TableStoreLockID라는 이름의 String 타입 기본 키를 가져야 해요.

데이터 소스 구성 (Data Source Configuration)

다른 구성에서 OSS 원격 스테이트를 사용하려면 terraform_remote_state 데이터 소스를 사용해요.

terraform {
  backend "oss" {
    bucket = "remote-state-dns"
    prefix = "mystate/state"
    key    = "terraform.tfstate"
    region = "cn-beijing"
  }
}

terraform_remote_state 데이터 소스는 참조된 원격 스테이트에 정의된 모든 루트 출력을 반환해요. 예시 출력은 다음과 같을 수 있어요:

data "terraform_remote_state" "network" {
    backend   = "oss"
    config    = {
        bucket = "remote-state-dns"
        key    = "terraform.tfstate"
        prefix = "mystate/state"
        region = "cn-beijing"
    }
    outputs   = {}
    workspace = "default"
}

구성 변수 (Configuration Variables)

경고: 자격 증명과 기타 민감한 데이터를 제공할 때는 환경 변수를 사용하는 것을 권장해요. -backend-config를 사용하거나 이 값을 구성에 직접 하드코딩하면, Terraform이 .terraform 하위 디렉터리와 플랜 파일 양쪽에 이 값을 포함하게 돼요. 자세한 내용은 자격 증명과 민감한 데이터를 참고하세요.

다음 구성 옵션 또는 환경 변수를 지원해요:

  • access_key - (선택) Alibaba Cloud 접근 키. ALICLOUD_ACCESS_KEYALIBABA_CLOUD_ACCESS_KEY_ID(권장) 환경 변수를 지원해요.
  • secret_key - (선택) Alibaba Cloud 비밀 접근 키. ALICLOUD_SECRET_KEYALIBABA_CLOUD_ACCESS_KEY_SECRET(권장) 환경 변수를 지원해요.
  • security_token - (선택) STS 접근 토큰. ALICLOUD_SECURITY_TOKENALIBABA_CLOUD_SECURITY_TOKEN(권장) 환경 변수를 지원해요.
  • ecs_role_name - (선택) API 작업을 위해 ECS 인스턴스에 연결된 RAM 역할 이름. Alibaba Cloud 콘솔의 'Access Control' 섹션에서 가져올 수 있어요.
  • region - (선택) OSS 버킷의 지역. ALICLOUD_REGIONALIBABA_CLOUD_REGION(권장) 환경 변수를 지원해요.
  • endpoint - (선택) OSS API용 사용자 지정 엔드포인트. ALICLOUD_OSS_ENDPOINTALIBABA_CLOUD_OSS_ENDPOINT(권장) 환경 변수를 지원해요.
  • bucket - (필수) OSS 버킷의 이름.
  • prefix - (선택) 스테이트 파일이 저장될 경로 디렉터리. 기본값은 "env:"예요.
  • key - (선택) 스테이트 파일의 이름. 기본값은 terraform.tfstate예요.
  • tablestore_endpoint - (선택) TableStore API용 사용자 지정 엔드포인트. ALICLOUD_TABLESTORE_ENDPOINTALIBABA_CLOUD_TABLESTORE_ENDPOINT(권장) 환경 변수를 지원해요.
  • tablestore_instance_name - (선택) TableStore가 속한 인스턴스의 이름을 지정해요. 기본적으로 Terraform은 tablestore_endpoint에서 이름을 파싱해요. tablestore 엔드포인트가 VPC 접근 URL일 때는 접근 URL을 명시적으로 설정해야 해요.
  • tablestore_table - (선택) 스테이트 잠금과 일관성을 위한 TableStore 테이블. 테이블은 LockID라는 이름의 String 타입 기본 키를 가져야 해요.
  • sts_endpoint - (선택) AliCloud Security Token Service (STS) API용 사용자 지정 엔드포인트. ALICLOUD_STS_ENDPOINTALIBABA_CLOUD_STS_ENDPOINT(권장) 환경 변수를 지원해요.
  • encrypt - (선택) 스테이트 파일의 서버 측 암호화를 활성화할지 여부. true이면 OSS가 'AES256' 암호화 알고리즘으로 스테이트 파일을 암호화해요.
  • acl - (선택) 스테이트 파일에 적용할 Object ACL.
  • shared_credentials_file - (선택) 공유 자격 증명 파일의 경로. ALICLOUD_SHARED_CREDENTIALS_FILE 또는 ALIBABA_CLOUD_CREDENTIALS_FILE(권장) 환경 변수에서도 가져올 수 있어요. 설정되지 않고 프로필이 지정되면 ~/.aliyun/config.json이 사용돼요.
  • profile - (선택) 공유 자격 증명 파일에 설정된 Alibaba Cloud 프로필 이름. ALICLOUD_PROFILEALIBABA_CLOUD_PROFILE(권장) 환경 변수를 지원해요.
  • assume_role_role_arn - (선택) 맡을 역할의 ARN. ARN이 빈 문자열로 설정되면 역할 전환을 수행하지 않아요. ALICLOUD_ASSUME_ROLE_ARNALIBABA_CLOUD_ROLE_ARN(권장) 환경 변수를 지원해요. Terraform은 제공된 자격 증명을 가진 계정에서 구성을 실행해요.
  • assume_role_policy - (선택) 임시 자격 증명에 적용할 더 제한적인 정책. 결과적으로 생성되는 임시 보안 자격 증명의 권한을 더 제한하는 방법을 제공해요. 이 정책으로 맡는 역할의 권한을 초과하는 권한을 부여할 수는 없어요.
  • assume_role_session_name - (선택) 역할을 맡을 때 사용할 세션 이름. 생략하면 'terraform'이 AssumeRole 호출에 세션 이름으로 전달돼요. ALICLOUD_ASSUME_ROLE_SESSION_NAMEALIBABA_CLOUD_ROLE_SESSION_NAME(권장) 환경 변수를 지원해요.
  • assume_role_session_expiration - (선택) 역할을 맡기 위해 수립된 세션이 만료되는 시간. 유효 값 범위: [900-3600]초. 기본값은 3600이며(이 경우 Alibaba Cloud가 자체 기본값을 사용해요). ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION 환경 변수를 지원해요.
  • assume_role - (1.1.0+부터 더 이상 사용하지 않음) 역할 ARN이 제공되면 제공된 자격 증명으로 이 역할을 맡으려 시도해요. assume_role_role_arn이 지정되면 무시돼요. assumerole* 옵션을 평탄화하는 방식으로 대체됨.
  • role_arn - (필수) 맡을 역할의 ARN. ARN이 빈 문자열로 설정되면 역할 전환을 수행하지 않아요. ALICLOUD_ASSUME_ROLE_ARNALIBABA_CLOUD_ROLE_ARN(권장) 환경 변수를 지원해요. Terraform은 제공된 자격 증명을 가진 계정에서 구성을 실행해요.
  • policy - (선택) 임시 자격 증명에 적용할 더 제한적인 정책. 결과적으로 생성되는 임시 보안 자격 증명의 권한을 더 제한하는 방법을 제공해요. 이 정책으로 맡는 역할의 권한을 초과하는 권한을 부여할 수는 없어요.
  • session_name - (선택) 역할을 맡을 때 사용할 세션 이름. 생략하면 'terraform'이 AssumeRole 호출에 세션 이름으로 전달돼요. ALICLOUD_ASSUME_ROLE_SESSION_NAME 환경 변수를 지원해요.
  • session_expiration - (선택) 역할을 맡기 위해 수립된 세션이 만료되는 시간. 유효 값 범위: [900-3600]초. 기본값은 3600이며(이 경우 Alibaba Cloud가 자체 기본값을 사용해요). ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION 환경 변수를 지원해요.

참고: 사용자 지정 OSS 엔드포인트에 스테이트를 저장하려면 OSS_ENDPOINT 환경 변수를 지정할 수 있어요. 예: "oss-cn-beijing-internal.aliyuncs.com"

더 알아보기 (Learn more)