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
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
500
FDEが実現するAI駆動経営の現在地
gonta
2
200
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
110
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1k
霧の中の代数的エフェクト
funnyycat
1
420
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
850
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
300
GitHubCopilotCLIのスラッシュコマンドを自作してみる
htkym
0
100
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
230
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
650
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
210
Claude Team Plan導入・ガイド
tk3fftk
0
220
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
340
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
660
BBQ
matthewcrist
89
10k
The Limits of Empathy - UXLibs8
cassininazir
1
530
A Tale of Four Properties
chriscoyier
163
24k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
Done Done
chrislema
186
16k
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