Запуск миграции БД в облачной сборке с подключением к облачному sql с использованием частного IP

Я пытаюсь настроить миграцию db для приложения Nodejs в облачной сборке, подключающейся к облачному sql с частным IP-адресом через облачный sql-прокси. Соединение с Cloud SQL всегда прерывается из-за сборки облака.

В настоящее время я выполняю миграцию вручную из вычислительной машины.

Я следил за этим SO, чтобы настроить шаги сборки. Выполнить узел Перенос базы данных .js в Google Cloud SQL во время сборки Google Cloud

cloudbuild.yaml

steps:
  - name: node:12-slim
    args: ["npm", "install"]
    env:
      - "NODE_ENV=${_NODE_ENV}"
  - name: alpine:3.10
    entrypoint: sh
    args:
      - -c
      - "wget -O /workspace/cloud_sql_proxy https://storage.googleapis.com/cloudsql-proxy/v1.16/cloud_sql_proxy.linux.386 &&  chmod +x /workspace/cloud_sql_proxy"
  - name: node:12
    timeout: 100s
    entrypoint: sh
    args:
      - -c
      - "(/workspace/cloud_sql_proxy -dir=/workspace -instances=my-project-id:asia-south1:postgres-master=tcp:5432 & sleep 3) && npm run migrate"
    env:
      - "NODE_ENV=${_NODE_ENV}"
      - "DB_NAME=${_DB_NAME}"
      - "DB_PASS=${_DB_PASS}"
      - "DB_USER=${_DB_USER}"
      - "DB_HOST=${_DB_HOST}"
      - "DB_PORT=${_DB_PORT}"
  - name: "gcr.io/cloud-builders/gcloud"
    entrypoint: "bash"
    args:
      [
        "-c",
        "gcloud secrets versions access latest --secret=backend-api-env > credentials.yaml",
      ]
  - name: "gcr.io/cloud-builders/gcloud"
    args: ["app", "deploy", "--stop-previous-version", "-v", "$SHORT_SHA"]
timeout: "600s"

Ошибка:

KnexTimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
Step #2:     at Client_PG.acquireConnection (/workspace/node_modules/knex/lib/client.js:349:26)

Роли сборки облака:

Cloud Build Service Account
Cloud SQL Admin
Compute Network User
Service Account User
Secret Manager Secret Accessor
Serverless VPC Access Admin

Также включен CLOUD SQL ADMIN API.

Версии:

NPM libs:
  "pg": "8.0.3"
  "knex": "0.21.1"

person Abhilash Chelankara    schedule 06.06.2020    source источник
comment
узел / v12.17.0 npm / 6.14.4   -  person Abhilash Chelankara    schedule 06.06.2020


Ответы (2)


Функция частного IP-адреса Cloud SQL использует внутренние IP-адреса, размещенные в сети VPC, которые являются доступен только из других ресурсов в той же сети VPC.

Поскольку Cloud Build не поддерживает сети VPC, невозможно подключиться из Cloud Build к частному IP-адресу экземпляра Cloud SQL.

Возможно, вы захотите взглянуть на официальную документацию Cloud SQL по этой теме, чтобы выбрать другую альтернативу, которая соответствует вашему варианту использования.

person llompalles    schedule 10.06.2020
comment
Каков ваш предпочтительный способ миграции Django в частное облако sql? - person Aseem; 26.06.2021

Подключение к общедоступному облаку sql

Я использую прокси для docker-compose и cloud sql.

  1. настроить docker-compose для сборки облака, здесь.

  2. создать учетную запись службы (файл json).

  3. файл docker-compose:

version: '3.7'

services: 
  app:
    build:
      context: .
      dockerfile: Dockerfile
    restart: "no"
    links:
      - database
    tty: true
    volumes: 
      - app:/var/www/html
    env_file: 
      - ./.env
    depends_on: 
      - database
      

  database:
    image: gcr.io/cloudsql-docker/gce-proxy
    restart: on-failure
    command: 
      - "/cloud_sql_proxy" 
      - "-instances=<INSTANCE_CONNECTION_NAME>=tcp:0.0.0.0:3306" 
      - "-credential_file=/config/sql_proxy.json"
    volumes: 
      - ./sql_proxy.json:/config/sql_proxy.json:ro

volumes: 
  app:

  1. cloudbuild.yml

- name: 'gcr.io/$PROJECT_ID/docker-compose'
  id: Compose-build-cloudProxy
  args: ['build']

- name: 'gcr.io/$PROJECT_ID/docker-compose'
  id: Compose-up-cloudProxy
  args: ['up', '--timeout', '1', '--no-build', '-d']

- name: 'bash'
  id: Warm-up-cloudProxy
  args: ['sleep', '5s']

- name: 'gcr.io/cloud-builders/docker'
  id: Artisan-Migrate
  args: ['exec', '-i', 'workspace_app_1', 'php', 'artisan', 'migrate']

- name: 'gcr.io/$PROJECT_ID/docker-compose'
  id: Compose-down-cloudProxy
  args: ['down', '-v']

build-success.png

person Romi Afrizal    schedule 30.07.2020
comment
ваш облачный экземпляр SQL общедоступен? - person Sam Levin; 25.03.2021
comment
да. Облачный SQL должен иметь общедоступный IPv4-адрес. Общедоступный IP-адрес не обязательно должен быть доступен для какого-либо внешнего адреса (его не нужно добавлять в качестве авторизованного сетевого адреса). См. Следующую здесь. - person Romi Afrizal; 26.03.2021