https://github.com/nktks/dev-span-pu-scaler
AutoScalar of Cloud Spanner Processing Unit for develop environment
https://github.com/nktks/dev-span-pu-scaler
google-cloud-spanner spanner
Last synced: 7 months ago
JSON representation
AutoScalar of Cloud Spanner Processing Unit for develop environment
- Host: GitHub
- URL: https://github.com/nktks/dev-span-pu-scaler
- Owner: nktks
- License: mit
- Created: 2021-12-28T11:58:27.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-07-06T14:21:04.000Z (over 3 years ago)
- Last Synced: 2025-01-12T18:52:11.710Z (about 1 year ago)
- Topics: google-cloud-spanner, spanner
- Language: Go
- Homepage:
- Size: 25.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# dev-span-pu-scaler [][license]
[license]: https://github.com/nktks/dev-span-pu-scaler/blob/master/LICENSE
`dev-span-pu-scaler` is an autoscaler of Cloud Spanner Processing Unit for develop environment usecase.
When your project uses Cloud Spanner in a develop environment,
the required number of Spanner nodes(processing unit) depends on the number of dbs.
(Unless your develop environment workload needs high cpu)
Cloud Spanner node cost is not low cost,
you need to keep minimum processing unit by the number of using dbs.
`dev-span-pu-scaler` counts current db number of target instances, calculate required processing unit number, and apply it to spanner instances automaticaly.
# CommandLine Usage
```
dev-span-pu-scaler -h
Usage of dev-span-pu-scaler:
-buffer int
buffer db count to scale pu (default 3)
-instances value
comma separated instances
-project string
gcp project
-server
run server(for Cloud Run)
```
You need `roles/spanner.admin` on your gcloud client.
# Run as sceduled job with Cloud Schadular + Cloud Run
If you want to run dev-span-pu-scaler as scheduled job,
you can deploy to Cloud Run and run as Cloud Sceduler job.
- add Service Account
```
resource "google_service_account" "dev-span-pu-scalar" {
account_id = "dev-span-pu-scalar"
display_name = "dev-span-pu-scalar"
description = "sa for dev-span-pu-scalar"
}
variable "dev-span-pu-scalar-roles" {
default = [
"roles/errorreporting.writer",
"roles/cloudtrace.agent",
"roles/iam.serviceAccountUser",
"roles/run.invoker",
"roles/spanner.admin",
]
}
resource "google_project_iam_member" "dev-span-pu-scalar" {
count = length(var.dev-span-pu-scalar-roles)
role = element(var.dev-span-pu-scalar-roles, count.index)
member = "serviceAccount:${google_service_account.dev-span-pu-scalar.email}"
}
```
- Deploy dev-span-pu-scalar to Cloud Run
you need [ko](https://github.com/google/ko) to build container image
```
# install ko
make build-tools
# see Makefile for detail
GOOGLE_CLOUD_PROJECT= INSTANCES= make deploy
```
- Add Cloud Scaduler job
```
data "google_cloud_run_service" "dev-span-pu-scaler" {
name = "dev-span-pu-scaler"
location = var.location
}
resource "google_cloud_scheduler_job" "dev-span-pu-scaler" {
name = "dev-span-pu-scaler"
schedule = "0 * * * *"
time_zone = var.time_zone
http_target {
http_method = "GET"
uri = "${data.google_cloud_run_service.dev-span-pu-scaler.status[0].url}/"
oidc_token {
service_account_email = google_service_account.dev-span-pu-scaler.email
audience = data.google_cloud_run_service.dev-span-pu-scaler.status[0].url
}
}
}
```