Open5

Terraformのドキュメントを読む

Soyogi KusunokiSoyogi Kusunoki

Terraformとは

Terraformはクラウドやオンプレミスのリソースを人間が読みやすい構成ファイルに定義し、バージョン管理、再利用、共有することができるIaC (Infrastructure as Code)ツールである。
コアとなるTerraformのワークフローは次の3つの段階からなる。

  • Write: 構成ファイルにリソースを定義する
  • Plan: Terraformが実行計画を立てるのでレビューする
  • Apply: 承認すると、Terraformが依存関係を適切に考慮し、提案された操作を実行する。

https://developer.hashicorp.com/terraform/intro

Soyogi KusunokiSoyogi Kusunoki

Terraform言語の構文

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
  # ブロック本体
  <IDENTIFIER> = <EXPRESSION> # 引数
}
  • ブロックにはブロックタイプと0個以上のラベルを持つことができる。ブロック本体には任意の数の引数とネストされたブロックを含む。
  • 引数はブロック内部に記載し、名前に対して値を割り当てることができる。

https://developer.hashicorp.com/terraform/language

Soyogi KusunokiSoyogi Kusunoki

terraformブロック

Terraform自体の動作を定義することができる。

  • required_version:必要なTerraform バージョンの指定
  • required_providers:必要なプロバイダーの指定
  • backend:状態データファイルの保存場所の指定。cloudブロックと同時には定義できない。
  • cloud:HCP Terraformまたは Terraform Enterpriseを使用する場合。backendブロックと同時には定義できない。
terraform {
  required_version = "<version>"
  required_providers {
    <PROVIDER> {
      source = "<provider-address>"
      version = "<version-constraint>"
    }
  }
  backend "<TYPE>" {
    "<ARGUMENTS>"
  }
  cloud {
    organization = "<organization-name>"
    workspaces {
      tags = [ "<tag>" ]
      name = "<workspace-name>"
      project = "<project-name>"
    }
    hostname = "app.terraform.io"
    token = "<TOKEN>"
  }
}

https://developer.hashicorp.com/terraform/language/terraform

Soyogi KusunokiSoyogi Kusunoki

providerブロック

特定のインフラストラクチャプラットフォームとの連携方法を定義する。
設定するプロバイダーはrequired_providersブロックに含まれている必要がある。
ブロック本体の設定引数のほとんどはプロバイダー自身によって定義されている。

provider "google" {
  project = "my-project-id"
  region  = "asia-northeast1"
}

https://developer.hashicorp.com/terraform/language/providers
https://developer.hashicorp.com/terraform/language/providers/configuration