5
Architecture
Next.js
Cloud Run
GraphQL
Cloud Run
imgproxy
Cloud Run
microservice
Cloud Run
microservice
Cloud Run
Cloud
Storage
Cloud Load
Balancing
Cloud SQL
Memorystore
Cloud Run
(70~ services)
microservice(s)
Cloud Run
8
CI/CD with GitHub Actions self-hosted runner
monorepo
self-hosted runners
runner
runner
job
job
Cloud Run
Service
Deploy
GCR
Push
development
Same as development
production
External
Services
NAT
runner
job
Bazel
Remote Cache
11
Pull Request Environment
Next.js
Cloud Run
Cloud Load
Balancing
stable
pr123
Host: example.com
X-PR-ENV: 123
Host: pr123.nextjs.example.com
GraphQL
Cloud Run
stable
pr123
Service A
Cloud Run
stable
pr123
URL mask routing
..example.com
Slide 12
Slide 12 text
12
Pull Request Environment
Next.js
Cloud Run
Cloud Load
Balancing
stable
pr123
Host: example.com
X-PR-ENV: 123
Path: /graphql
Host: pr123.graphql.example.com
URL mask routing
GraphQL
Cloud Run
stable
pr123
Service A
Cloud Run
stable
pr123
Cloud Run Tag URL
https://pr123---echo-XXXXXXXXXX-an.a.run.app
..example.com
Slide 13
Slide 13 text
13
Pull Request Environment
self-hosted runners
runner
GCR
development
Service A
Cloud Run
main
pr123
Service A
Cloud Run
main
pr123
Service A
Cloud Run
main
pr123
Service A
Cloud Run
main
pr123
Service A
Cloud Run
main
pr123
Service A
Cloud Run
main
pr123
Service A
Cloud Run
main
pr123
Service A
Cloud Run
stable
pr123
Deploy
job
16
Canary Rollout
canaryrollout
Cloud Run
Service A
Cloud Run
stable canary
50% 50%
Service A
Cloud Run
stable
100%
Service A
Cloud Run
stable canary
100% 0%
Service B
Cloud Run
stable canary
50% 50%
Service B
Cloud Run
stable
100%
Service B
Cloud Run
stable canary
100% 0%
Error
Slide 17
Slide 17 text
17
Service A
Cloud Run
Cloud Scheduler
Canary Rollout
canaryrollout
Cloud Run
Service A
Cloud Run
stable
canary
Trigger every minute
Update traffic
Custom deploy tool
Monitoring
Get metrics
labels:
canaryrollout: enabled