使用Terraform创建Terraform的后端

概述

    • Terraformのバックエンドとして、S3とDynamoDBを利用することが出来る。

 

    • リモートに状態を保存し編集ロックすることで、同時開発による状態の破損を防ぐことが出来る。

 

    • また、秘密情報を含むtfstateをGitHub等に上げることを回避できる。

Sensitive values in state の項を参照 (https://learn.hashicorp.com/tutorials/terraform/sensitive-variables)

验证过的版本 shì de

Terraform v1.1.2
on linux_amd64
+ provider registry.terraform.io/hashicorp/aws v4.18.0

示例代码

目录结构

backend/ # backendを作成する部分
 ├ main.tf
 └ provider.tf

s3_sample/ # backendを利用するサンプル
 ├ backend.config 
 ├ backend.tf
 ├ main.tf
 └ provider.tf

后端/主要.tf

locals {
  backend_name = "backend-sample"
}

resource "aws_s3_bucket" "terraform_state" {
  bucket = "tfstate-${local.backend_name}"
}

resource "aws_s3_bucket_public_access_block" "terraform_state" {
  bucket                  = aws_s3_bucket.terraform_state.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

resource "aws_dynamodb_table" "terraform_locks" {
  name           = "tflocks-${local.backend_name}"
  hash_key       = "LockID"
  read_capacity  = 1
  write_capacity = 1

  attribute {
    name = "LockID"
    type = "S"
  }
}

    • S3のパブリックアクセスは不要なので全て閉じる。

 

    read_capacity/write_capacityは、DynamoDBの読み書きスループットを決める値。小さいほうが安く済むし、Backendとしての利用なら1で十分。

后端/提供者.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.18.0"
    }
  }
  required_version = "~> 1.1.0"
}

provider "aws" {
  region     = "ap-northeast-1"
  access_key = "my-access-key" # 各自の環境に合わせて修正
  secret_key = "my-secret-key" # 各自の環境に合わせて修正
}

s3_sample/backend.config 的原始样本

bucket          = "tfstate-backend-sample"
dynamodb_table  = "tflocks-backend-sample"
encrypt         = true
region          = "ap-northeast-1"

s3示例/后端.tf

terraform {
  backend "s3" {
    key = "sample.tfstate"
  }
}
    • keyは作成されるtfstateファイル名。

 

    複数のTerraformで同じバックエンドを共有する場合、ここを変える。

s3_sample/main.tf 的主要内容

resource "aws_s3_bucket" "sample" {
  bucket = "bucket-sample-okmnjiuhb" # 各自で修正
}

resource "aws_s3_bucket_public_access_block" "sample" {
  bucket                  = aws_s3_bucket.sample.id
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}
    サンプル用に適当なS3バケットを作成。

s3样本/提供商.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.18.0"
    }
  }
  required_version = "~> 1.1.0"
}

provider "aws" {
  region     = "ap-northeast-1"
  access_key = "my-access-key" # 各自の環境に合わせて修正
  secret_key = "my-secret-key" # 各自の環境に合わせて修正
}

执行方法 (shí fǎ)

1. 后端部署
cd backend
terraform init
terraform plan
terraform apply
2. 使用已创建的后端来部署资源
cd s3_sample
terraform init -backend-config=./backend.config
terraform plan
terraform apply

后端的内容

s3.PNG
dynamo.PNG
bannerAds