/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31


May 2, 2021 List
Terrafirma on May 02, 2021 10:14 PM

May 2, 2021

Terrafirma
公藹??
https://www.terraform.io/docs/index.html
蟆?蜈?
https://www.terraform.io/guides/core-workflow.html
推奨方觸??
https://www.terraform.io/docs/cloud/guides/recommended-practices/index.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part1.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part2.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.1.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.2.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.3.html
 https://www.terraform.io/docs/cloud/guides/recommended-practices/part3.4.html
チュートリア繝?
https://learn.hashicorp.com/collections/terraform/gcp-get-started
HCL
https://www.terraform.io/docs/language/index.html
CLI aka cmd(アルファベットリストから使う)
https://www.terraform.io/docs/cli/auth/index.html
GCP用リファレン繧?
https://registry.terraform.io/providers/hashicorp/google/latest/docs

お便強
https://qiita.com/minamijoyo/items/1f57c62bed781ab8f4d7
https://qiita.com/donko_/items/6289bb31fecfce2cda79
https://www.apps-gcp.com/infra-automation-01/
https://colsis.jp/blog/gcpterraform/

Infra as codeとしてインフラの觸??築や設藹??をコード化できる
特にクラウドだと觸??築の自動化や構成管理等でのレバレッジが強力

■段髫?
Terraformと縺??基本知鐔??縺?Terraformのメリット4つを紹臀?? | テックマガジ繝? from FEnetインフ繝?
必要なリソースをTerraform化>workspaceの活逕?>main.tfの共通部分をmodule化

moduleは觸??成に合繧?ないようなリファクタリングが必要になった時縺?terraform state mv が必要になってとたんにつらい、moduleを細分化しす縺?る縺?variable 縺? output が大驥?に藹??要になって書きづらい、moduleは再利用できる複数のリソースの単位(プログラミング鐔??語でいうところの関数みたいなもの・??で臀??るのがしっ縺?り

リソースの差分を無鐔??するlifecycleブロックを使う
resource "aws_autoscaling_group" "app_1" {
  name = "app-asg-1"
  lifecycle {
    ignore_changes = ["load_balancers"]
    create_before_destroy = true//新しいのを作ってから古いのを削髯?
  }
}
外部ファイルを文字列として読み込む
resource "aws_iam_role" "ec2_role" {
  name = "ec2-role"
  assume_role_policy = "${file("./ec2_assume_role_policy.json")}"
}
1つのディレクトリで鐔??数縺?Stateを扱うWorkspaceという機能もあるのですが、
個人的には普通にディレクトリを分けて管理する方が讌?
production/stagingが完全に同じリソース觸??成で、設藹??のパラメータの差分がちょっとだけあるという理想的な臀??界で縺?Workspaceでも運用できるかもしれませんが、現藹??的に縺?stagingだけリリース前の觸??証用の臀??時的なリソースが立ってたりとか、完全に同じ構成にならないことも多いので、モジュールの読み込みの有無や一部の環藹??だけ存在するリソースなどの差分を吸藹??できる場所があったほうが都合がよい

Terraform職人再入門2020 - Qiita
モジュールが公藹??から觸??供されている
Browse Modules | Terraform Registry

Terraform 縺? terraform.tfvars と縺? | 30歳未軆??験から縺?ITエンジニ繧? (se-from30.com)
環藹??情報は藹??部ファイルが基譛?
prd/stg/dev環藹??縺?prd.tfvars, stg.tfvars, dev.tfvarsを用諢?
.tfvars 各環藹??の設定
aws_access_key    = "XXXXXXXXXXXXXXXXXXXX"
aws_secret_key    = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
aws_region        = "eu-west-1"
main.tf
terraform {
  required_version = "= 0.12.26"
}
provider "aws" {
  version    = "2.66.0"
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
  region     = var.aws_region
}
var.tf 空の藹??け逧?
variable aws_access_key {}
variable aws_secret_key {}
variable aws_region {}

Terraform で藹??数を使う - Qiita
実行時縺?-var-fileで値ファイルを指定して環藹??などを切り替えると良いかもしれない
terrafrom plan -var-file=dev.tfvars
terrafrom plan -var-file=prod.tfvars
変数ファイル指定がないときは藹??数縺?defaultに入れてお縺?、descriptionで藹??数の説譏?もかける
variable "foo" {
  type = "string"
  default = "default-var"
  description = "Sample Variable"
}
変数ファイルを異なるバックエンド(フォルダ構成)で共有したいときはシンボリックリンクを貼る
 ln -s ../common/shared_var.tf shared_var.tf

credentials等の軆??匿したい変数を外部のファイルやコマンドライン藹??数から読み込む
variable "credentials_file" {} @var.tf 変数を定義し空にしてお縺?
credentials = file(var.credentials_file) @main.tf ファイルを読むがファイル名は藹??謨?
terraform plan -var 'project=' -var 'credentials_file=.json' @cmd プロジェクトとクレデンをコマンド時に指定
他にもvars.tfvars設藹??ファイ繝?(行鬆?variableが不要)、TF_VAR_環藹??変数による指定

-var-fileで藹??数ファイルを譏?示し縺?cmd、ファイル名縺?.tfvars/.tfvars.json
-varで藹??数を譏?示し縺?cmd
順蠎?があり後の読込でオーバーライド


HCLの藹??数は基譛?2種饅??縺?local縺?variable
variableはグローバル藹??数、ファイル藹??やコマンドラインから使える
その臀??の藹??数藹??照方觸??としては・??上から優先に適藹??)
 コマンド引数 一時的に使逕?
 変数ファイ繝? terraform.tfvars git管理等で藹??部ファイルで・??
 環藹??変謨? TF_VAR_ 実行ログに觸??らない鍵情報軆??
workspaceは使繧?ない、moduleを限定的に使う
設藹??をコード化>Gitレポジトリに置縺?>設藹??内容、作業履歴の譏?確化、チームでの運用性向上

■特諤?
TFの影響を藹??映するの縺?terraform applyの時だけ、tfファイル縺?tfstateの差分を実際にリソース臀??成する
 tfファイルで藹??更した場合、TFはリソースの再作成を行うので臀??度觸??えることになる(大臀??は単位が権限だったりで影響がないだけ縺?planで鐔??注意)
terraform plan縺?tf縺?tfstateと藹??体の差なので、実体があってもtfstateになけれ縺?will be created縺?plan時は表示される
terraform import縺?tfファイルからtfstateへ鐔??載だけを行う(実体からも情報を藹??得しtfstateに入れる)
 カレントdirの蜈?.tfファイ繝?or.tf.jsonを評価するの縺?tfファイルの名は臀??でもいい
各リソースに対し縺?TF化するかは選択ができるが、TFする場合はそのリソースに藹??要な全鐔??載をTFファイルに鐔??う
terraform import tfResourceID.yourResourceName gcpIdentifier のコマンド
 terrafrom import google_bigquery_dataset.tf-1 bangboo-prj/test-dataset
 tfResourceID(リソー繧?IDというようタイプ:リソース種蛻?)縺?TF指定のもの、yourResourceName (リソース名)は任諢?のも縺?
 構成ファイ繝?.tfはローカルのものが使繧?れる、importする縺?tfstateに藹??映
 GCP identifier縺?TF公藹??サイトの各サービスの臀??番臀??import項目を見ると指定内容が分かるの縺?GCPを見て拾って縺?る
 terraform state list TF化されているリソースを見る
 terrarorm apply時にもtfstateは更新される(オプショ繝?-refresh=falseで無効可・??
  またapply時縺?-target=xxxでデプロイするリソースを特藹??できる(TFファイルだけでな縺?TFステートもターゲットになる)

Syntax - Configuration Language - Terraform by HashiCorp コメント縺?#が基本、//や/**/も使える
Terraform v0.12で藹??繧?るHCLの鐔??述につい縺? - Qiita localsや変数、リストやマップ等
Terraform職人再入門2020 - Qiita yamldecodeやjsonencode等
Terraformの基譛? - Foreverly (hatenablog.com)
変謨?
 variable(input var)縺?cmd実行時に藹??数を上書きできるが、localsはできない
 output縺?apply時縺?terminalで値が確鐔??できる、moduleから値を藹??得する

google_bigquery_connection | Resources | hashicorp/google | Terraform Registry
ドット繋縺?で値を扱える
resource "google_sql_database_instance" "instance" {
    provider         = google-beta
    name             = "my-database-instance"
}
resource "google_sql_database" "db" {
    instance = google_sql_database_instance.instance.name
    name     = "db"
}

ToSetは値設定をするが順不同で重複を省縺?
resource "xxx" "aaa" {
    for_each = toset(["foo", "bar", "bar"]) 縺?bar, foo
    name = each.key
}

for_each/eachのループ
locals {
    sg = {
        foo = "FOO"
        bar = "BAR"
    }
}
resource "xxx" "aaa" {
    for_each = local.sg
    name = each.key
    description = each.value
}

mapをリストしたものをfor_each
locals {
  images = [
    { name = "foo", image = "alpine" },
    { name = "bar", image = "debian" },
  ]
}
resource "docker_container" "this" {
  for_each = { for i in local.images : i.name => i } # こう書縺?のが正しい
  name     = each.value.name
  image    = each.value.image
}

terraform importはリソース単位、更新はできず削除してから追加 terraform state rm google_bigquery_dataset.tf-1
 実設藹??縺?importの内容が違う場合は藹??設藹??の情報縺?tfstate化されるようだ(importは項目を入れ込む感じ?)
  なので藹??環藹??に藹??更を加えるに縺?terrafrom apply、tfstate化もされtfファイ繝?/tfstate/実設藹??縺?3者で同じになる
 apply時縺?tfstateと藹??設藹??が違う場合、例えば既藹??設藹??がある場合は重複エラーになりapplyできず、importしtfstateと藹??設藹??を同じにしてから、tfファイルの内容をapplyすることが必要
terraform importで対象プロジェクトを間違えると繝?マる
 通常縺?terraform applyで縺?providerの情報を使用してプロジェクトを決めるが、importは繝?ードコードするの縺?importを間違えばなぜ変な藹??更がでるのか繧?からな縺?なる(プロジェクトが変なもの縺?stateを調べ、terraform state rmするしか)

for_eachで書いた.tfをterraform importする | DevelopersIO (classmethod.jp)
 ユーザ指定は user:aaa@xxx.com だったりメールグループなら group:aaa@xxx.com

■セットアップ
 作業ディレクトリの臀??成(プロジェクトに対するローカルのフォルダ)
 プロバイダを指定したtfファイルの臀??成(gcs縺?stateを置く設藹??が良い
  provider "google" {
    project = "bangboo-kuso"
  }
  terraform {
    backend "gcs" {
      bucket = "bangboo-kuso-terraform"
    }
  }
 terraform init ローカルに対して初期化
 プロジェクトレベ繝?ownerのサービスアカウントを持ってお縺?
 セットアップする際縺?tfsate縺?backend保存場所縺?bucket部分をコメントアウト
 bucketを作るterraformを実施しbucketを作成しつ縺?local縺?tfstateファイルを作成
 再蠎?terraformをする縺?tfstateファイルがbucketにコピーされる
 bucket部分のコメントアウトを外すと次回tfからはバケット縺?tfstate更新する
  このときローカ繝?tfstateの内容をバケットに写すか聞かれるが写す
  (写さないと差分しかバケットに鐔??かないの縺?import等が必要になる)

■既藹??リソース縺?TF化のおおよその臀??讌?
 リソースタイプと名前を定義したtfファイルを作成する(任諢?のリソース名、基本ユニーク、郤?められるものは重複してもいい)
  resource "google_cloudfunctions_function" "fuckin" { ... をtfファイルに鐔??載
   tfResourceID(リソー繧?IDというようタイプ:リソース種蛻?)縺?yourResourceName (リソース名) だけ縺?
 リソースタイプや個別パラメータは公藹??ドキュメントを藹??照しながら定鄒?
 https://registry.terraform.io/providers/hashicorp/google/latest/docs
  (簡単)tfファイル内で・??行目以外は空で、terraform planをするとエラーで藹??要なものが分かるので、それを埋める
  planが通ると自動的に値をサーバから拾って縺?る(importすれ縺?tfstate.tfに入っている or コピーし縺?TFに入れる)
  planでダメならterraform state show tfResourceID.yourResourceName 縺?stateを見縺?tfファイルにパラメータを定義してい縺?
   暫藹??に空でリソースをTFファイルに鐔??載しterraform import、次縺?tfstateを調査する
    terraform state list tfstateファイルにあるアセットを一隕?
    terraform import google_bigquery_table.xxx project/dataset/table インポート
    terraform state show google_bigquery_table.xxx tfstateの該当部を表示
    terraform state rm  google_bigquery_table.xxx インポート藹??り消し
  TF定義は鐔??数の方觸??がある、最終GCP公藹??縺?RestAPIで確認するしか
 terraform importする(公藹??ドキュメントの臀??番臀??縺?importコマンドの指定がある)
 terraform planして差分がな縺?なるま縺?tfファイルを修正する
  import(tfstate)の修正は臀??蠎?stateから削除する terraform state rm google_bigquery_dataset.tf-1
  (既藹??リソースがあってもあ縺?ま縺?tfファイル縺?tfstateの差分なの縺?initした状態縺?planしてもup-to-dateと表示されるだけ)
 tfstateファイルにおかしなものが無いか確鐔??、keyとか含まれないか

■個蛻?
リファレンス縺?optionalとなっていてもtfファイルでは藹??要な場合もある
 tfstateファイルからは藹??要ないとして自動的に削除されるが
スプシをBQでみれるFederatedQueryはテーブルだけ定義しimportしstate show調譟?
 urlをTFファイルに鐔??載する
シャーディング・??日臀??別・??テーブルは藹??義できないので縺?
 生成するクエリの方をTF化したい
Authorized viewはモジュールがあるがconflictがあり全觸??えする場合がありTF化にまだ向かない

google_bigquery_dataset_iam_memberでもAuthorized viewをはがしてしまう。
Authorized viewを使っている個所縺? google_bigquery_dataset_access あるい縺? google_bigquery_dataset 縺? access フィールドを使う。
google_bigquer_dataset_iam_policy 縺? google_bigquery_iam_binding 縺? Authoritative で権限追加でなく権限強制設定でコンソール臀??荳?分を引き剝がすので、使繧?ない方が安全。
なお、Authorized view 縺? Routines 縺?Terraform化できない事が分かっている(2022/4時点・??
ScheduledQuery 縺? Terraform化できるが実行者の設定ができない(Terraform実行者がSQ実行者?誰・??)

BQ関連ではデータセット定義、テーブル藹??義、ビュー藹??義、フェデレテッドクエリ藹??義、ScheduledQuery定義をTerraformで鐔??い
BQ権限定義、AuthorizedView定義、Routines定義は鐔??繧?ない

 BQ権限を定義するならデータセットレベル縺?google_bigquery_dataset_access 
  プロジェクトレベル縺?google_project_iam_memberで藹??施すると別なので藹??全らしい?

■TF公藹??ドキュメント
google_organization_iam_custom_role | Resources | hashicorp/google | Terraform Registry
google_organization_iam | Resources | hashicorp/google | Terraform Registry
カスタムロールを設藹??して、組織レベル縺?IAMでそれを使いたい
 TF縺?org_iamページ縺?Argument reference縺?role項目を見る縺?
  Note that custom roles must be of the format organizations/{{org_id}}/roles/{{role_id}}
 TF縺?org_iam_custom_roleページ縺?Attributes  reference縺?role項目を見る縺?
  id - an identifier for the resource with the format organizations/{{org_id}}/roles/{{role_id}}
 で臀??記と分かる、使用側と被使用側縺?TFマニュアルを両方確認する
resource "google_organization_iam_custom_role" "my-custom-role" {
  role_id     = "myCustomRole"
  org_id      = "123456789"
  title       = "My Custom Role"
  description = "A description"
  permissions = ["iam.roles.list", "iam.roles.create", "iam.roles.delete"]
}
resource "google_organization_iam_member" "my-organization" {
  org_id  = "123456789"
  role    = google_organization_iam_custom_role.my-custom-role.id
  #あるいは通蟶?"roles/bigquery.dataEditor"のようにいれるがorganizations/0123456789/roles/chinkoといれる
  member  = "user:jane@example.com"
}

resource縺?2番目リソース名を定義しますが任諢?の名前を指定します
 ここが同じ項目はユニーク制限がない場合は追加としてまとめられます
 通常はユニークにしterraformで管理するリソース名(yourResourceName)を宣鐔??します
  窶?1番目のリソースタイプ内でユニークにするのが基本・??全臀??でもユニークの方が分かり易い)

TFファイルに藹??義をしたい →定義したいリソース縺?Argument referenceの項目を設藹??
TFファイルに藹??義した内容を変数で使いたい →使いたいリソース縺?Attributes referenceを見る
terraform importしたい →インポしたいリソースのページ臀??番臀??縺?importコマンドの指定を見る

■他に臀??般的縺?TF(既藹??がimportされると以下で藹??更をapplyして運用・??
 terraform -v 稼働確鐔??
 terraform fmt ファイルの鐔??述フォーマットを整える
 terraform validate ファイルの觸??險?
 terraform plan アクションを計逕?
 terraform apply 最後に藹??更を適藹??
 terraform show ステータスを確鐔??、一隕?
 terraform destroy で簡単にインフラの吐き、initができないとき必要そう

■特藹??のリソースだけ適藹??したい
 terraform plan -target="tfResourceID.yourResourceName"
 terraform apply -target="tfResourceID.yourResourceName"
 TFファイルだけでな縺?TFステートもターゲットに含まれる
 これ縺?TFファイルにコードがな縺?TFステートだけにあるものを指定して削除軆??もできる

■TF縺?count
数を指定してその個数のリソースを作る。なのだが
 enable_lien = true モジュール蛛?/変数側でこう設藹??し
 count = var.enable_lien ? 1 : 0 リソース側縺?3項演算子を使え縺?IFのように使える
  窶?for loopのようなインクリ縺?count"+="でな縺?"="縺?1発藹??行なの縺?3項演算子縺?IFになる

■エラ繝?
bigquery access denied:
gcloud auth login --enable-gdrive-access
gcloud auth application-default login --scopes="https://www.googleapis.com/auth/drive","https://www.googleapis.com/auth/cloud-platform"
BigQuery縺?Googleドライブデータへのクエリでエラーが出るときの対蜃? (zenn.dev)

觸??他処理でロックが残る:
他の臀??業者がいなければ、terraform apply -lock=false で臀??時的に無鐔??をして軆??行
エラ繝?IDに対し縺? terraform force-unlock id_num963103164
Terraform 縺? state のロックを解除する方觸??、ロックを手動で鐔??う方觸?? | ゲンゾウ用ポストイット (genzouw.com)
Terraform縺?State Lockエラーが発生したら | DevelopersIO (classmethod.jp)


■terraformのバージョン管理
.terraform.lock.hclファイル縺?GCP provider等のライブラリのバージョン管理をしている、pyenv縺?Pipfile.lockみたい縺?Hash差分が記載されている、terraform init等で生成されapply時の設定が担保される、通蟶?tfファイル縺?providerのバージョンを記載すればよいので臀??要と思繧?れる

.terraform-versionファイル縺?terraform自臀??の鐔??求バージョンを担保できる
tfenv縺?.terraform-versionファイルにはバージョンベタ書きしな縺?てもOK | DevelopersIO (classmethod.jp)
通常縺?tfenvを使えばよい、tfファイル縺?required_versionを記載すればよいので臀??要と思繧?れる

■tfenvを使う場合
tfenv install 1.0.0
tfenv list
tfenv use 1.0.0
 terraform init
 terraform workspace list
 terraform workspace select ore_space
main.tf作成し記載
 terraform fmt tfファイルのフォーマット(書藹??は適藹??で書けばいい)
  gcloud auth login ローカル操作のための鐔??險?
  gcloud auth application-default login SDKを実行のための鐔??險?
   API&Servicesでクレデンシャルは藹??得できそう、key=xxxx
既藹??のリソースを調譟?
terrafrom import google_storage_bucket.pri-bucket project-abc123/asia-northeast1/pri-bucket 縺?importとか
 terraform refresh tfstateの最新化、どのタイミングで使う?

■既藹??のリソースを調譟?
Terraform 縺? gcloud CLI を使用した完璧縺? Google Cloud インフラストラクチャの觸??築 | Google Cloud Blog
gcloud beta resource-config bulk-export --help
gcloud beta resource-config bulk-export --project=kuso12345 --resource-format=terraform --path=/path/to/dir/
 対藹??を見ると数が少ないgcloud beta resource-config list-resource-types --format=json --project=kuso12345

terraformer import google list --projects=xxxx-123 で対象のリソース確認
terraformer import google --resources=instances,forwardingRules --regions=us-west1 --projects=xxxx-123 とか

既藹??リソー繧?import
https://www.apps-gcp.com/terraformit-gcp/
https://qiita.com/uu4k/items/48d3ecfefe57dba1d7e1

■Terraform applyで諢?図しない権限削除で障害が発生する
Terraform x GCP で、IAM権限を全削除してしまった - Qiita
resource "google_project_iam_policy" "unko" {
  project = "my-project"
  role = "roles/noguso"
  members = [
    "serviceAccount:${google_service_account.baka.email}"
  ]
}
google_project_iam_policy:書き觸??えるので臀??は無縺?なる(他を消したいときに使う)
google_project_iam_binding:付荳?、Authritativeだが他は現状維持?
google_project_iam_member:付荳?、Non-authoritativeで藹??全、まとめ難いか
 窶?_iam_policy縺?_iam_binding縺?t_iam_memberは臀??緒に使えない
 窶?_iam_binding縺?_iam_memberは臀??緒に使える

google_bigquery_dataset_iam_binding:(承鐔??済みビューの権限はな縺?なる>google_bigquery_dataset_accessを使え)
google_bigquery_dataset_iam_member:role縺?memberを1蟇?1縺?resourceを作りま縺?る、Non-authoritative
 窶?_iam_policyや_bindingはまとめ易そうだが権限消しそう

google_bigquery_dataset_iam_memberでもAuthorized viewをはがしてしまう。
Authorized viewを使っている個所縺? google_bigquery_dataset_access あるい縺? google_bigquery_dataset 縺? access フィールドを使う。

Terraform 縺? GCP のサービスアカウントを管理する - Eng (なりたい) (hatenablog.com)
Terraform 縺? GCP IAM 設藹??どれ使うのがいいのか - pokutuna (scrapbox.io)
google_project_iam | Resources | hashicorp/google | Terraform Registry
Authoritative: TFに譏?示していないものをApply時に削除しますという諢?、TFの権威
Non-authoritative: TFは権威を示さず、TFに譏?示していないものは現状維持ですという諢?

■勝手に公開
terraform vpc auto_create_subnetworks = falseにせなサブネットを公開して臀??りよる
Cloud sql縺?tfファイルに鐔??述がな縺?てもtf stateに縺?PWが出てしまう>tf化した縺?ない

■Applyの臀??存関臀??縺?depends_on(プロジェクト作成の前に権限を付荳?しようとしてエラー軆??の順蠎?)
[Terraform]Module間の値の藹??け渡しについ縺? | DevelopersIO (classmethod.jp)
 これより先にあれをTFして縺?れという記霑?

■データセット
google_bigquery_dataset | Resources | hashicorp/google | Terraform Registry
スキーマ藹??得: bq show --schema --format=prettyjson bangboo-prj:test-dataset.tbl001
ビューはコンソール・??BQ>該藹??ビュー・??detailからコピ繝?

■組織ポリシ繝?
google_organization_policy | Resources | hashicorp/google | Terraform Registry
制軆??につい縺?  |  Resource Manager のドキュメント  |  Google Cloud

■parallelismで早縺?なるかもしれない
あなた縺?terraform planを手軽に饅??速化する(かもしれない)魔法の鐔??葉 - Qiita
シェル藹??数を設藹??、確鐔??cmd縺? printenv
export TF_CLI_ARGS_plan="--parallelism=50"
export TF_CLI_ARGS_apply="$TF_CLI_ARGS_plan"

■テスト
TF Apply後には觸??証をしっかりしたい、最菴?Apply後縺?Planを再実行したい、テストスクリプト的にチェックしたい
適藹??されていないことや、TF定義縺?tfstateと藹??設藹??の差分が想藹??と違うことがある感じがするからだ
moduleを含めて条件的な書き方だと、適藹??の順蠎?の関臀??で適藹??が抜け2回以臀??TF applyしないといけなかったり

■TFファイルを分割し部分的に別環藹??縺?TFファイルを移鐔??したい
tf stateファイルを新環藹??用にコピ繝?
TFファイルを分割・??現鐔??の部分的に削除したTFファイル、と新環藹??用縺?TFファイルを準備
tf stateから不要部分を削髯?
 terrafrom state rm {{asset}}
terrafrom planで差分がないことを確鐔??
新環藹??用にコピーしたtf stateファイルを編集し準備
 下縺? terraform state push xxx.tfstate で藹??更された状態をtf stateファイルに書き戻すことができる?
 このコマンドを実行する前に藹??要に藹??じ縺? terraform state pull で最新の状態を藹??得?
 ダメなら terraform state rm で臀??要分を削る
新環藹??用縺?tfファイルを準備
新環藹??で臀??記を実行
 terraform init
 terraform state push xxx.tfstate
 terraform planで差分がないことを確鐔??

■GCP権限(メールの藹??名時)
GCP縺?GWS gmailメールの藹??名に追従して権限も付荳?状態も変化がない
しかしterraformは追従しないためtfファイルで使っている場合は藹??更する

■gcloud cmd
https://www.devsamurai.com/ja/gcp-terraform-101/
 gcloud projects list 権限あるプロジェクトを表示
 gcloud config set project [prjID] ワーキングプロジェクトの設定
 gcloud services enable iam.googleapis.com サービスの有効化
 gcloud iam service-accounts create terraform-serviceaccount \
  --display-name "Account for Terraform" サービスアカウント作成
 gcloud projects add-iam-policy-binding [PROJECT_ID]
  --member serviceAccount:terraform-serviceaccount@[PROJECT_ID].iam.gserviceaccount.com --role roles/editor 権限付荳?
 gcloud iam service-accounts keys create path_to_save/account.json
  --iam-account terraform-serviceaccount@[PROJECT_ID].iam.gserviceaccount.com クレデン発鐔??
 export GOOGLE_CLOUD_KEYFILE_JSON=path_to/account.json クレデン設定
↑サービスアカウントで鐔??証 環藹??変数にファイルパスを渡す
 gcloud auth application-default login だと個莠?
 これにクレデンシャルファイルのパスを渡すとサービスアカウント縺?gcloudコマンド打てるはず

Terraformで鐔??数リージョンをまたいだリソース制御する (mosuke.tech)
Terraform workspaceを利用して環藹??豈?のリソース名の藹??更を行う (mosuke.tech)


End

Posted by funa : 10:14 PM | Web | Comment (0) | Trackback (0)