Added spanner emulator as DB
This commit is contained in:
parent
3a73916d91
commit
c22c033e73
19
Makefile
19
Makefile
@ -0,0 +1,19 @@
|
|||||||
|
.PHONY: up down down-volume logs ps
|
||||||
|
|
||||||
|
up:
|
||||||
|
docker compose up -d spanner
|
||||||
|
|
||||||
|
init:
|
||||||
|
docker compose up -d spanner-init
|
||||||
|
|
||||||
|
down:
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
down-volume:
|
||||||
|
docker compose down -v
|
||||||
|
|
||||||
|
ps:
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
logs:
|
||||||
|
docker compose logs -f
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
CREATE TABLE item_stock (
|
||||||
|
id STRING(36) NOT NULL DEFAULT (GENERATE_UUID()),
|
||||||
|
name STRING(100),
|
||||||
|
amount INT64,
|
||||||
|
price NUMERIC,
|
||||||
|
sales_amount INT64
|
||||||
|
) PRIMARY KEY (id);
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
services:
|
||||||
|
spanner:
|
||||||
|
image: gcr.io/cloud-spanner-emulator/emulator:latest
|
||||||
|
container_name: spanner-emulator
|
||||||
|
ports:
|
||||||
|
- "9010:9010" # gRPC
|
||||||
|
- "9020:9020" # REST
|
||||||
|
|
||||||
|
spanner-init:
|
||||||
|
image: google/cloud-sdk:slim
|
||||||
|
container_name: spanner-init
|
||||||
|
depends_on:
|
||||||
|
- spanner
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
environment:
|
||||||
|
# Tell gcloud/client libs to talk to the emulator inside the network
|
||||||
|
- SPANNER_EMULATOR_HOST=spanner:9010
|
||||||
|
volumes:
|
||||||
|
- ./scripts/spanner-init.sh:/work/spanner-init.sh:ro
|
||||||
|
- ./ddl:/work/ddl:ro
|
||||||
|
working_dir: /work
|
||||||
|
entrypoint: [ "bash", "/work/spanner-init.sh" ]
|
||||||
30
scripts/spanner-init.sh
Normal file → Executable file
30
scripts/spanner-init.sh
Normal file → Executable file
@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
: "${SPANNER_PROJECT:?}"
|
||||||
|
: "${SPANNER_INSTANCE:?}"
|
||||||
|
: "${SPANNER_DATABASE:?}"
|
||||||
|
|
||||||
|
# 1) Wait for emulator gRPC port (inside compose network it's "spanner:9010")
|
||||||
|
for _ in $(seq 1 60); do
|
||||||
|
(echo >/dev/tcp/spanner/9010) >/dev/null 2>&1 && break
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
# 2) Point gcloud to the emulator (disable real IAM)
|
||||||
|
export SPANNER_EMULATOR_HOST=spanner:9010
|
||||||
|
gcloud config set auth/disable_credentials true >/dev/null
|
||||||
|
gcloud config set core/project "${SPANNER_PROJECT}" >/dev/null
|
||||||
|
gcloud config set api_endpoint_overrides/spanner http://spanner:9020/ >/dev/null
|
||||||
|
|
||||||
|
# 3) Create instance & database (idempotent)
|
||||||
|
gcloud spanner instances create "${SPANNER_INSTANCE}" \
|
||||||
|
--config=emulator-config --nodes=1 --description="Dev" >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
gcloud spanner databases create "${SPANNER_DATABASE}" \
|
||||||
|
--instance="${SPANNER_INSTANCE}" >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
# 4) Apply DDL
|
||||||
|
gcloud spanner databases ddl update "${SPANNER_DATABASE}" \
|
||||||
|
--instance="${SPANNER_INSTANCE}" \
|
||||||
|
--ddl-file="/work/ddl/schema.sql" >/dev/null
|
||||||
Loading…
x
Reference in New Issue
Block a user