Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Terraformerのおはなし
Search
int
October 02, 2019
Programming
3.7k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Terraformerのおはなし
int
October 02, 2019
More Decks by int
See All by int
CIのモニタリングにstackdirver使ってみてる話
int_tt
0
150
Other Decks in Programming
See All in Programming
What's New in Android 2026
veronikapj
0
150
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
530
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
数百円から始めるRuby電子工作
tarosay
0
100
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
610
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
230
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
120
自作OSでスライド発表する
uyuki234
1
3.9k
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.2k
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
共通化で考えるべきは、実装より公開する型だった
codeegg
0
270
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
From π to Pie charts
rasagy
0
240
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
380
How to train your dragon (web standard)
notwaldorf
97
6.7k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
190
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Exploring anti-patterns in Rails
aemeredith
3
450
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
360
Transcript
Terraformerͷ͓ͳ͠ Terraform meetup tokyo#2 LT @int_tt
࣍ ! Terraformerʹ͍ͭͯ ! ΞʔΩςΫνϟհ ! ػೳՃͷํ ! ௐͯΈͯ !
ࢀߟࢿྉ
terraformer ͬͨ͜ͱ͋Δਓʙ
Terraformerͱ ! https://github.com/GoogleCloudPlatform/terraformer ! WazeࣾͷSREνʔϜʹΑͬͯ࡞ ! ରԠ͍ͯ͠ΔSaaS,IaaSͷطଘใΛݩʹtfstateͱtfϑΝΠϧΛ࡞ ! ϦιʔεΛࢦఆ͢ΔͱҰׅͰશ෦(!) ɹɹɹɹɹɹɹɹɹ
͖࣋ͬͯͯ͘ΕΔ ! aws,gcp,datadogͨ͘͞Μͷproviderɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ ʹରԠ
͍͍ܰํ terraformer import google --resources=logging --projects=playground 2019/10/02 17:41:09 google importing
project playground-226302 region global 2019/10/02 17:41:10 google importing... logging 2019/10/02 17:41:10 [TRACE] GRPCProvider: GetSchema 2019/10/02 17:41:10 [TRACE] GRPCProvider: Configure 2019/10/02 17:41:10 [TRACE] GRPCProvider: GetSchema 2019/10/02 17:41:11 [TRACE] GRPCProvider: GetSchema 2019/10/02 17:41:11 [TRACE] GRPCProvider: Configure 2019/10/02 17:41:11 Refreshing state... google_logging_metric.hog 2019/10/02 17:41:11 [TRACE] GRPCProvider: GetSchema 2019/10/02 17:41:11 Refreshing state... google_logging_metric.fuga 2019/10/02 17:41:11 [TRACE] GRPCProvider: GetSchema 2019/10/02 17:41:11 [TRACE] GRPCProvider: ReadResource 2019/10/02 17:41:11 [TRACE] GRPCProvider: ReadResource 2019/10/02 17:41:12 google Connecting.... 2019/10/02 17:41:12 google save logging 2019/10/02 17:41:12 [DEBUG] New state was assigned lineage "7bfb14fa-5e9e-4fb8-456d-1feab006acdd" 2019/10/02 17:41:12 google save tfstate for logging . ├── generated │ └── google │ └── playground-226302 │ └── logging │ └── global │ ├── logging_metric.tf │ ├── outputs.tf │ ├── provider.tf │ └── terraform.tfstate └── provider.tf
resource "google_logging_metric" "fuga" { bucket_options { exponential_buckets { growth_factor =
"2" num_finite_buckets = "64" scale = "0.01" } } description = "fuga" filter = "resource.type=\"k8s_cluster\"\nresource.labels.location=\"us-central1-a\"\nresource.labels.cluster_name=\"standard-cluster-1\"\n" label_extractors = {} metric_descriptor { metric_kind = "DELTA" value_type = "DISTRIBUTION" } name = "fuga" project = "playground-226302" value_extractor = "EXTRACT(protoPayload.@type)" } resource "google_logging_metric" "hoge" { description = "hoge" filter = "resource.type=\"k8s_cluster\"\nresource.labels.location=\"us-central1-a\"\nresource.labels.cluster_name=\"standard-cluster-1\"\n" label_extractors = {} metric_descriptor { metric_kind = "DELTA" unit = "1" value_type = "INT64" } name = "hog" project = "playground-226302" }
ΞʔΩςΫνϟհ terraformer import google --resources=logging --projects=playground Terraformer લॲཧ providerͱͷ௨৴ औಘ݁Ռͷparse
ΞʔΩςΫνϟհ terraformer import google --resources=logging --projects=playground Terraformer લॲཧ providerͱͷ௨৴ औಘ݁Ռͷparse
•ίϚϯυͷparse • provider͝ͱͷॳظઃఆ • ରԠͯ͠ΔϦιʔε͔ʙ • ରԠ͍ͯ͠ΕͦͷϦιʔεͷҰཡΛऔಘ͠ɺIDͱϦιʔ ε໊Ληοτ͢Δ • providerͱͷ௨৴४උ ىಈ͔Β https://github.com/GoogleCloudPlatform/terraformer/blob/0.8.1/cmd/import.go ͷfunc ImportͷલลΓ
ΞʔΩςΫνϟհ terraformer import google --resources=logging --projects=playground Terraformer લॲཧ providerͱͷ௨৴ औಘ݁Ռͷparse
provider-google •ࢦఆͨ͠ϦιʔεͷRefresh(Read) Λୟ͍ͯ݁ՌΛड͚औΔ • rpc͔grpcͰ௨৴ https://github.com/GoogleCloudPlatform/terraformer/blob/0.8.1/cmd/import.go ͷfunc Importͷޙ ֤छproviderͷresourcesลΓ
ΞʔΩςΫνϟհ terraformer import google --resources=logging --projects=playground Terraformer લॲཧ providerͱͷ௨৴ औಘ݁Ռͷparse
•↑Ͱಘͨ݁ՌΛࣗྗͰparseͯ͠ tf,tfstateϑΝΠϧΛग़ྗ͢Δ https://github.com/GoogleCloudPlatform/terraformer/blob/0.8.1/cmd/import.go ͷfunc ImportFromPlanลΓ
ػೳՃͷํ ! ༰GCPͷlogging_metrics resouceͷରԠ ! PR(https://github.com/GoogleCloudPlatform/terraformer/pull/173)Λૹͬͨͱ ͖ʹͬͨ͜ͱ ! ଞαϯϓϧΛݩʹϦιʔεҰཡͷऔಘΛ͍ͯ͠߹Θͤ෦ΛΈཱͯ Δ(providers/gcp/logging.go)
! ࣮ߦ࣌ҾͱϝιουͷରԠ͚(providers/gcp/gcp_provider.go) ! READMEΛॻ͘(README.md) ! ΞʔΩςΫνϟͰݴ͏લॲཧͷ෦͚ͩʂʂʂ
func (g *LoggingGenerator) loadLoggingMetrics(ctx context.Context, client *logadmin.Client) error { metricIterator:=
client.Metrics(ctx) for{ metric, err := metricIterator.Next() if err == iterator.Done { break } if err != nil { return err } g.Resources = append(g.Resources, terraform_utils.NewResource( metric.ID, metric.ID, "google_logging_metric", "google", map[string]string{ "name": metric.ID, "project": g.GetArgs()["project"].(string), }, loggingAllowEmptyValues, loggingAdditionalFields, )) } return nil } ͜Εͱ
͜Εͱ͜Ε͚ͩ
ௐͯΈͯ ! providerΛ͏·͘͏͜ͱͰॲཧΛ࠷খݶʹ͑ͭͭɺࠓޙͷରԠ؆୯ʹ ߦ͑ΔΑ͏ʹͳ͍ͬͯΔ ! terraformerੌ͍͚Ͳterraformͷpluginػߏੌ͍ ! ֤छpluginSaasͷresourcesͷCRUD෦ΛநԽͯ͘͠Ε͍ͯΔๅ ശ !
terraformຊମʹґଘͤͣΤίγεςϜΛ૿͍ͯ͘͜͠ͱͰ͖ͦ͏
ࢀߟࢿྉ ! ιʔείʔυ:https://github.com/GoogleCloudPlatform/terraformer ! 3rd Party tool Λ͖͔͚ͬʹ Terraform ͷιʔείʔυΛগ͠ᅂΜͩ
https://chroju.github.io/blog/2019/05/14/read_terraform_source_code/ ! Terraform Provider࣮ ೖ(1): Custom Providerͷجૅ ! http://febc-yamamoto.hatenablog.jp/entry/terraform-custom-provider-01