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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
320
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
310
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
New "Type" system on PicoRuby
pocke
1
710
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
510
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
850
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
240
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
4.7k
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
110
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
770
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Spectacular Lies of Maps
axbom
PRO
1
790
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
Done Done
chrislema
186
16k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
530
Exploring anti-patterns in Rails
aemeredith
3
400
sira's awesome portfolio website redesign presentation
elsirapls
0
270
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Statistics for Hackers
jakevdp
799
230k
A designer walks into a library…
pauljervisheath
211
24k
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