├── README.md ├── docker-compose.yaml └── migrations ├── ddl └── schema.sql └── dml └── dml.sql /README.md: -------------------------------------------------------------------------------- 1 | # Spanner & wrench & spanner-cli by docker-compose 2 | 3 | ## Requirements: 4 | * docker >= 19.03.0+ 5 | * docker-compose >= 1.27.0+ 6 | 7 | ## Quick Start 8 | * Clone or download this repository 9 | * Go inside of directory, `cd compoose-spanner` 10 | * Run this command `docker-compose up -d` 11 | 12 | ## Environments 13 | This Compose file contains the following environment variables: 14 | 15 | * `PROJECT_ID` the default value is **test-project** 16 | * `INSTANCE_NAME` the default value is **test-instance** 17 | * `DATABASE_NAME` the default value is **test-database** 18 | 19 | ## Access to spanner: 20 | * `SPANNER_EMULATOR_HOST=localhost:9010` 21 | 22 | ## Access to spanner with spanner-cli: 23 | 24 | * Run this command `docker-compose exec spanner-cli spanner-cli -p test-project -i test-instance -d test-database` 25 | * **project:** test-project (as a default) 26 | * **instance:** test-instance (as a default) 27 | * **database:** test-database (as a default) 28 | 29 | ``` 30 | $ docker-compose exec spanner-cli spanner-cli -p test-project -i test-instance -d test-database 31 | Connected. 32 | spanner> 33 | -> show tables; 34 | +-------------------------+ 35 | | Tables_in_test-database | 36 | +-------------------------+ 37 | | Singers | 38 | | Albums | 39 | +-------------------------+ 40 | 2 rows in set (0.01 sec) 41 | ``` 42 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | 4 | # Spanner 5 | spanner: 6 | image: gcr.io/cloud-spanner-emulator/emulator:1.2.0 7 | ports: 8 | - "9010:9010" 9 | - "9020:9020" 10 | 11 | # Init (Create Instance) 12 | gcloud-spanner-init: 13 | image: gcr.io/google.com/cloudsdktool/cloud-sdk:332.0.0-slim 14 | command: > 15 | bash -c 'gcloud config configurations create emulator && 16 | gcloud config set auth/disable_credentials true && 17 | gcloud config set project $${PROJECT_ID} && 18 | gcloud config set api_endpoint_overrides/spanner $${SPANNER_EMULATOR_URL} && 19 | gcloud config set auth/disable_credentials true && 20 | gcloud spanner instances create $${INSTANCE_NAME} --config=emulator-config --description=Emulator --nodes=1' 21 | environment: 22 | PROJECT_ID: "test-project" 23 | SPANNER_EMULATOR_URL: "http://spanner:9020/" 24 | INSTANCE_NAME: "test-instance" 25 | DATABASE_NAME: "test-database" 26 | 27 | # DB Migration (Create Table) 28 | wrench-crearte: 29 | image: mercari/wrench:1.0.3 30 | command: "create --directory /ddl" 31 | environment: 32 | SPANNER_PROJECT_ID: "test-project" 33 | SPANNER_INSTANCE_ID: "test-instance" 34 | SPANNER_DATABASE_ID: "test-database" 35 | SPANNER_EMULATOR_HOST: "spanner:9010" 36 | SPANNER_EMULATOR_URL: "http://spanner:9020/" 37 | volumes: 38 | - ./migrations/ddl:/ddl 39 | restart: on-failure 40 | 41 | # DB Migration (Insert data) 42 | wrench-apply: 43 | image: mercari/wrench:1.0.3 44 | command: "apply --dml /dml/dml.sql" 45 | environment: 46 | SPANNER_PROJECT_ID: "test-project" 47 | SPANNER_INSTANCE_ID: "test-instance" 48 | SPANNER_DATABASE_ID: "test-database" 49 | SPANNER_EMULATOR_HOST: "spanner:9010" 50 | SPANNER_EMULATOR_URL: "http://spanner:9020/" 51 | volumes: 52 | - ./migrations/dml:/dml 53 | restart: on-failure 54 | 55 | # CLI 56 | spanner-cli: 57 | image: sjdaws/spanner-cli:v1.0.0 58 | environment: 59 | SPANNER_EMULATOR_HOST: "spanner:9010" 60 | command: ['sh', '-c', 'echo this container keep running && tail -f /dev/null'] 61 | -------------------------------------------------------------------------------- /migrations/ddl/schema.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE Singers ( 2 | SingerId INT64 NOT NULL, 3 | FirstName STRING(1024), 4 | LastName STRING(1024), 5 | SingerInfo BYTES(MAX) 6 | ) PRIMARY KEY (SingerId); 7 | 8 | CREATE TABLE Albums ( 9 | SingerId INT64 NOT NULL, 10 | AlbumId INT64 NOT NULL, 11 | AlbumTitle STRING(MAX) 12 | ) PRIMARY KEY (SingerId, AlbumId), 13 | INTERLEAVE IN PARENT Singers ON DELETE CASCADE; 14 | -------------------------------------------------------------------------------- /migrations/dml/dml.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (12, 'Melissa', 'Garcia'); 2 | INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (13, 'Russell', 'Morales'); 3 | INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (14, 'Jacqueline', 'Long'); 4 | INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (15, 'Dylan', 'Shaw'); 5 | 6 | INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (12, 1, "Total Junk"); 7 | INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (13, 1, "Go, Go, Go"); 8 | INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (14, 1, "Green"); 9 | INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (15, 1, "Forever Hold Your Peace"); 10 | INSERT INTO Albums (SingerId, AlbumId, AlbumTitle) VALUES (15, 2, "Terrified"); 11 | --------------------------------------------------------------------------------