Open7

terraform

aGlnYWtpbg==aGlnYWtpbg==

環境構築(docker)

version: '3'
services:
  tf:
    image: hashicorp/terraform:latest
    working_dir: /mnt
    volumes:
      - ./src:/mnt
    env_file:
      - .env
    entrypoint: >
      tail -f /dev/null

docker-compose.ymlを定義してコンテナを起動すればOK

docker compose up -d 
docker compose exec tf sh

コンテナ内でterraformコマンドを使う

terraform --help
aGlnYWtpbg==aGlnYWtpbg==

terraformで CockroachDBクラスタを作成する。

main.tf
terraform {
  required_providers {
    cockroach = {
      source  = "cockroachdb/cockroach"
      version = "0.2.0"
    }
  }
}

variable "cluster_name" {
  type     = string
  nullable = false
}

variable "sql_user_name" {
  type     = string
  nullable = false
  default  = "maxroach"
}

variable "sql_user_password" {
  type      = string
  nullable  = false
  sensitive = true
}

variable "serverless_spend_limit" {
  type     = number
  nullable = false
  default  = 0
}

variable "cloud_provider" {
  type     = string
  nullable = false
  default  = "GCP"
}

variable "cloud_provider_regions" {
  type     = list(string)
  nullable = false
  default  = ["asia-southeast1"]
}

provider "cockroach" {
  # export COCKROACH_API_KEY with the cockroach cloud API Key
}

resource "cockroach_cluster" "cockroach" {
  name           = var.cluster_name
  cloud_provider = var.cloud_provider
  serverless = {
    spend_limit = var.serverless_spend_limit
  }
  regions = [for r in var.cloud_provider_regions : { name = r }]
}

resource "cockroach_sql_user" "cockroach" {
  id = cockroach_cluster.cockroach.id
  name       = var.sql_user_name
  password   = var.sql_user_password
}
  • コンテナ内で下記のコマンドを実行することで作成できる!
export COCKROACH_API_KEY=<サービスアカウント作成時にコピーしたsecret>
terraform init
terraform apply \
            -auto-approve \
            -var="cluster_name=<クラスタ名>" \
            -var="sql_user_name=<DBのユーザ名>" \
            -var="sql_user_password=<DBのパスワード>"

参考

aGlnYWtpbg==aGlnYWtpbg==

terraform × GCP 実行メモ

ざっくり手順

  • GCPサービスアカウント作成
  • サービスアカウントにリソース作成に必要な権限を付与
  • project内容を記載するtfファイルと リソース作成の定義のtfファイルを作成
  • terraform plan コマンドで 実行できるか確認
  • terraform apply コマンドで実行し、リソース作成
main.tf(project内容を記載するtfファイル)
provider "google" {
  credentials = "<GCPさーびすアカウント>.json"
  project     = "<プロジェクト名>"
  region      = "<GCPリージョン>"
}
aGlnYWtpbg==aGlnYWtpbg==

terraform × aws(local stack) 実行メモ

環境構築

docker-compose.yml ファイルの作成

version: '2.1'

services:
  localstack:
    image: localstack/localstack:0.12.1
    environment:
      - DEBUG=0
    volumes:
      - "./localstack:/tmp/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
  tf:
    image: hashicorp/terraform:latest
    working_dir: /mnt
    volumes:
      - ./src:/mnt
    entrypoint: >
      tail -f /dev/null
下記のコマンドを実行する
version: '2.1'

services:
  localstack:
    image: localstack/localstack:0.12.1
    environment:
      - DEBUG=0
    volumes:
      - "./localstack:/tmp/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
  tf:
    image: hashicorp/terraform:latest
    working_dir: /mnt
    volumes:
      - ./src:/mnt
    entrypoint: >
      tail -f /dev/null

terraform のサンプルコードを作成

terraform {
  backend "local" {}
}

provider "aws" {
  region = "ap-northeast-1"
  access_key = "hoge"
  secret_key = "piyo"

  s3_use_path_style = true
  skip_credentials_validation = true
  skip_metadata_api_check = true
  skip_requesting_account_id = true

  endpoints {
    s3 = "http://localstack:4566"
  }
}

resource "aws_s3_bucket" "my-bucket" {
  bucket = "my-tf-test-bucket"
}

EOF
gg

起動

docker compose up -d
docker compose exec tf sh
terraform init
terraform apply