์ธ์Šคํ„ด์Šค ์ˆ˜์ •

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๊ธฐ์กด Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“  ํ›„์—๋Š” ์ธ์Šคํ„ด์Šค ์‹คํ–‰ ์ค‘์— ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๋‹น ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์„ค์ • ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ์ด ์ธ์Šคํ„ด์Šค์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธ์Šคํ„ด์Šค ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ์Šคํ„ด์Šค ์ˆ˜์ •

๋Œ€๋ถ€๋ถ„์˜ ์ˆ˜์ • ์‚ฌํ•ญ์€ ์ธ์Šคํ„ด์Šค ์‹คํ–‰ ์ค‘์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†”

  1. Google Cloud ์ฝ˜์†”์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์ด๋™

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  4. ์ธ์Šคํ„ด์Šค ๋งž์ถค์„ค์ • ์„น์…˜์—์„œ ๊ตฌ์„ฑ ์˜ต์…˜ ํ‘œ์‹œ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ์ธ์Šคํ„ด์Šค์—์„œ ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    ์ธ์Šคํ„ด์Šค ์„ค์ •์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

  6. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

์ด ๋ช…๋ น์–ด๋Š” ๋ฐฑ์—… ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME \
--backup-start-time 16:00

์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME \
--enable-google-private-path

์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ Vertex AI์™€ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด Vertex AI์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ PostgreSQL์šฉ Cloud SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on

ํŒจ์น˜๊ฐ€ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•œ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณ€๊ฒฝ์„ ์ง„ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ ํ”Œ๋ž˜๊ทธ์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gcloud sql instances patch๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

REST v1

์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ž‘์—…์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Vertex AI์™€ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ๋„๋ก ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ์„ ํ†ตํ•ด Vertex AI์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ PostgreSQL์šฉ Cloud SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฑ์—… ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
  • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID์ž…๋‹ˆ๋‹ค.
  • PRIVATE_NETWORK: ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•˜๋Š” ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "settings": {
    "enableGoogleMlIntegration": true,
    "databaseFlags":
    [
      {
        "name": "cloudsql.enable_google_ml_integration",
        "value": "on"
      }
    ]
    "backupConfiguration": {
      "startTime": "16:00",
      "enabled": true,
      "binaryLogEnabled": true
    }
  }
    "ipConfiguration": {
      "privateNetwork": "PRIVATE_NETWORK",
      "authorizedNetworks": [],
      "ipv4Enabled": false,
      "enablePrivatePathForGoogleCloudServices": true
    }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

ํŒจ์น˜๊ฐ€ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•œ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณ€๊ฒฝ์„ ์ง„ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ REST API ์š”์ฒญ์ด ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์„ ํ™•์ธํ•˜๋ ค๋ฉด instances:patch ํŽ˜์ด์ง€์˜ API ํƒ์ƒ‰๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

REST v1beta4

์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ž‘์—…์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Vertex AI์™€ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ๋„๋ก ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ์„ ํ†ตํ•ด Vertex AI์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ PostgreSQL์šฉ Cloud SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฑ์—… ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  • BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID
  • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID์ž…๋‹ˆ๋‹ค.
  • PRIVATE_NETWORK: ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•˜๋Š” ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "settings": {
    "enableGoogleMlIntegration": true,
    "databaseFlags":
    [
      {
        "name": "cloudsql.enable_google_ml_integration",
        "value": "on"
      }
    ]
    "backupConfiguration": {
      "startTime": "16:00",
      "enabled": true,
      "binaryLogEnabled": true
    }
  }
    "ipConfiguration": {
      "privateNetwork": "PRIVATE_NETWORK",
      "authorizedNetworks": [],
      "ipv4Enabled": false,
      "enablePrivatePathForGoogleCloudServices": true
    }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

ํŒจ์น˜๊ฐ€ ์žฌ์‹œ์ž‘์ด ํ•„์š”ํ•œ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณ€๊ฒฝ์„ ์ง„ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ REST API ์š”์ฒญ์ด ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์„ ํ™•์ธํ•˜๋ ค๋ฉด instances:patch ํŽ˜์ด์ง€์˜ API ํƒ์ƒ‰๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค ์ˆ˜์ •

gcloud CLI ๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Private Service Connect๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ฒฐ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Private Service Connect ์—”๋“œํฌ์ธํŠธ์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ์˜ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ—ˆ์šฉ๋œ ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œ๋œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๊ธฐ์กด Private Service Connect ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์€ ๊ณ„์† ์ž‘๋™ํ•˜์ง€๋งŒ ์ƒˆ ์—”๋“œํฌ์ธํŠธ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

gcloud

Private Service Connect๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด gcloud sql instances patch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--allowed-psc-projects=ALLOWED_PROJECTS

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • INSTANCE_NAME: VPC ๋„คํŠธ์›Œํฌ์˜ Private Service Connect ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: VPC ๋„คํŠธ์›Œํฌ์˜ Private Service Connect ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„). ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ Private Service Connect๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ๋‘ ํ”„๋กœ์ ํŠธ(98765 ๋ฐ 87654)๊ฐ€ Private Service Connect ์—”๋“œํฌ์ธํŠธ์—์„œ 12345 ํ”„๋กœ์ ํŠธ์— ํฌํ•จ๋œ myinstance Cloud SQL ์ธ์Šคํ„ด์Šค๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud sql instances patch myinstance \
--project=12345 \
--allowed-psc-projects='98765','87654'

ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๋ ค๋ฉด gcloud sql instances patch ๋ช…๋ น์–ด์™€
--clear-allowed-psc-projects ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--clear-allowed-psc-projects

์ด ํ”Œ๋ž˜๊ทธ๋Š” ์‹ค์ˆ˜๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

REST v1

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: VPC ๋„คํŠธ์›Œํฌ์˜ Private Service Connect ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
  • INSTANCE_NAME: VPC ๋„คํŠธ์›Œํฌ์˜ Private Service Connect ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ Private Service Connect๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS]
      }
    },
    "kind": "sql#settings"
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

ํ—ˆ์šฉ๋˜๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด clear-allowed-psc-projects ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ์‹ค์ˆ˜๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ REST API ์š”์ฒญ์ด ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์„ ํ™•์ธํ•˜๋ ค๋ฉด instances:patch ํŽ˜์ด์ง€์˜ API ํƒ์ƒ‰๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

REST v1beta4

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: VPC ๋„คํŠธ์›Œํฌ์˜ Private Service Connect ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.
  • INSTANCE_NAME: VPC ๋„คํŠธ์›Œํฌ์˜ Private Service Connect ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ALLOWED_PROJECTS: ํ—ˆ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ ID ๋˜๋Š” ์ˆซ์ž์˜ ๋ชฉ๋ก(์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ Private Service Connect๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  Private Service Connect๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS]
      }
    },
    "kind": "sql#settings"
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

ํ—ˆ์šฉ๋˜๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด clear-allowed-psc-projects ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ์‹ค์ˆ˜๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ REST API ์š”์ฒญ์ด ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์„ ํ™•์ธํ•˜๋ ค๋ฉด instances:patch ํŽ˜์ด์ง€์˜ API ํƒ์ƒ‰๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ์Šคํ„ด์Šค์˜ ์ปค์Šคํ…€ SAN ์ˆ˜์ •

IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ปค์Šคํ…€ DNS ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์ปค์Šคํ…€ ์ฃผ์ฒด ๋Œ€์ฒด ์ด๋ฆ„(SAN) ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ SAN ์„ค์ •์— ์‚ฝ์ž…ํ•œ ์ปค์Šคํ…€ DNS ์ด๋ฆ„์ด ์ธ์Šคํ„ด์Šค ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ SAN ํ•„๋“œ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๊ฒ€์ฆ์„ ๊ฑฐ์ณ ์ปค์Šคํ…€ DNS ์ด๋ฆ„์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์— ์ปค์Šคํ…€ SAN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ์Šคํ„ด์Šค์— DNS ์ด๋ฆ„ ์ถ”๊ฐ€: ์ปค์Šคํ…€ SAN ์„ค์ •์— ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ์ตœ๋Œ€ 3๊ฐœ์˜ ์ปค์Šคํ…€ DNS ์ด๋ฆ„ ๋ชฉ๋ก์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Cloud SQL์€ ์ด๋Ÿฌํ•œ ์ด๋ฆ„์„ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ SAN ํ•„๋“œ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ธ์ฆ์„œ๋กœ ์—ฌ๋Ÿฌ DNS ์ด๋ฆ„์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค์˜ DNS ์ด๋ฆ„ ์ˆ˜์ •: ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ SAN ํ•„๋“œ์— ์ถ”๊ฐ€ํ•  ์ปค์Šคํ…€ DNS ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค์—์„œ DNS ์ด๋ฆ„ ์‚ญ์ œ: ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ SAN ํ•„๋“œ์—์„œ ๋ชจ๋“  ์ปค์Šคํ…€ DNS ์ด๋ฆ„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

gcloud CLI ๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์˜ ์ปค์Šคํ…€ SAN์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gcloud

์ธ์Šคํ„ด์Šค์˜ ์ปค์Šคํ…€ SAN์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด gcloud beta sql instances patch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--custom-subject-alternative-names=DNS_NAMES

๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • INSTANCE_NAME: DNS ์ด๋ฆ„์„ ์ถ”๊ฐ€, ์ˆ˜์ • ๋˜๋Š” ์‚ญ์ œํ•  ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์ด๋ฆ„
  • PROJECT_ID: ์ธ์Šคํ„ด์Šค๊ฐ€ ํฌํ•จ๋œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ
  • DNS_NAMES: ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์— ์ถ”๊ฐ€ํ•  DNS ์ด๋ฆ„ ์ตœ๋Œ€ 3๊ฐœ๊ฐ€ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก

Cloud SQL ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์—์„œ ๋ชจ๋“  DNS ์ด๋ฆ„์„ ์‚ญ์ œํ•˜๋ ค๋ฉด gcloud beta sql instances patch ๋ช…๋ น์–ด์™€
--clear-custom-subject-alternative-names ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud beta sql instances patch INSTANCE_NAME \
--project=PROJECT_ID \
--clear-custom-subject-alternative-names

์ด ํ”Œ๋ž˜๊ทธ๋Š” ์˜๋„์น˜ ์•Š๊ฒŒ ์ธ์ฆ์„œ์— DNS ์ด๋ฆ„์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

REST

์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  • PROJECT_ID: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ์—๋Š” DNS ์ด๋ฆ„์„ ์ถ”๊ฐ€, ์ˆ˜์ • ๋˜๋Š” ์‚ญ์ œํ•  ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ํฌํ•จ๋œ Cloud SQL ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • INSTANCE_NAME: ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • DNS_NAMES: ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์— ์ถ”๊ฐ€ํ•  DNS ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์œผ๋กœ, ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ธ์ฆ์„œ์— ์ด๋ฏธ ์ถ”๊ฐ€๋œ DNS ์ด๋ฆ„์ด ์žˆ๊ณ  ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ DNS ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด Cloud SQL์ด ์ธ์ฆ์„œ์—์„œ ์›๋ž˜ DNS ์ด๋ฆ„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    customSubjectAlternativeNames ํŒŒ๋ผ๋ฏธํ„ฐ์— DNS ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  null [] ๊ฐ’์„ ์ œ๊ณตํ•˜๋ฉด Cloud SQL์—์„œ ์ธ์Šคํ„ด์Šค์˜ ์„œ๋ฒ„ ์ธ์ฆ์„œ์—์„œ ๋ชจ๋“  DNS ์ด๋ฆ„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ธ์ฆ์„œ์— ์˜๋„์น˜ ์•Š๊ฒŒ DNS ์ด๋ฆ„์ด ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ๋ฐ URL:

PATCH https://sqladmin.googleapis.com/sql/v1veta4/projects/PROJECT_ID/instances/INSTANCE_NAME

JSON ์š”์ฒญ ๋ณธ๋ฌธ:

{
  "kind": "sql#instance",
  "name": "INSTANCE_NAME",
  "project": "PROJECT_ID",
  "settings": {
    "ipConfiguration": {
      "customSubjectAlternativeNames": "DNS_NAMES"
    },
    "kind": "sql#settings"
  }
}

์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๋ฉด ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ JSON ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
์ด ์ž‘์—…์— ์ ํ•ฉํ•œ ๊ธฐ๋ณธ REST API ์š”์ฒญ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ instances:patch ํŽ˜์ด์ง€์˜ API ํƒ์ƒ‰๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.