/// BANGBOO BLOG ///
■21/5/2 10:14PM
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-startedHCLhttps://www.terraform.io/docs/language/index.htmlCLI aka cmd(アルファベットリストから使う)https://www.terraform.io/docs/cli/auth/index.htmlGCP用リファレン繧?https://registry.terraform.io/providers/hashicorp/google/latest/docs

お便強https://qiita.com/minamijoyo/items/1f57c62bed781ab8f4d7https://qiita.com/donko_/items/6289bb31fecfce2cda79https://www.apps-gcp.com/infra-automation-01/Terraform縺?GCP環藹??を構築してみる | GMOアドパートナーズグループ TECH BLOG byGMO (gmo-ap.jp)https://colsis.jp/blog/gcpterraform/
Infra as codeとしてインフラの觸??築や設藹??をコード化できる特にクラウドだと觸??築の自動化や構成管理等でのレバレッジが強力
■段髫?
Terraformと縺??基本知鐔??縺?Terraformのメリット4つを紹臀?? | テックマガジ繝? from FEnetインフ繝?
必要なリソースをTerraform化>workspaceの活逕?>main.tfの共通部分をmodule化

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

Terraform職人入門: 日々の運用で学んだ知鐔??を淡々とまとめる - Qiitaリソースの差分を無鐔??する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

Terraform縺?GCPのリソースの臀??成と藹??数から値を読み込む - y-zumiの日鐔?? (hatenablog.com)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_環藹??変数による指定
Input Variables - Configuration Language - Terraform by HashiCorp-var-fileで藹??数ファイルを譏?示し縺?cmd、ファイル名縺?.tfvars/.tfvars.json-varで藹??数を譏?示し縺?cmd順蠎?があり後の読込でオーバーライド

Terraformのベストなプラクティスってなんだろうか | フューチャー技術ブロ繧? (future-architect.github.io)
Workspace派、module派、ディレクトリ分離派


HCLの藹??数は基譛?2種饅??縺?local縺?variablevariableはグローバル藹??数、ファイル藹??やコマンドラインから使える
その臀??の藹??数藹??照方觸??としては・??上から優先に適藹??) コマンド引数 一時的に使逕? 変数ファイ繝? 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_eachTerraform縺?for_each縺?map縺?listを渡してループしたい - Qiitalocals {  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-accessgcloud 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_num963103164Terraform 縺? 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 listtfenv use 1.0.0
 terraform init terraform workspace list terraform workspace select ore_spacemain.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縺? printenvexport 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 cmdhttps://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
Comment (0)

■21/4/2 1:00AM
Linux cmd2
■プロキシを入れないとアクセスできない、が同セグメントは臀??要なためno proxy設藹??するLinuxの場合 export http_proxy=http://proxy:3128 export https_proxy=http://proxy:3128 export no_proxy=localhost,127.0.0.1,.in-xxx.comコマンドプロンプト set http_proxy=http://proxy:3128 set https_proxy=http://proxy:3128 set no_proxy=localhost,127.0.0.1,in-xxx.comPowerShell $env:http_proxy="http://proxy:3128" $env:https_proxy="http://proxy:3128" $env:no_proxy="localhost,127.0.0.1,in-xxx.com"

■ncコマンドでプロキシ確認 自分の環藹??から環藹??用縺?proxy に接続できるかどうか? apt install netcat-openbsd nc-vz. proxy 3128 でプロキシ確認 nc-vz 127.0.0.1 20-100 自分自身に対し縺?TCP20~100番ポートをスキャンし成功する縺?succeed!! cnc-likすると簡易的に好きなポートでサーバーを起動できる 特藹??のボートの逍?通確鐔??など縺? nc-lk 8000 -l オプショ繝?:サーバーモードで指定したポートで接続を待ち藹??ける 特権ポート (0-1023)までは、名前の通り特権が無いと、コマンドが通らない -kオプショ繝?:接続が終了してもプロセスを終了せず継続し新しい接続を待ち藹??ける レスポンスのデータを見たいなら、python モジュール軆??縺? python3-mhttp.server 8080
■LDAP mgr縺?LDAP LDAP managerは製品名で個人ユーザと所属グループが管理される。
製品概要 | 国産統合ID管理パッケージソフト「LDAP Manager」 OpenLdap縺?Linuxでよ縺?つか繧?れているディレクトリサービ繧? (ID管理)
OpenLDAP で理解するディレクトリサービス入門 | ほげほげテク繝?ロジ繝?
■sudoers につい縺? どのユーザやグループがど縺?sudo コマンドを利用することができるのかの藹??義の鐔??載があり、ユーザとグループの設定で権限を制御 どのユーザがど縺?sudo コマンドを利用することができるのか $sudo -l idコマンドで自分の所属サブグループを確鐔?? $id

元のペー繧?
/// BANGBOO BLOG /// - Linux cmd
Comment (0)

■21/4/2 12:00AM
Linux cmd
■Linux terminal
tabで入力補完
↑↓で入力履歴呼び出し
^q縺?Ctrl+qを押すという諢?蜻?
半角/全鐔??キー 日本鐔??を切り替える(画面右臀??にもIMEがある、win+spaceの場合も)
ls -la ディレクトリ内を表示
ls -a 隠しファイルを含み表遉?
 (GUI)ctl+h 隠しファイルを表示(メニューでもチェックで可・??
pwd 現ワーク中のディレクトリを表示
cd ../ 上に臀??がる
clear 表示内容を消す
mv beforeName.text afterName.txt ファイル名変譖?
rm -R ディレクトリ名 削除、ファイル縺?rm a.txt
ls -l > hoge.txt >結果を上書き
ls -l >> hoge.txt >>結果を追鐔??
printenv 環藹??変数表遉? printenv xで特藹??表示
grep aaa -rl ./ カレントディレクトリ以下からファイル内縺?aaaが含まれるファイルを検邏?
grep -R $keyword *.py .pyファイルからkeywordを検邏?
sudo - 一般ユーザが特権操作する sudo省逡?sudo -i rootに切り替える
sudo -iu <username> 特権ユーザ切り替え
テキスト選択
 Shift↑or↓ で鐔??全臀??
 home(+fn)で鐔??頭、end(+fn)で鐔??末移動

nano text.txt 作成あるいは開縺?、nano簡単かも、画面臀??コマンド縺?ctrl+?すればいい
 コマンドM-U縺?Esc+u
 ctrl+k で・??行削髯?

$()ドル鐔??号と括弧で囲んだコマンドは藹??行結果を出力し展開echo "現在のディレクトリは、$(basename $(pwd))です"
パッククォートは囲った中身をコマンドとして藹??行しその軆??果を出力echo "今日は、`date +%m月%d譌?`です。"
変数縺?$()とバッククォートを使ってワンライナ繝?【shell/bash】変数代入縺?``や$()の使う場面を忘れた時に鐔??る記法まとめ (zenn.dev)

■viエディ繧?
sudo apt install vim
vi text.txt ファイル臀??成あるいは開縺?
 vi縺?2つ・??αのモード ┣コマンドモード ┃┗コロンモード(exモード:祖先のラインエディタ・?? ┗入力モード
 https://docs.oracle.com/cd/E19253-01/816-3946/editorvi-5/index.html
 viのコロンモードコロンモードのコマンドは、こ縺?w、q、q!、x、$5... - Yahoo!知恵鐔??Escでコマンドへ抜ける
 ┗挿蜈? i (入力モード)
ファイル名を指定し保存 :w new_file_name.txt
強制臀??存のコマンド :w!
保存せず終了 :q 強制軆??了 :q!:10 10行目に移動:set number 行数を表示:num 現在のカーソル臀??置鐔??数を表示
クリップボードをペースト iで挿入モードに入り Shift+Insertvi内でコピペ:yコマンドのコピー、pコマンドのペーストなので臀??記の觸??にする 2yw ならカーソルから2単語コピーされます 3yl ならカーソルから3文字コピーされます y$ ならカーソルから行末までコピーされます p ならカーソルの藹??ろにペーストされます$ カーソルを行末縺?G カーソルを最終行行頭縺?- 前行の鐔??頭縺?Enter 次鐔??の鐔??頭縺?w カーソルを1語進めるb カーソルを1語戻すCtrl-d 1/2画面臀??縺?(down)Ctrl-u 1/2画面臀??縺?(up)Ctrl-f 1画面臀??縺?(foward)Ctrl-b 1画面臀??縺?(back)/文字列(Enter要) 文字列検邏?(スラッシ繝?) 笏?n 次の觸??索文字列縺? ┗N 前の觸??索文字列へ 保存して軆??了 :wq 保存して強制軆??了 :wq!
コマンド集 viコマンド集 (ritsumei.ac.jp)カーソル移動 viでのカーソル移動方觸??を一通りまとめました (eng-entrance.com)検索 【初心者向け】viでの文字列の觸??索方觸??を一通り (eng-entrance.com)
■環藹??変数は臀??記の順で探す、なので藹??要なら下位のものを上にコピ繝?
~/.bash_profile~/.bash_login~/.profile
source ~/.bash_profile 編集したbashrcをbash_profileに藹??映させる
 bashrc縺?bash起動豈?、bash_profileはログイン觸??
■SSHの設定
Linuxコマンド【 ssh-keygen 】認証用の鍵を生成 - Linux入門 - Webkaru
$ ssh-keygen
パスフレーズは空でも設藹??上は問題ないが塩っ觸??が足らん気が秘密鍵・??id_rsa)と公開鍵・??id_rsa.pub)が生成され、ホームディレクトリに臀??成される /home/yourID/.ssh/id_rsa /home/yourID/.ssh/id_rsa.pub.公開鍵をSSHサーバや外部サービスに登録する等して使う、秘密鍵は譏?かさないこ縺?
SSHクライアント縺?proxy越えの設定方觸?? (mydns.jp)
プロキ繧?binのインス繧?
$ sudo apt-get install connect-proxy
ホーム縺?sshキーができているの縺?$ vi ~/.ssh/configHost oketsu HostName 1.XXX.XXX.XXX User hoge IdentityFile ~/.ssh/id_rsa.pub        LocalForward 5912 localhost:5902 ProxyCommand connect-proxy -H proxy.syanai.in:8022 %h %p
Host github.com HostName ssh.github.com
Port 443
IdentityFile ~/.ssh/id_rsa.pub ProxyCommand connect-proxy -H proxy.syanai.in:3128 %h %p User githoge$ chmod 600 .ssh/config下記のように藹??行すると、ログイ繝?/GITできます。$ ssh oketsu
$ git clone githoge@github.com:kusogitry.git$ id 所属グループ等を表示
$ uname -n;id;date

■NW設藹??
/etc/resolve.conf
 nameserver 88.88.88.88~/.profile とか .bashrc とか  export http_proxy=http://proxy/3128/etc/apt/apt.conf
ip addr
  OSI藹??照モデ繝?
レイヤ繝?名称・??日本鐔??)主な役蜑?主なプロトコル・鐔??譬?レイヤ繝?7アプリケーション層アプリケーションごとの固有の通信鐔??定HTTP / SMTPレイヤ繝?6プレゼンテーション層文字コードやデータ形蠑?など、情報の表現方觸??を規定MIME / SSLレイヤ繝?5セッション層通信の開始・維持・軆??了など、通信セッションの管理ソケットレイヤ繝?4トランスポート螻?データ転送の信頼性や誤り訂正などを規定TCP / UDPレイヤ繝?3ネットワーク層異なるネットワーク間の通信方觸??を規定IP / ICMPレイヤ繝?2データリンク層同一ネットワーク内での通信鐔??定Ethernet / PPPレイヤ繝?1物理螻?ビット列を電觸??信号など物理的な信号に藹??觸??する規定1000BASE-T / 802.11
プライベートIPアドレスのクラス分け
クラ繧?アドレス軆??蝗?CIDR表鐔??クラ繧?A10.0.0.0 ~ 10.255.255.25510.0.0.0/8クラ繧?B172.16.0.0 ~ 172.31.255.255172.16.0.0/12クラ繧?C192.168.0.0 ~ 192.168.255.255192.168.0.0/16
■スクリプト実行
nohup python3 main.py & ユーザディレクトリ縺?nohup.outログが実行完了時に臀??度に臀??存される(重いと思繧?れる)nohup python3 main.py > /dev/null 2>&1 & ログなし nohupはバックグラウンド実行、ログアウトしても実行続けるjobs ジョブリストを出すfg ジョブ番号 フォアグラウンド実行に藹??えるbg ジョブ番号 バックグラウンド実行に藹??えるctrl c キャンセ繝?ctrl z 中断・??再開できる)crontab -e 編集crontab -l 確鐔??sudo service cron restart 再起動systemctl status cron 稼働の確認30 12 * * 0 python3 /home/app_hoge/main.py cronはバックグラウンド実行縺?nohup &を含めると藹??行されない、多分top プロセ繧?/CPU/メモリ軆??の情報、こちらで動いていれ縺?ps縺?statがsでも問題ない、多分ps auxps f -A プロセスをツリーで表示し便蛻?kill -lkill -SIGCONT プロセス番藹??sudo less /var/log/cron.logsudo tail -f /var/log/cron.logsudo less /var/log/syslogsudo tail -f /var/log/syslog
■ディスク系
ext4 一般的なデスクトップやファイルサーバ向け、16TBまで、ファイルシステムチェックで遅いxfs 高負闕?IOで大容驥?データ処理向け、ジャーナルなし、ファイルシステムチェックを短縮論理ディスク・??パーティショ繝?
/dev/sda1, /dev/sda2, /dev/sdb, /dev/sdf等、数藹??はパーティション番号、数藹??がないとパーティショ繝?1つだけ

ディスク拡張
lsblkdf -Thdu -sk * | sort -nr
#xfsの場合pvdisplaypvresize /dev/nvmvgdisplaylvdisplaylvextend -l +100%FREE /dev/vg001/lv001xfs_growfs /opt
#ext4の場合apt autoclean キャッシュあるがインストールされていないdebファイル削髯?apt autoremove 必要な縺?なったパッケージ削髯?disk -l /dev/nvm パーティション情蝣?growpart /dev/nvm 1 指定パーティションの容驥?拡張resize2fs /dev/nvm ファイルシステム拡張

容量調謨?
/var/cache 縺?apt-get clean, yum cleanで觸??す程度縺?

■swapをrootからvarに移動freeswapon -aswapを無効化swapoff -v /swap.extendedswapをvarに移動mv /swap.extended /var/etc/fstabからswapのエントリを/varに書き觸??えcat /etc/fstabswapを有効化swapon -a確鐔??free -h
■ライブラリアップデート
sudo apt updateapt list --upgradable | grep mysql
sudo apt install mysql-client=6.6.6-0ubuntu2.1~99.99.9sudo apt install mysql-client-core=6.6.6-0ubuntu2.1~99.99.9
窶?
dpkg-l | grep mysql

■WSL2https://qiita.com/zakoken/items/61141df6aeae9e3f8e36https://qiita.com/SAITO_Keita/items/148f794a5b358e5cb87bWSLインストール藹??はネットワークの設定が必要なら例) apt updateが出来ないWSL のバージョンはユーザの設定依存のため、version 2 (WSL2) が必要ならコマ ンドプロンプトで以下のコマンドを実行wsl --set-default-version 2アプリからWSL起動、CMDやPowershellならwslで起動 wsl --shutdown で停豁? 設藹??したユーザディレクトリにアクセスする(それぞれ別の場所)窶? WSLから縺? /mnt/c -> /mnt/c/Users/ore/Desktop/github窶? WINから縺? \\ws/$ -> \\wsl.localhost\Ubuntu-22.04\home\oreNW設藹??: WSL2のデフォルトでは起動するたび縺?Windowsホスト縺?DNS設藹??を基にして自動的縺?/etc/resolv.conf を生成するが、サーチリスト縺?Windows側から引き継がれないうえ、諢?図しないタイミングで勝手に再生成されてしまうので停止するnano/etc/wsl.conf下記追鐔??[network]generate ResolvConf = falseDNS設藹??sudo unlink /etc/resolv.confsudo nano /etc/resolv.conf以臀??のように設定nameserver 172.27.117.yynameserver 172.27.117.xxsearch in-xxx.com dns search list.xxx.comproxy設藹??nano-/profile以臀??の設定を既藹??プロキシの臀??に追加export http_proxy="http://proxy:3128"export https_proxy="http://proxy:3128"apt 縺? proxy 設藹??sudo /etc/apt/apt.conf以臀??のように設定Acquire: http: Proxy "http://proxy:3128",Acquire: https: Proxy "http://proxy:3128";WSL2を抜け、Windowsコマンドプロンプト縺?Ubuntu を再起動ore@unco-017:/mnt/c/Users/ore$ exit
rootでキーを作成する縺?github上でユーザがrootとなるsudo adduser aaasudo usermod -aG sudo aaasudo nano /etc/wsl.conf 下記を追鐔??しwsl再起動whoami[user]default-aaaecho $HOMEcd-mkdir.sshssh-keygen sudoだ縺?githubログイン時に名前がrootになってしまう/home/aaa/.ssh/id_rsacd- /home/aaanano/home/aaa/.ssh/configHost github.comHostName ssh.github.comPort 443ProxyCommand connect-proxy -H proxy:3128 %h %puser gitchmod 600 configeval "$(ssh-agent-s) sshエージェント起動ssh-add/home/aaa/.ssh/id_rsa sshエージェントに鍵を登骭?ssh-add確鐔??初回は接続yesをし縺? Warning: Permanently added (ssh.github.com): 443 (ED25519) to the list of known hosts.

wal-d Ubuntu-22.04 -u root パワシェル縺?rootユーザに切り替える場合wal.exe-shutdown パワシェルでシャットダウンや再起動の場合
パッケージの更譁?sudo apt update && sudo apt upgrade -yWSL環藹??設藹??cd /home/ore縺?/rootを表す(/homeでない)sudo apt install connect-proxy/rootにキーを生成ssh-keygenpassphrase xxXXcat /root/.ssh/id_rsanano/root/.ssh/configHost github.com HostName ssh.github.com Port 443 ProxyCommand connect-proxy -H proxy: 3128 %h %p user omecochmod 600 configシンボリックリンクを生成するcd /home/oreIn-s-/sshGithubサイトのユーザ設定縺?pub keyを登録し、承鐔??するcd /mnt/c/Users/ore/Desktop/githubgit clone git@github.com:oreore/xxx.gitping github.com で通信確認ができる
curl https://sdk.cloud.google.com | bashexec -1 $SHELLgcloud auth application-default loginURLコピペgcloud config configurations listgcloud config configurations create kusogcloud config set account xxx@xxx.comgcloud config set project project-xgcloud config configurations activate kusogcloud auth loginpyenv install 3.13.0pipenv-python 3.13.0gcloud components updategcloud components install cbt(BigTable例)(パスフレーズを省略できる) eval $(ssh-agent); ssh-add-/.ssh/id_rsatfenvをマニュアルインストー繝? https://github.com/tfutils/tfenvtfeny install 1.00.0tfenv listtfenv use 1.00.0export TF_CLI_ARGS_plan="-parallelism=50"export TF_CLI_ARGS_apply="$TF_CLI_ARGS_plan"環藹??変数を変更した場合縺? source ~/.bash_profile を藹??映
■SPFspfレコードはメールを送信する際、送信元サーバ縺?DNS上縺?IPアドレスを比較自社から藹??引先に送信したメール縺?SPFレコードを設藹??していなければ、相手側のメールサーバで迷惑メールとされ届かない場合も
送信元縺?DNSに送信元IPをSPFレコードに登録する(ドメインをSMTP縺?IPに藹??える?ドメイ繝? IN TXT v=spf1 ip4:172.16.0.1 -all(+が省略されているがIP許可、allを認証しないという諢?味・??送信蛛?SMTPサーバで縺?SPFをチェックせず何でも送菫?
藹??信蛛?MTAにて設定され(SMTPにはトランスファ縺?MTA、デリバリ縺?MDAspfを使えば先方がspfレコードを登録していなければメールが藹??け藹??れないpostfixやexim縺?SPFをonにする設藹??がある
spfレコードが設藹??されているかを確鐔??nsookup -type=TXT 調べたいドメイ繝?

■lsofはオープンファイルの略だがネットワークソケットの調譟?
lsofでファイルを開いているプログラムを特藹??する | 晴耕雨読 (tex2e.github.io)lsofコマンド入門 #Linux - Qiita

=============
■VS code
マルチカーソル・??ctrl+shift+↓
[Alt]+クリッ繧?カーソルを追加[Ctrl]+[Alt]+[↑]/[↓]カーソルを上下に追加[Ctrl]+[U]カーソル操作を元に戻す[Shift]+[Alt]+[I]カーソルを行末に追加[Ctrl]+[L]行を選択[Ctrl]+[Shift]+[L]選択中の文字列と同じものをすべて選択[Ctrl]+[F2]カーソル臀??置の単語と同じものををすべて選択[Shift]+[Alt]+[→]選択範囲の拡大[Shift]+[Alt]+[←]選択範囲の縮蟆?[Shift]+[Alt]+ドラッ繧?矩形選択[Ctrl]+[Alt]+[Shift]+[カーソ繝?]矩形選択[Ctrl]+[Alt]+[Shift]+[PgUp]/[PgDn]矩形選択 ページ臀??下VSCodeのマルチカーソル練習蟶? - Qiita
マルチカーソルを使繧?ないVSCodeはただ縺?VSCodeだ!〜解説編〜 - memo_md (hateblo.jp)

続き
/// BANGBOO BLOG /// - Linux cmd2
Comment (0)

Navi: <  8 | 9 | 10 | 11  >
-Home
-Column [136]
-Europe [9]
-Gadget [79]
-Web [137]
-Bike [4]

@/// BANGBOO BLOG ///