Terraform의 tfstate 파일을 부추로 관리해봤어요

14796 단어 Terraformtech
이 글은 Fujitsu 크라운 기술 회사 Advent Calendar 2020 19일째 글이다.
18일째는 @YOMOGitaro의부추와 NSX·DFW 고장 제거였다.
2010년부터 시작된 역사와 DFW의 문제 해결 등 내용이 많다.
11월에 발매되는 Terraform NIFCCLOUD Provider의 tfstate 파일 관리 방법을 소개합니다.

개시하다


Terraform NIFCCLOUD Provider는 Terraform에서 Nefukura까지의 인프라를 조작하는 데 사용되는 플러그인입니다.
이 플러그인 사용법 등에 관해서는 이번 어드벤트 캘린더 2020의 첫날, 15일 차 기사가 있으니 저쪽을 보세요.
  • 1교시:니퓨쿠라가 테라form에 대응하기 때문에 [기초편]
  • 15일째: 스티커가 테라form을 지원하기 때문에 [응용편]을 사용했습니다.
  • 이것은 Terraform입니다. 사용하면 tfstate 파일이라는 파일을 만들 것입니다. 이 파일은 관리 자원의 현재 상태를 나타냅니다.
    기본적으로 로컬에서 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 파일의 버전 관리 및 복원


    이 tfstate 파일은 파일 자체가 고장났을 때 이전의 파일 상태로 전환하고 싶은 경우가 있습니다.
    nifucle의 대상 저장 장치는 바코드를 설정할 수 있는 기능이 있기 때문에 본 장에서 바코드의 설정과 파일의 리셋 방법에 대해 설명한다.

    개체가 저장할 슬롯 설정


    스티커의 저장 대상에서 제공슬롯 설정 API.
    또한 기본적으로 체크 기능은 Off입니다.
    이 기능은 제어판에서 사용할 수 없기 때문에 이번에는awscli를 사용하여 버전을 설정합니다.
    awscli에서 기본적인nifuclear 대상 저장 장치를 활용하기 위한 설정 방법 등은 아래 블로그를 참조하십시오.
  • S3 도구로 개체에 저장된 [설정편] #aws-cli
  • 객체 저장 장치에서 편집 막대를 활성화하려면 다음과 같이 하십시오.
    $ aws --endpoint-url https://jp-east-2.storage.api.nifcloud.com s3api put-bucket-versioning --bucket terraform-test --versioning-configuration Status=Enabled
    
    또한 다음 명령을 통해 바코드가 유효한지 확인할 수 있다.StatusEnabled라면 칸 조작이 유효합니다.
    $ 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 파일의 복원


    다음 명령을 사용하여 객체 스토리지 디바이스에 업로드된 파일 버전 정보를 확인할 수 있습니다.IsLatesttrue 버전에 적용되는 최신 버전이다.
    $ 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 기능이 없기 때문에 팀 개발 등 처리를 할 때 주의해야 한다.

    좋은 웹페이지 즐겨찾기