Terraform의 tfstate 파일을 부추로 관리해봤어요
18일째는 @YOMOGitaro의부추와 NSX·DFW 고장 제거였다.
2010년부터 시작된 역사와 DFW의 문제 해결 등 내용이 많다.
11월에 발매되는 Terraform NIFCCLOUD Provider의 tfstate 파일 관리 방법을 소개합니다.
개시하다
Terraform NIFCCLOUD Provider는 Terraform에서 Nefukura까지의 인프라를 조작하는 데 사용되는 플러그인입니다.
이 플러그인 사용법 등에 관해서는 이번 어드벤트 캘린더 2020의 첫날, 15일 차 기사가 있으니 저쪽을 보세요.
기본적으로 로컬에서 tfstate 파일을 생성하지만 AWS를 사용하는 경우 s3을 원격 백엔드로 관리팀의 개발을 관리하는 곳도 있습니다.
이 글은 비물질적 저장소를 원격 백엔드로 tfstate 파일을 관리하는 방법과 파일의 편집 방법 등을 소개한다.
절차.
객체가 저장된 세그먼트 작성
대상이 저장한 구간 제작은 Terraform에서 시작할 수 없기 때문에 Nifucle의 제어판에서 시작해야 합니다.
사용한 스티커 계정으로 대상 저장 화면을 엽니다.
옆 메뉴에서 리소스 매니저를 선택하고 왼쪽 위에 있는 [섹션 만들기]를 클릭하여 섹션 이름과 공개 레벨을 지정하고 섹션을 만듭니다.
이번 통 이름은'terraform-test', 공개 등급은'privte'다.
tf 파일에backend 설정하기
tfstate 파일을 대상 저장소에 업로드하기 위해서 이번에는aws의Provider를 사용합니다.
이번에는 IP 주소가 첨부된 자원 tf 파일을 예로 들겠습니다.
다음 내용만 기입하면 tfstate 파일이 로컬에서 생성됩니다.
terraform {
required_providers {
nifcloud = {
source = "nifcloud/nifcloud"
}
}
provider "nifcloud" {
access_key = "[アクセスキー]"
secret_key = "[シークレットアクセスキー]"
region = "jp-east-1"
}
resource "nifcloud_elastic_ip" "example" {
ip_type = false
availability_zone = "east-11"
description = "memo"
}
상기 내용에서 다음과 같은aws의Provider 설정과 s3의 설정(실제로는 대상이 저장한 설정)을 기재함으로써 tfstate 파일은 로컬에 저장되지 않고 대상 저장소에 업로드된다.백엔드 설정을 진행할 때
terraform init
명령에서 다시 실행해야 합니다.terraform {
required_providers {
nifcloud = {
source = "nifcloud/nifcloud"
}
aws = {
source = "hashicorp/aws"
version = "~> 3.0"
}
}
backend "s3" {
access_key = "[アクセスキー]"
secret_key = "[シークレットアクセスキー]"
bucket = "terraform-test"
key = "terraform.tfstate"
region = "jp-east-2"
endpoint = "https://jp-east-2.storage.api.nifcloud.com"
skip_region_validation = true
skip_credentials_validation = true
}
}
provider "nifcloud" {
access_key = "[アクセスキー]"
secret_key = "[シークレットアクセスキー]"
region = "jp-east-1"
}
resource "nifcloud_elastic_ip" "example" {
ip_type = false
availability_zone = "east-11"
description = "memo"
}
설정이 순조롭게 완료되면 다음 도구가 화면을 저장하는 구간에 tfstate 파일을 만들었는지 확인할 수 있습니다.tfstate 파일의 버전 관리 및 복원
이 tfstate 파일은 파일 자체가 고장났을 때 이전의 파일 상태로 전환하고 싶은 경우가 있습니다.
nifucle의 대상 저장 장치는 바코드를 설정할 수 있는 기능이 있기 때문에 본 장에서 바코드의 설정과 파일의 리셋 방법에 대해 설명한다.
개체가 저장할 슬롯 설정
스티커의 저장 대상에서 제공슬롯 설정 API.
또한 기본적으로 체크 기능은 Off입니다.
이 기능은 제어판에서 사용할 수 없기 때문에 이번에는awscli를 사용하여 버전을 설정합니다.
awscli에서 기본적인nifuclear 대상 저장 장치를 활용하기 위한 설정 방법 등은 아래 블로그를 참조하십시오.
$ aws --endpoint-url https://jp-east-2.storage.api.nifcloud.com s3api put-bucket-versioning --bucket terraform-test --versioning-configuration Status=Enabled
또한 다음 명령을 통해 바코드가 유효한지 확인할 수 있다.Status
가 Enabled
라면 칸 조작이 유효합니다.$ aws --endpoint-url https://jp-east-2.storage.api.nifcloud.com s3api put-bucket-versioning --bucket terraform-test --versioning-configuration Status=Enabled
{
"Status": "Enabled"
}
업로드 중인 tfstate 파일의 복원
다음 명령을 사용하여 객체 스토리지 디바이스에 업로드된 파일 버전 정보를 확인할 수 있습니다.
IsLatest
는 true
버전에 적용되는 최신 버전이다.$ aws --endpoint-url https://jp-east-2.storage.api.nifcloud.com s3api list-object-versions --bucket terraform-test
{
"Versions": [
{
"ETag": "\"5f222423127f5d45510dd552a96bbcf9\"",
"Size": 1700,
"StorageClass": "STANDARD",
"Key": "terraform.tfstate",
"VersionId": "nZCiFBFOSScnrp44ZBd0AL.ENqc6MFW",
"IsLatest": true,
"LastModified": "2020-12-18T13:25:46.198Z",
"Owner": {
"DisplayName": "XXX00000",
"ID": "XXX00000"
}
},
{
"ETag": "\"1990fc615cfb6db8b1331059bb8edc92\"",
"Size": 928,
"StorageClass": "STANDARD",
"Key": "terraform.tfstate",
"VersionId": "XRcPQ4y.QlFt3vdKDVJQcApGqoeO5Dm",
"IsLatest": false,
"LastModified": "2020-12-18T13:22:56.087Z",
"Owner": {
"DisplayName": "XXX00000",
"ID": "XXX00000"
}
}
]
}
예를 들어 이 최신 버전의 파일 상태가 손상되었을 때 전환하려면 아래 최신 버전을 삭제하는 명령을 실행하면 전환할 수 있습니다.$ aws --endpoint-url https://jp-east-2.storage.api.nifcloud.com s3api delete-object --bucket terraform-test --key terraform.tfstate --version-id nZCiFBFOSScnrp44ZBd0AL.ENqc6MFW
{
"VersionId": "nZCiFBFOSScnrp44ZBd0AL.ENqc6MFW"
}
삭제 후 방금 최신 버전을 적용했습니다.이런 방법으로 차로 돌아갈 수 있다.
$ aws --endpoint-url https://jp-east-2.storage.api.nifcloud.com s3api list-object-versions --bucket terraform-test
{
"Versions": [
{
"ETag": "\"1990fc615cfb6db8b1331059bb8edc92\"",
"Size": 928,
"StorageClass": "STANDARD",
"Key": "terraform.tfstate",
"VersionId": "XRcPQ4y.QlFt3vdKDVJQcApGqoeO5Dm",
"IsLatest": true,
"LastModified": "2020-12-18T13:22:56.087Z",
"Owner": {
"DisplayName": "XXX00000",
"ID": "XXX00000"
}
}
]
}
끝말
이번에 우리는 니프 프로젝트 저장 장치를 원격 백엔드로 tfstate 파일을 관리하는 방법과 바그닝을 관리하는 방법 등을 소개했다.만약 다른 사람의 참고가 될 수 있다면 정말 좋겠다.
또한 현재 tfstate 파일을 여러 사람이 처리할 때 편리한state lock 기능이 없기 때문에 팀 개발 등 처리를 할 때 주의해야 한다.
Reference
이 문제에 관하여(Terraform의 tfstate 파일을 부추로 관리해봤어요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/tunakyonn/articles/50ca92cbdd676c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)