๋น„๊ณต๊ฐœ IP ๊ตฌ์„ฑ

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์—์„œ ๋น„๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ IP์˜ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ํ™˜๊ฒฝ, ๊ด€๋ฆฌ ์š”๊ตฌ์‚ฌํ•ญ์€ ๋น„๊ณต๊ฐœ IP๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

API ๋ฐ IAM ์š”๊ตฌ์‚ฌํ•ญ

  • Google Cloud ํ”„๋กœ์ ํŠธ์— Service Networking API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณต์œ  VPC ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—๋„ ์ด API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์Œ Identity and Access Management(IAM) ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์—†์œผ๋ฉด ๊ถŒํ•œ ๋ถ€์กฑ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

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

๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค

ํ”„๋กœ์ ํŠธ์—์„œ ์ƒˆ Virtual Private Cloud(VPC) ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ IP ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด VPC ๋„คํŠธ์›Œํฌ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์€ ์ด ๊ตฌ์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋งˆ๋ฒ•์‚ฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ

์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋˜๋Š” ๊ธฐ์กด ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP ๊ตฌ์„ฑ

Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์ด ์ธ์Šคํ„ด์Šค์—์„œ ๋น„๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Console

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

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

  2. ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ตฌ์„ฑ ์˜ต์…˜ ํ‘œ์‹œ๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.
  4. ์—ฐ๊ฒฐ์„ ํŽผ์นฉ๋‹ˆ๋‹ค.
  5. ๋น„๊ณต๊ฐœ IP๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์— ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” VPC ๋„คํŠธ์›Œํฌ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณต์œ  VPC์˜ ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ์ด๋ฉด ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์˜ VPC ๋„คํŠธ์›Œํฌ๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  6. ์‚ฌ์šฉํ•  VPC ๋„คํŠธ์›Œํฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  7. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    1. ์—ฐ๊ฒฐ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. IP ๋ฒ”์œ„ ํ• ๋‹น ์„น์…˜์—์„œ ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
      • ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ธฐ์กด IP ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋“œ๋กญ๋‹ค์šด์—์„œ ์ƒˆ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋“œ๋กญ๋‹ค์šด์— ์ด์ „์— ํ• ๋‹น๋œ ๋ฒ”์œ„(์žˆ๋Š” ๊ฒฝ์šฐ)๊ฐ€ ํฌํ•จ๋˜๊ฑฐ๋‚˜ ์ƒˆ IP ๋ฒ”์œ„ ํ• ๋‹น์„ ์„ ํƒํ•˜๊ณ  ์ƒˆ ๋ฒ”์œ„์™€ ์ด๋ฆ„์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๋„คํŠธ์›Œํฌ์— ์ž๋™์œผ๋กœ ํ• ๋‹น๋œ IP ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    3. ๊ณ„์†์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    4. ์—ฐ๊ฒฐ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    5. Private service connection for network VPC_NETWORK_NAME has been successfully created ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  8. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์— ์‚ฌ์šฉํ•  ์ธ์Šคํ„ด์Šค์— ํ• ๋‹น๋œ IP ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    1. ํ• ๋‹น๋œ IP ๋ฒ”์œ„ ์˜ต์…˜ ํ‘œ์‹œ๋ฅผ ํŽผ์นฉ๋‹ˆ๋‹ค.
    2. ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ IP ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  9. (์„ ํƒ์‚ฌํ•ญ) BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋น„๊ณต๊ฐœ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์„ค์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  10. ์ธ์Šคํ„ด์Šค ๊ตฌ์„ฑ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  11. ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ๊ฐ€ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

  • INSTANCE_ID: ์ธ์Šคํ„ด์Šค ID์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID: ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.
  • NETWORK_PROJECT_ID: VPC ๋„คํŠธ์›Œํฌ์˜ ํ”„๋กœ์ ํŠธ ID์ž…๋‹ˆ๋‹ค.

  • VPC_NETWORK_NAME: VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • RANGE_NAME: ์„ ํƒ์‚ฌํ•ญ. ์ง€์ •ํ•˜๋ฉด IP ๋ฒ”์œ„๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋ฒ”์œ„ ์ด๋ฆ„์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ด๋ฆ„์€ RFC-1035๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋ฉฐ 1~63(์˜๋ฌธ ๊ธฐ์ค€)์ž ์ด๋‚ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • DATABASE_VERSION: PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒ„์ „์ž…๋‹ˆ๋‹ค(์˜ˆ: POSTGRES_14).
  • NUMBER_OF_CPU: CPU ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • MEMORY_IN_GB: ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰(GB)์ž…๋‹ˆ๋‹ค.
  • REGION_NAME: ๋ฆฌ์ „ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ ค๋ฉด --network ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด --no-assign-ip ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ์›ํ•˜๋Š” ๊ฒฝ์šฐ --enable-google-private-path ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ ๊ฒฝ์šฐ์—๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

  • --no-assign-ip ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • --network ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud beta sql instances create INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME \
--enable-google-private-path \
--database-version=DATABASE_VERSION \
--cpu=NUMBER_OF_CPU \
--memory=MEMORY_IN_GB \
--region=REGION_NAME

Terraform

์ƒˆ ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ Terraform ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


resource "google_compute_network" "peering_network" {
  name                    = "private-network"
  auto_create_subnetworks = "false"
}

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

resource "google_sql_database_instance" "default" {
  name             = "private-ip-sql-instance"
  region           = "us-central1"
  database_version = "POSTGRES_14"

  depends_on = [google_service_networking_connection.default]

  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ipv4_enabled    = "false"
      private_network = google_compute_network.peering_network.id
    }
  }
}

resource "google_compute_network_peering_routes_config" "peering_routes" {
  peering              = google_service_networking_connection.default.peering
  network              = google_compute_network.peering_network.name
  import_custom_routes = true
  export_custom_routes = true
}

# [START  cloud_sql_postgres_instance_private_ip_dns]

## Uncomment this block after adding a valid DNS suffix

# resource "google_service_networking_peered_dns_domain" "default" {
#   name       = "example-com"
#   network    = google_compute_network.peering_network.id
#   dns_suffix = "example.com."
#   service    = "servicenetworking.googleapis.com"
# }

๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ

ํ”„๋กœ์ ํŠธ์— Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๋ ค๋ฉด Google Cloud ๋‹ค์Œ ์„น์…˜์˜ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•˜์„ธ์š”.

Cloud Shell ์ค€๋น„

  1. Cloud Shell์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•  ๊ธฐ๋ณธ Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๋ช…๋ น์–ด๋Š” ํ”„๋กœ์ ํŠธ๋‹น ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋˜๋ฉฐ ์–ด๋–ค ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๋ช…์‹œ์  ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๋””๋ ‰ํ„ฐ๋ฆฌ ์ค€๋น„

๊ฐ Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—๋Š” ์ž์ฒด ๋””๋ ‰ํ„ฐ๋ฆฌ(๋ฃจํŠธ ๋ชจ๋“ˆ์ด๋ผ๊ณ ๋„ ํ•จ)๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Cloud Shell์—์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์— ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ์„ธ์š”. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” .tf ํ™•์žฅ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: main.tf). ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ํŒŒ์ผ์„ main.tf๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ์„น์…˜์ด๋‚˜ ๋‹จ๊ณ„์—์„œ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“  main.tf์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    ํ•„์š”ํ•œ ๊ฒฝ์šฐ GitHub์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Terraform ์Šค๋‹ˆํŽซ์ด ์—”๋“œ ํˆฌ ์—”๋“œ ์†”๋ฃจ์…˜์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

  3. ํ™˜๊ฒฝ์— ์ ์šฉํ•  ์ƒ˜ํ”Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  5. Terraform์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‹น ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    terraform init

    ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์‹  Google ๊ณต๊ธ‰์—…์ฒด ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด -upgrade ์˜ต์…˜์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    terraform init -upgrade

๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ

  1. ๊ตฌ์„ฑ์„ ๊ฒ€ํ† ํ•˜๊ณ  Terraform์—์„œ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜ˆ์ƒ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    terraform plan

    ํ•„์š”์— ๋”ฐ๋ผ ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— yes๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    terraform apply

    Terraform์— '์ ์šฉ ์™„๋ฃŒ' ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

  3. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ค๋ฉด Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฝ๋‹ˆ๋‹ค. Google Cloud ์ฝ˜์†”์—์„œ UI์˜ ๋ฆฌ์†Œ์Šค๋กœ ์ด๋™ํ•˜์—ฌ Terraform์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ์‚ฌํ•ญ ์‚ญ์ œ

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Terraform ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ์‚ญ์ œ ๋ณดํ˜ธ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด deletion_protection ์ธ์ˆ˜๋ฅผ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    deletion_protection =  "false"
  2. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— yes๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋œ Terraform ๊ตฌ์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    terraform apply
  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ”„๋กฌํ”„ํŠธ์— yes๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ด์ „์— Terraform ๊ตฌ์„ฑ์— ์ ์šฉ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

    terraform destroy

REST v1

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋กœ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

  • PROJECT_ID:: ํ”„๋กœ์ ํŠธ ID
  • INSTANCE_ID:: ์ธ์Šคํ„ด์Šค ID
  • VPC_NETWORK_NAME:: ์ด ์ธ์Šคํ„ด์Šค์— ์‚ฌ์šฉํ•˜๋ ค๋Š” Virtual Private Cloud(VPC) ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๊ฐ€ ์ด๋ฏธ ๋„คํŠธ์›Œํฌ์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • RANGE_NAME:: ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ง€์ •ํ•˜๋ฉด IP ๋ฒ”์œ„๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋ฒ”์œ„ ์ด๋ฆ„์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ด๋ฆ„์€ RFC-1035๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋ฉฐ 1~63(์˜๋ฌธ ๊ธฐ์ค€)์ž ์ด๋‚ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • AUTHORIZED_NETWORKS:: ๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์Šน์ธ๋œ ๋„คํŠธ์›Œํฌ์˜ ์—ฐ๊ฒฐ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ipv4Enabled ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋˜์—ˆ์œผ๋ฉด false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

enablePrivatePathForGoogleCloudServices ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances

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

{
  "name": "INSTANCE_ID",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
      "enablePrivatePathForGoogleCloudServices": true
      
    }
  }
}

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

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

REST v1beta4

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋กœ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

  • PROJECT_ID:: ํ”„๋กœ์ ํŠธ ID
  • INSTANCE_ID:: ์ธ์Šคํ„ด์Šค ID
  • VPC_NETWORK_NAME:: ์ด ์ธ์Šคํ„ด์Šค์— ์‚ฌ์šฉํ•˜๋ ค๋Š” Virtual Private Cloud(VPC) ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๊ฐ€ ์ด๋ฏธ ๋„คํŠธ์›Œํฌ์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • RANGE_NAME:: ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ง€์ •ํ•˜๋ฉด IP ๋ฒ”์œ„๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋ฒ”์œ„ ์ด๋ฆ„์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ด๋ฆ„์€ RFC-1035๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋ฉฐ 1~63(์˜๋ฌธ ๊ธฐ์ค€)์ž ์ด๋‚ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • AUTHORIZED_NETWORKS:: ๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์Šน์ธ๋œ ๋„คํŠธ์›Œํฌ์˜ ์—ฐ๊ฒฐ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ipv4Enabled ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋˜์—ˆ์œผ๋ฉด false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

enablePrivatePathForGoogleCloudServices ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances

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

{
  "name": "INSTANCE_ID",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
      "enablePrivatePathForGoogleCloudServices": true
      
    }
  }
}

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

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

๊ธฐ์กด ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP ๊ตฌ์„ฑ

๊ธฐ์กด Cloud SQL ์ธ์Šคํ„ด์Šค์—์„œ ๋น„๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋ฏ€๋กœ ๋‹ค์šดํƒ€์ž„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

Console

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

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

  2. ์ธ์Šคํ„ด์Šค์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ์—ด๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. Cloud SQL ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ์—ฐ๊ฒฐ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ๋„คํŠธ์›Œํ‚น ํƒญ์—์„œ ๋น„๊ณต๊ฐœ IP ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์— ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. ์‚ฌ์šฉํ•  VPC ๋„คํŠธ์›Œํฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  6. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ํ•„์š”๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ:

    1. ์—ฐ๊ฒฐ ์„ค์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. IP ๋ฒ”์œ„ ํ• ๋‹น ์„น์…˜์—์„œ ๋‹ค์Œ ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
      • ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ธฐ์กด IP ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋“œ๋กญ๋‹ค์šด์—์„œ ์ƒˆ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋“œ๋กญ๋‹ค์šด์— ์ด์ „์— ํ• ๋‹น๋œ ๋ฒ”์œ„(์žˆ๋Š” ๊ฒฝ์šฐ)๊ฐ€ ํฌํ•จ๋˜๊ฑฐ๋‚˜ ์ƒˆ IP ๋ฒ”์œ„ ํ• ๋‹น์„ ์„ ํƒํ•˜๊ณ  ์ƒˆ ๋ฒ”์œ„์™€ ์ด๋ฆ„์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๋„คํŠธ์›Œํฌ์— ์ž๋™์œผ๋กœ ํ• ๋‹น๋œ IP ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    3. ๊ณ„์†์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    4. ์—ฐ๊ฒฐ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    5. VPC_NETWORK_NAME ๋„คํŠธ์›Œํฌ์˜ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  7. (์„ ํƒ์‚ฌํ•ญ) BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋น„๊ณต๊ฐœ ๊ฒฝ๋กœ ์‚ฌ์šฉ ์„ค์ • ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  8. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

gcloud

ํ”„๋กœ์ ํŠธ๊ฐ€ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•ด ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

--network ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒํ•œ VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ด Cloud SQL ์ธ์Šคํ„ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

gcloud beta sql instances patch INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/NETWORK_PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip \
--enable-google-private-path

REST v1

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋กœ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

  • PROJECT_ID:: ํ”„๋กœ์ ํŠธ ID
  • INSTANCE_ID:: ์ธ์Šคํ„ด์Šค ID
  • VPC_NETWORK_NAME:: ์ด ์ธ์Šคํ„ด์Šค์— ์‚ฌ์šฉํ•˜๋ ค๋Š” Virtual Private Cloud(VPC) ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๊ฐ€ ์ด๋ฏธ ๋„คํŠธ์›Œํฌ์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • RANGE_NAME:: ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ง€์ •ํ•˜๋ฉด IP ๋ฒ”์œ„๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋ฒ”์œ„ ์ด๋ฆ„์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ด๋ฆ„์€ RFC-1035๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋ฉฐ 1~63(์˜๋ฌธ ๊ธฐ์ค€)์ž ์ด๋‚ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • AUTHORIZED_NETWORKS:: ๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์Šน์ธ๋œ ๋„คํŠธ์›Œํฌ์˜ ์—ฐ๊ฒฐ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ipv4Enabled ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋˜์—ˆ์œผ๋ฉด false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

enablePrivatePathForGoogleCloudServices ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

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

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

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
      "enablePrivatePathForGoogleCloudServices": true
      
    }
  }
}

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

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

REST v1beta4

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋กœ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

  • PROJECT_ID:: ํ”„๋กœ์ ํŠธ ID
  • INSTANCE_ID:: ์ธ์Šคํ„ด์Šค ID
  • VPC_NETWORK_NAME:: ์ด ์ธ์Šคํ„ด์Šค์— ์‚ฌ์šฉํ•˜๋ ค๋Š” Virtual Private Cloud(VPC) ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๊ฐ€ ์ด๋ฏธ ๋„คํŠธ์›Œํฌ์— ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • RANGE_NAME:: ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ง€์ •ํ•˜๋ฉด IP ๋ฒ”์œ„๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋ฒ”์œ„ ์ด๋ฆ„์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ด๋ฆ„์€ RFC-1035๋ฅผ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋ฉฐ 1~63(์˜๋ฌธ ๊ธฐ์ค€)์ž ์ด๋‚ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • AUTHORIZED_NETWORKS: ๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์Šน์ธ๋œ ๋„คํŠธ์›Œํฌ์˜ ์—ฐ๊ฒฐ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ipv4Enabled ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ธ์Šคํ„ด์Šค์— ๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐ’์„ true๋กœ ์„ค์ •ํ•˜๊ณ , ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋˜์—ˆ์œผ๋ฉด false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

enablePrivatePathForGoogleCloudServices ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด BigQuery์™€ ๊ฐ™์€ ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ false๋กœ ์„ค์ •ํ•˜๋ฉด ๋‹ค๋ฅธ Google Cloud ์„œ๋น„์Šค์—์„œ ๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ํ†ตํ•ด Cloud SQL์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

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

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

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME",
      "allocatedIpRange": "RANGE_NAME"
      "authorizedNetworks": [AUTHORIZED_NETWORKS],
      
      "enablePrivatePathForGoogleCloudServices": true
      
    }
  }
}

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

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

๋น„๊ณต๊ฐœ IP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ

๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ VPC ๋„คํŠธ์›Œํฌ์˜ Compute Engine ๋˜๋Š” Google Kubernetes Engine ์ธ์Šคํ„ด์Šค(์—ฌ๊ธฐ์„œ๋Š” ๋‚ด๋ถ€ ์†Œ์Šค๋กœ ์ •์˜)์—์„œ ๋˜๋Š” ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์˜ ์™ธ๋ถ€(์™ธ๋ถ€ ์†Œ์Šค)์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ์†Œ์Šค์—์„œ ์—ฐ๊ฒฐ

Compute Engine ๋ฆฌ์†Œ์Šค์—์„œ ์‹คํ–‰๋˜๋Š” Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ์™€ ๊ฐ™์ด Cloud SQL ์ธ์Šคํ„ด์Šค์™€ ๋™์ผํ•œ Google Cloud ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค์—์„œ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋ฆฌ์†Œ์Šค๊ฐ€ Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์•ก์„ธ์Šค๊ฐ€ ์„ค์ •๋œ ๋™์ผํ•œ VPC ๋„คํŠธ์›Œํฌ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

App Engine ํ‘œ์ค€ ํ™˜๊ฒฝ, Cloud Run, Cloud Run Functions์™€ ๊ฐ™์€ ์„œ๋ฒ„๋ฆฌ์Šค ์†Œ์Šค์—์„œ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ Cloud SQL ์ธ์ฆ ํ”„๋ก์‹œ ์—†์ด ์„œ๋ฒ„๋ฆฌ์Šค VPC ์•ก์„ธ์Šค๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์— ์ง์ ‘ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์†Œ์Šค์—์„œ ์—ฐ๊ฒฐ

์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ(์˜ˆ: ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋„คํŠธ์›Œํฌ ๋˜๋Š” VPC ๋„คํŠธ์›Œํฌ)๊ฐ€ Cloud SQL ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฐ๊ฒฐ๋œ VPC ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ Cloud VPN ๋˜๋Š” Cloud Interconnect๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. Cloud VPN ํ„ฐ๋„ ๋˜๋Š” Dedicated Interconnect ๋˜๋Š” Partner Interconnect๋ฅผ ์œ„ํ•œ VLAN ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ VPC ๋„คํŠธ์›Œํฌ๊ฐ€ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. Cloud VPN ํ„ฐ๋„ ๋ฐ Cloud Interconnect ์—ฐ๊ฒฐ(VLAN)์„ ๊ด€๋ฆฌํ•˜๋Š” Cloud Router์˜ ๊ฒฝ๊ณ„ ๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋กœํ† ์ฝœ(BGP) ์„ธ์…˜์ด ์˜จํ”„๋ ˆ๋ฏธ์Šค ๋„คํŠธ์›Œํฌ์—์„œ ํŠน์ • ํ”„๋ฆฌํ”ฝ์Šค(๋Œ€์ƒ)๋ฅผ ์ˆ˜์‹ ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ๋„คํŠธ์›Œํฌ์— ์ž์ฒด ๋กœ์ปฌ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ ๊ฒฝ๋กœ(๋Œ€์ƒ 0.0.0.0/0)๋ฅผ Cloud SQL VPC ๋„คํŠธ์›Œํฌ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ์˜ ๋กœ์ปฌ ๊ฒฝ๋กœ๋Š” Cloud SQL ํ”ผ์–ด๋ง์ด VPC ๋„คํŠธ์›Œํฌ์—์„œ ์ปค์Šคํ…€ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋”๋ผ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  3. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์—์„œ ์ƒ์„ฑํ•œ ํ”ผ์–ด๋ง ์—ฐ๊ฒฐ์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค์— ๋”ฐ๋ผ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์—์„œ ๋‹ค์Œ ํ”ผ์–ด๋ง ์—ฐ๊ฒฐ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ๋ชจ๋“  ํ”ผ์–ด๋ง ์—ฐ๊ฒฐ์„ ๊ตฌ์„ฑํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  4. ํ”ผ์–ด๋ง ์—ฐ๊ฒฐ ๋ชจ๋‘๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ปค์Šคํ…€ ๊ฒฝ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ์— ์‚ฌ์šฉ๋˜๋Š” ํ• ๋‹น ๋ฒ”์œ„๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  6. Cloud VPN ํ„ฐ๋„ ๋˜๋Š” Cloud Interconnect ์—ฐ๊ฒฐ(VLAN)์˜ BGP ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” Cloud Router์— ํ• ๋‹น๋œ ๋ฒ”์œ„์— ๋Œ€ํ•œ Cloud Router ์ปค์Šคํ…€ ๊ณต์ง€ ๋ชจ๋“œ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Cloud Shell์—์„œ ์—ฐ๊ฒฐ

Cloud Shell์€ Google Cloud ์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  VPC ๋„คํŠธ์›Œํฌ ์™ธ๋ถ€์— ์žˆ๋Š” Compute Engine ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Cloud Shell๊ณผ VPC ๋„คํŠธ์›Œํฌ์˜ ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ ๊ณต๊ฐ„ ๊ฐ„์— ์—ฐ๊ฒฐ ๊ฒฝ๋กœ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ Cloud Shell์€ ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋งŒ ์žˆ๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ IP ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด VPC ์™ธ๋ถ€์—์„œ Cloud SQL ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

RFC 1918 ์ด์™ธ์˜ IP ์ฃผ์†Œ์—์„œ ์—ฐ๊ฒฐ

RFC 1918์€ ๋‚ด๋ถ€์ ์œผ๋กœ(์ฆ‰, ์กฐ์ง ๋‚ด์—์„œ) ์‚ฌ์šฉ๋˜๊ธฐ ์œ„ํ•ด ํ• ๋‹น๋˜๋Š” IP ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋ฉฐ ์ธํ„ฐ๋„ท์—์„œ ๋ผ์šฐํŒ…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Cloud SQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์€ RFC 1918 ์ฃผ์†Œ ๋ฒ”์œ„์—์„œ ์ž๋™์œผ๋กœ ์Šน์ธ๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋ชจ๋“  ๋น„๊ณต๊ฐœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RFC 1918 ์ด์™ธ์˜ IP ์ฃผ์†Œ์—์„œ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด RFC 1918 ์ด์™ธ์˜ IP ์ฃผ์†Œ ๋ฒ”์œ„์—์„œ ์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋„๋ก ์ธ์Šคํ„ด์Šค๋ณ„ IP ์Šน์ธ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ gcloud ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

gcloud sql instances patch INSTANCE_NAME \
--authorized-networks=192.88.99.0/24,11.0.0.0/24

Cloud SQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ VPC ๋„คํŠธ์›Œํฌ์—์„œ RFC 1918 ์ด์™ธ์˜ ์„œ๋ธŒ๋„ท ๊ฒฝ๋กœ๋ฅผ ํ•™์Šตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. RFC 1918 ์ด์™ธ์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚ด๋ณด๋‚ด๋ ค๋ฉด ๋„คํŠธ์›Œํฌ ํ”ผ์–ด๋ง์„ Cloud SQL๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
--network=VPC_NETWORK_NAME \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID

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

  • cloudsql-postgres-googleapis-com์€ VPC ๋„คํŠธ์›Œํฌ ํŽ˜์ด์ง€์˜ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    ๋„คํŠธ์›Œํฌ๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์„น์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • VPC_NETWORK_NAME๋Š” VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID๋Š” VPC ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค. ๊ณต์œ  VPC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

IP ์ฃผ์†Œ ์†Œ์ง„์„ ์™„ํ™”ํ•˜๋ ค๋ฉด ๋น„๊ณต๊ฐœ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ IP ์ฃผ์†Œ์—์„œ ์—ฐ๊ฒฐ

๋น„๊ณต๊ฐœ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ IP ์ฃผ์†Œ ๋ฒ”์œ„์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋„คํŠธ์›Œํฌ์™€ Cloud SQL ๋„คํŠธ์›Œํฌ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ํ”ผ์–ด๋ง์—์„œ export-subnet-routes-with-public-ip๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
--network=VPC_NETWORK_NAME \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID

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

  • cloudsql-postgres-googleapis-com์€ VPC ๋„คํŠธ์›Œํฌ ํŽ˜์ด์ง€์˜ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    ๋„คํŠธ์›Œํฌ๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์„น์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • VPC_NETWORK_NAME๋Š” VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID๋Š” VPC ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค. ๊ณต์œ  VPC๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ฉด ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ IP ์ฃผ์†Œ๋กœ ๊ตฌ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ

๋น„๊ณต๊ฐœ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ IP ์ฃผ์†Œ ๋ฒ”์œ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ์™€ Cloud SQL ๋„คํŠธ์›Œํฌ ๊ฐ„์˜ ๋„คํŠธ์›Œํฌ ํ”ผ์–ด๋ง์—์„œ import-subnet-routes-with-public-ip๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
--network=VPC_NETWORK_NAME \
--import-subnet-routes-with-public-ip \
--project=PROJECT_ID

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

  • cloudsql-postgres-googleapis-com์€ VPC ๋„คํŠธ์›Œํฌ ํŽ˜์ด์ง€์˜ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    ๋„คํŠธ์›Œํฌ๋ฅผ ์„ ํƒํ•œ ๋‹ค์Œ ๋น„๊ณต๊ฐœ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์„น์…˜์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  • VPC_NETWORK_NAME๋Š” VPC ๋„คํŠธ์›Œํฌ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • PROJECT_ID๋Š” VPC ๋„คํŠธ์›Œํฌ ํ”„๋กœ์ ํŠธ์˜ ID์ž…๋‹ˆ๋‹ค. ๊ณต์œ  VPC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ

๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ ์™ธ์—๋„ SQL ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์—์„œ ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋Š” ํ˜„์žฌ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์˜ IP ์ฃผ์†Œ๋กœ ์ž๋™ ํ™•์ธ๋˜๋Š” ์ „์—ญ ๋„๋ฉ”์ธ ์ด๋ฆ„ ์„œ๋น„์Šค(DNS) ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์ „ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—ฐ๊ฒฐ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

๋ณต์ œ๋ณธ ์žฅ์•  ์กฐ์น˜ ๋˜๋Š” ์ „ํ™˜์ด ๋ฐœ์ƒํ•˜๋ฉด ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์˜ ๋น„๊ณต๊ฐœ IP ์ฃผ์†Œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ์—ญํ• ์„ ํ•˜๋Š” ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Cloud SQL์—์„œ ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

Google Cloud ํ”„๋กœ์ ํŠธ์— Cloud DNS API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•œ ํ›„ ๊ธฐ๋ณธ Cloud SQL Enterprise Plus ๋ฒ„์ „ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ธ์Šคํ„ด์Šค์˜ ๋ณต์ œ๋ณธ์„ ์Šน๊ฒฉํ•˜๊ฑฐ๋‚˜ Cloud SQL Enterprise ๋ฒ„์ „์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด Cloud SQL์—์„œ ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ ๋ณด๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ธ์Šคํ„ด์Šค์— ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ ํ• ๋‹น

Google Cloud ํ”„๋กœ์ ํŠธ์— Cloud DNS API๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๋‹ค์Œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์Šน๊ฒฉํ•˜๊ฑฐ๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด Cloud SQL์—์„œ ์ธ์Šคํ„ด์Šค์— ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ž๋™์œผ๋กœ ํ• ๋‹นํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Cloud SQL์—์„œ ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ธ์Šคํ„ด์Šค์— ํ• ๋‹นํ•˜๋ ค๋ฉด ์“ฐ๊ธฐ ์—”๋“œํฌ์ธํŠธ ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฌธ์ œ ํ•ด๊ฒฐ

์•Œ๋ ค์ง„ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ์„, ์ž๊ฐ€ ์ง„๋‹จ์— ๋Œ€ํ•œ ๋„์›€์€ ์—ฐ๊ฒฐ ๋ฌธ์ œ ๋””๋ฒ„๊น…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„