在GCP上建立Cloud SQL的三種方式(Console,gcloud,Terraform)

2023-01-16 06:00:39

1 簡介

Cloud SQL 是GCP上的關係型資料庫,常用的有三種方式來建立:

(1) 介面操作

(2) 命令列 gcloud

(3) Terraform

在開始之前,可以檢視:《初始化一個GCP專案並用gcloud存取操作》。

2 GCP 操作介面

登陸GCP,選擇SQL,可以建立MySQL、PostgreSQL和SQL Server:

以PostgreSQL為例,可以選擇很多引數:

3 gcloud命令

通過命令列建立也很方便,可以自動化。命令如下:

$ gcloud sql instances create pkslow-testdb \
--database-version=POSTGRES_13 \
--region=us-west1 \
--cpu=1 \
--memory=3840MB \
--authorized-networks="0.0.0.0/0" 

Creating Cloud SQL instance...done.                                                                                                                             
Created [https://sqladmin.googleapis.com/sql/v1beta4/projects/pkslow/instances/pkslow-testdb].
NAME           DATABASE_VERSION  LOCATION    TIER              PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
pkslow-testdb  POSTGRES_13       us-west1-a  db-custom-1-3840  34.83.146.214    -                RUNNABLE

authorized-networks 這個引數很重要,它決定了哪些使用者端可以連線上資料庫。

設定密碼:

$ gcloud sql users set-password postgres \
--instance=pkslow-testdb \
--password=pkpass

給範例建立資料庫:

$ gcloud sql databases create billing --instance=pkslow-testdb

Creating Cloud SQL database...done.                                                                                                                             
Created database [billing].
instance: pkslow-testdb
name: billing
project: pkslow

建立完成後,就可以在本地連線了:

連上之後,我們來建立一張表和插入一些資料來測試一下:

CREATE TABLE pkslow_person (
                               name varchar not null,
                                 age int not null,
                                 city varchar not null
);

insert into pkslow_person(name, age, city) VALUES ('Larry', 1, 'GZ');
insert into pkslow_person(name, age, city) VALUES ('pkslow', 2, 'SZ');
insert into pkslow_person(name, age, city) VALUES ('Deng', 21, 'SZ');
insert into pkslow_person(name, age, city) VALUES ('Eason', 13, 'BJ');
insert into pkslow_person(name, age, city) VALUES ('JJ', 43, 'SH');
insert into pkslow_person(name, age, city) VALUES ('Mi', 28, 'HK');

檢視資料:

4 Terraform

當然,更好的方式還是通過Terraform來建立:

provider "google" {
  project     = "pkslow"
}

resource "google_sql_database_instance" "instance" {
  name             = "pkslow-postgresql"
  region           = "us-west1"
  database_version = "POSTGRES_13"
  settings {
    tier = "db-f1-micro"

    ip_configuration {
          ipv4_enabled = "true"

          authorized_networks {
            value           = "0.0.0.0/0"
            name            = "allow-all"
            expiration_time = "2099-01-01T00:00:00.000Z"
          }

        }
  }

  deletion_protection  = "true"
}

resource "google_sql_database" "database" {
  name     = "billing"
  instance = google_sql_database_instance.instance.name
}

resource "google_sql_user" "users" {
  name     = "larry"
  instance = google_sql_database_instance.instance.name
  password = "larry.pass"
}

這段程式碼為會我們建立三個資源:範例、資料庫和使用者。

準備好程式碼好,執行下面命令:

$ terraform init -plugin-dir=${TERRAFORM_PLUGIN}

$ terraform plan

$ terraform apply -auto-approve

Terraform還會自動在Bucket上建立檔案來管理Terraform的狀態:

建立完成後,檢查就有兩個資料庫範例了:

$ gcloud sql instances list
NAME               DATABASE_VERSION  LOCATION    TIER              PRIMARY_ADDRESS  PRIVATE_ADDRESS  STATUS
pkslow-postgresql  POSTGRES_13       us-west1-a  db-f1-micro       34.127.53.161    -                RUNNABLE
pkslow-testdb      POSTGRES_13       us-west1-a  db-custom-1-3840  34.83.146.214    -                RUNNABLE

本地連線如下:

5 程式碼

程式碼請檢視GitHub: https://github.com/LarryDpk/pkslow-samples