Open7

terraform

qatocoqatoco

terraform ブロック

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

  • constant valueのみ使える。var.xxxlocal.yyymodule.zzz. を使っても参照できない
  • 内部で使うblock
    • 案件で使った: backend, required_providers
    • 実務経験なし: provider_meta, cloud
  • 内部で使うarguments: version, experiments

backend ブロック

  • stateを保存する場所。実務だとインフラにになるのでawsならs3を指定
  • string templateは使用不可

変数

  • variable "xxxx" {...} で定義して、 var.xxxx で参照
    • 上書き可能
  • locals { xxxx = "t3.micro" ...} で定義して、 local.xxxx で参照
    • 上書きできない
qatocoqatoco

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

main.tf

variables.tf

トップレベル: apply時に変数をセットしないなら不要。実案件では使わないことが多かった
モジュールレベル:有用。main.tfで読み込むときに、account_id、env、などを渡せるようになる

output.tf

  • 関数における戻り値、に相当
  • output ブロックを使って定義
  • outputsへのアクセス
    • ex. module.web_server.instance_ip_addr
  • terraform apply 時に定義された値がプリントされる
  • 別ファイルから module.xxx で参照できるようになる
qatocoqatoco

モジュール

  • 専用のディレクトリ = モジュール
    • モジュールの参照するときにディレクトリのパスを書く
  • インターフェースを持つ
    • 入力、出力
    • 入力(=引数、argument):variableブロックで定義
    • 出力:outputブロックで定義

module {...} ブロック

  • 利用する側 main.tf に書く
    • source フィールド、 argumentsとしてリストアップされたフィールドを持つ
      • 書き漏らすと、terraform validte 実行時エラーが発生
      • The argument "xxxここにargument名xx" is required, but no definition was found.
    • source にモジュールの配置されたディレクトリへのパス
qatocoqatoco

ブロック

variable {...}
output {...}
resource {...}
module {...}
provider {...}

ブロックパラメータ

provider "aws" {
  region = "ap-northeast-1" # <= コレ
}
qatocoqatoco

AWS provider

https://registry.terraform.io/providers/hashicorp/aws/latest/docs

terraform {
  required_providers {
    # provider awsをここで参照
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}
provider "aws" {
  region = "ap-northeast-1"
  assume_role {
    role_arn = "arn:aws:iam::111111111111:role/xxxxxxxxxxx"
  }

  default_tags {
     # 全てのリソースに適用されるタグ
    tags = {
      Product        = "sample-product"
      Environment    = local.env
      ManagedBy      = "terraform"
      CmBillingGroup = "sample_group"
      Module         = "sample_tag"
    }
  }
}

There are currently 1248 resources and 513 data sources available in the provider.

  • provider
    • 使えるresource, dataを定義
    • terraformブロックからの参照: ブロックパラメータ required_providers
    • IAMロールのassumingできる
    • ブロックパラメータ assume_role 使う
      • role_arn が必須の引数
    • OICDとweb identity federationをつかう
  • ブロックパラメータ default_tags
  • sts = security token service