Open7
terraform
terraform
ブロック
- constant valueのみ使える。
var.xxx
、local.yyy
、module.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
で参照- 上書きできない
main.tf
variables.tf
トップレベル: apply時に変数をセットしないなら不要。実案件では使わないことが多かった
モジュールレベル:有用。main.tfで読み込むときに、account_id、env、などを渡せるようになる
output.tf
- 関数における戻り値、に相当
-
output
ブロックを使って定義 - outputsへのアクセス
- ex.
module.web_server.instance_ip_addr
- ex.
-
terraform apply
時に定義された値がプリントされる - 別ファイルから
module.xxx
で参照できるようになる
モジュール
- 専用のディレクトリ = モジュール
- モジュールの参照するときにディレクトリのパスを書く
- インターフェースを持つ
- 入力、出力
- 入力(=引数、argument):variableブロックで定義
- 出力:outputブロックで定義
module {...}
ブロック
- 利用する側
main.tf
に書く-
source
フィールド、 argumentsとしてリストアップされたフィールドを持つ- 書き漏らすと、
terraform validte
実行時エラーが発生 The argument "xxxここにargument名xx" is required, but no definition was found.
- 書き漏らすと、
-
source
にモジュールの配置されたディレクトリへのパス
-
ブロック
variable {...}
output {...}
resource {...}
module {...}
provider {...}
ブロックパラメータ
provider "aws" {
region = "ap-northeast-1" # <= コレ
}
AWS provider
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
resource "aws_kms_key"
- 引数
policy
はオプショナルだが指定すべき-
policy
を省略すると デフォルトのキーポリシーが割り当てられる
-
- それ以外の引数はデフォルト値を変えたい時以外は省略
MalformedPolicyDocument: Has prohibited field Resource
The policy document contains a field named "Resource" that shouldn't be there.
うっかりassume-roleに直接ポリシー書いてしまっていたと言うチョンボなお話