Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
wrench - Schema Management Tool for Cloud Spann...
Search
Yuki Ito
February 06, 2020
Technology
1.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
wrench - Schema Management Tool for Cloud Spanner -
Yuki Ito
February 06, 2020
More Decks by Yuki Ito
See All by Yuki Ito
newmo の創業を支える Software Architecture と Platform Engineering
110y
5
3.9k
Modular Monolith Go Server with GraphQL Federation + gRPC
110y
1
1.2k
Modular Monolith + Go @ newmo
110y
1
1.3k
Go + GraphQL @ newmo
110y
3
1.1k
Architect / Platform Team at KAUCHE
110y
1
740
Cloud Run + Observability / Reliability @ KAUCHE
110y
0
710
Cloud Run CI/CD + QA @ KAUCHE
110y
1
710
Microservices on Cloud Run @ KAUCHE
110y
0
350
KAUCHE Loves Go
110y
0
560
Other Decks in Technology
See All in Technology
PostgreSQL オプティマイザ統計の秘密
nori_shinoda
0
360
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
15k
Software Engineering in an AI-Driven World
erikjhordan_rey
0
120
詳解 never 型 - ボトム型の性質を深掘り
nealle
0
150
Active Directory と Entra ID のむむむな関係
murachiakira
PRO
3
1.6k
公共分野での生成AI活用
toru_kubota
1
240
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
230
cdkd (CDK Direct)
gotok365
3
250
bpf_arenaとstruct_opsを使うのが難しかった話
masu_mi
0
200
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
140
Technical Project Manager の役割とやりがい、少しだけ AI
yoshiiryo1
0
600
AIコーディングはじめました
miso
0
150
Featured
See All Featured
A better future with KSS
kneath
240
18k
Designing for Performance
lara
612
70k
Utilizing Notion as your number one productivity tool
mfonobong
4
640
A Soul's Torment
seathinner
8
3.9k
Speed Design
sergeychernyshev
33
2.2k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
Product Roadmaps are Hard
iamctodd
55
13k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
600
Producing Creativity
orderedlist
PRO
348
41k
Transcript
wrench - Schema Management Tool for Cloud Spanner - GCPUG
Spanner Day Yuki Ito
Merpay Architect Team Backend Engineer Yuki Ito
wrench ʮGoͷ৽ػೳΛͬͨDBεΩʔϚ ཧπʔϧʯ https://gihyo.jp/magazine/SD/archive/2019/201911
wrench https://github.com/mercari/wrench https://hub.docker.com/r/mercari/wrench
wrench > wrench help Usage: wrench [command] Available Commands: create
drop reset load apply migrate
wrench create > cat ./_examples/schema.sql CREATE TABLE Singers ( SingerID
STRING(36) NOT NULL, FirstName STRING(1024), ) PRIMARY KEY(SingerID); > wrench create --directory ./_examples/
wrench create
wrench drop > wrench drop
wrench reset > wrench reset --directory ./_examples/
wrench load > wrench load --directory ./_examples/ > cat ./_examples/schema.sql
CREATE TABLE Singers ( SingerID STRING(36) NOT NULL, FirstName STRING(1024), ) PRIMARY KEY(SingerID);
wrench apply -ddl > cat ./_examples/ddl.sql ALTER TABLE Singers ADD
COLUMN LastName STRING(1024); > wrench apply --ddl ./_examples/ddl.sql
wrench apply -ddl
wrench apply -dml > cat ./_examples/dml.sql INSERT INTO Singers(SingerID, FirstName)
VALUES("1", "Yuki"); > wrench apply --dml ./_examples/dml.sql
wrench apply -dml
wrench migrate > cat ./_examples/migrations/000001.sql ALTER TABLE Singers ADD COLUMN
LastName STRING(1024); > wrench migrate up --directory ./_examples/ 1/up
wrench migrate
Development DB DB DB Instance
Development CREATE TABLE Singers ( SingerID STRING(36) NOT NULL, FirstName
STRING(1024), ) PRIMARY KEY(SingerID);
Development CREATE TABLE Singers ( SingerID STRING(36) NOT NULL, FirstName
STRING(1024), LastName STRING(1024), ) PRIMARY KEY(SingerID);
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > cat ./_examples/schema.sql CREATE TABLE Singers ( SingerID STRING(36)
NOT NULL, FirstName STRING(1024), ) PRIMARY KEY(SingerID);
Development
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > wrench migrate create --directory ./_examples/ _examples/migrations/000001.sql is created
> ls _examples/migrations/ 000001.sql
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > cat ./_examples/migrations/000001.sql ALTER TABLE Singers ADD COLUMN LastNamo
STRING(1024);
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > wrench migrate up --directory ./_examples/ 1/up
Development
Development typo!!
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > cat ./_examples/schema.sql CREATE TABLE Singers ( SingerID STRING(36)
NOT NULL, FirstName STRING(1024), ) PRIMARY KEY(SingerID); > wrench reset --directory ./_examples/
Development
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > cat ./_examples/migrations/000001.sql ALTER TABLE Singers ADD COLUMN LastName
STRING(1024);
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > wrench migrate up --directory ./_examples/ 1/up
Development
Development
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development > wrench load --directory ./_examples/ > cat ./_examples/schema.sql CREATE
TABLE SchemaMigrations ( Version INT64 NOT NULL, Dirty BOOL NOT NULL, ) PRIMARY KEY(Version); CREATE TABLE Singers ( SingerID STRING(36) NOT NULL, FirstName STRING(1024), LastName STRING(1024), ) PRIMARY KEY(SingerID);
Development > wrench load --directory ./_examples/ > cat ./_examples/schema.sql CREATE
TABLE SchemaMigrations ( Version INT64 NOT NULL, Dirty BOOL NOT NULL, ) PRIMARY KEY(Version); CREATE TABLE Singers ( SingerID STRING(36) NOT NULL, FirstName STRING(1024), LastName STRING(1024), ) PRIMARY KEY(SingerID);
Development > wrench load --directory ./_examples/ > cat ./_examples/schema.sql CREATE
TABLE SchemaMigrations ( Version INT64 NOT NULL, Dirty BOOL NOT NULL, ) PRIMARY KEY(Version); CREATE TABLE Singers ( SingerID STRING(36) NOT NULL, FirstName STRING(1024), LastName STRING(1024), ) PRIMARY KEY(SingerID);
Development
Development Apply Migration Load Schema Commit DDL Create DDL File
Write DDL Reset DB NG OK
Development DB DB DB Instance
Deployment Create Tag Cloud Build Hook GCR Cloud Spanner GKE
Watch Push Migrate Deploy
Deployment Create Tag Cloud Build Hook GCR Cloud Spanner GKE
Watch Push Migrate Deploy
Deployment Migration Deployment Pipeline Cloud Spanner GKE
Deployment Migration Deployment Pipeline Cloud Spanner GKE
Deployment GKE Cloud Spanner Fetch Job Manifest ᶅ Exec `wrench
migrate` ᶄ Run Migration Job
Deployment GKE Cloud Spanner Fetch Job Manifest ᶅ Exec `wrench
migrate` ᶄ Run Migration Job
Deployment --- apiVersion: batch/v1 kind: Job metadata: name: db-migration spec:
template: spec: containers: - command: - /db/migrate.sh env: - name: SPANNER_INSTANCE_ID value: xxx - name: SPANNER_DATABASE_ID value: xxx - name: GCP_PROJECT_ID value: xxx - name: GOOGLE_APPLICATION_CREDENTIALS value: xxx image: gcr.io/xxxx…
Deployment GKE Cloud Spanner Fetch Job Manifest ᶅ Exec `wrench
migrate` ᶄ Run Migration Job
Deployment GKE Cloud Spanner Fetch Job Manifest ᶅ Exec `wrench
migrate` ᶄ Run Migration Job
Deployment wrench migrate up --directory /db
Deployment GKE Cloud Spanner Fetch Job Manifest ᶅ Exec `wrench
migrate` ᶄ Run Migration Job
Deployment Migration Deployment Pipeline Cloud Spanner GKE
Deployment Migration Deployment Pipeline Cloud Spanner GKE
Deployment GKE ᶄ Apply Deployment Manifest (Deploy New Container) ᶃ
Fetch Deployment Manifest
Deployment Create Tag Cloud Build Hook GCR Cloud Spanner GKE
Watch Push Migrate Deploy
Merpay Tech Fest 2020 https://events.merpay.com/techfest-2020