將執行個體升級至新的網路架構


本頁說明如何將 Cloud SQL 執行個體從舊版網路架構升級至新版網路架構。

本 Cloud SQL 網路架構升級頁面僅適用於部分 Cloud SQL 執行個體。如果 Cloud SQL 執行個體使用的虛擬私有雲網路專案是在 2021 年 8 月前建立,您必須升級執行個體的 Cloud SQL 網路架構。

總覽

下表顯示新網路架構相較於舊網路架構的優點:

功能 舊網路架構 新網路架構
使用資料庫移轉服務,從 Cloud SQL 遷移至 AlloyDB for PostgreSQL 您必須為遷移作業設定私人 IP 位址 不需要進行其他網路設定。

舉例來說,從 Cloud SQL 遷移至 AlloyDB for PostgreSQL
使用私人 IP 將 Cloud SQL 執行個體連線至私人服務,例如 Cloud Build 或 Vertex AI 由於網路對等互連不具遞移性,因此不支援 支援
符合 Assured Workloads 規範的執行個體 不支援 支援
代管型 Microsoft AD 不支援 支援
Private Service Connect 不支援 支援
IP 位址範圍用量 PostgreSQL 適用的 Cloud SQL 私人 IP 執行個體專用子網路額外耗用的 IP 位址範圍 PostgreSQL 適用的 Cloud SQL 執行個體不會耗用額外的 IP 位址範圍
每個專案的預設 Cloud SQL 執行個體配額 100 1000

規劃升級作業

升級 Cloud SQL 執行個體的網路架構前,請根據下列升級限制規劃升級作業:

  • 升級網路架構時,執行個體平均會有最多 4 分鐘的停機時間。

  • 如果資料遷移作業正在進行中,您就無法在資料遷移期間將來源執行個體升級至新架構。

  • 如果從外部來源連線至執行個體,請確認所有對等互連連線都已更新,可匯出自訂路徑。

  • 如果您使用服務範圍,請確認已納入共用虛擬私有雲主機專案。如果未包含這個專案,遷移作業就會失敗。

  • 如果網路上的 Cloud SQL 執行個體超過 300 個,就無法升級執行個體的網路架構。

  • 如果您的網路在相同區域含有兩個以上的執行個體,且這些執行個體使用私人 IP 位址,Cloud SQL 就必須使用已分配私人服務存取權 IP 位址範圍中的額外 /24 範圍 (或範圍),在新版網路架構中託管這些執行個體。額外使用的 IP 屬於臨時性質,且會在後續的 Cloud SQL 維護事件期間移除。

規劃升級網路專案中的所有 Cloud SQL 執行個體

Cloud SQL 執行個體可以位於與虛擬私有雲網路相同的專案,也可以位於不同專案。代管虛擬私有雲網路的專案是「網路專案」

網路專案可以採用雙堆疊模式運作,也就是說,網路專案可以同時使用新舊網路架構,代管 Cloud SQL 執行個體。如果專案中至少有一個執行個體使用舊版架構,就會發生這種情況。因此 Cloud SQL 無法將專案升級至新架構。

如要查詢專案中所有執行個體的網路架構,可以使用 gcloud CLI 或 API。

雙堆疊專案的注意事項

使用雙堆疊專案時,請注意下列事項:

  • 隱含升級執行個體:修改執行個體的私人網路,或在雙堆疊專案中啟用私人 IP 位址時,Cloud SQL 可能會隱含地將執行個體升級至新版網路架構。
  • 不會降級架構:網路變更絕不會降級執行個體的網路架構。
  • 拒絕要求:如果網路變更需要降級才能完成,Cloud SQL 會拒絕要求。
  • 新執行個體無法使用舊網路架構的 IP 範圍:專案處於雙堆疊模式時,您無法建立使用與舊網路架構服務連線相關聯 IP 範圍的執行個體。

為避免潛在衝突並確保網路升級順利進行,建議您規劃將專案中的所有執行個體升級至新架構。

升級 Cloud SQL 網路架構

如要升級 Cloud SQL 執行個體的網路架構,請按照下列步驟操作:

  1. 檢查單一 Cloud SQL 執行個體多個 Cloud SQL 執行個體的網路架構。
  2. 升級 Cloud SQL 執行個體的網路架構

檢查單一 Cloud SQL 執行個體的網路架構

如要檢查單一執行個體的目前網路架構,請使用 gcloud sql instances describe 指令或 instances.get 方法。

如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱「使用 Cloud Shell」。

如要檢查單一執行個體的網路架構,請執行下列指令:

   gcloud sql instances describe INSTANCE_NAME
   

如果執行個體使用舊版網路架構,回應會類似以下內容:

   name: INSTANCE_NAME
   project: PROJECT_ID
   ...
   sqlNetworkArchitecture: OLD_NETWORK_ARCHITECTURE
  

如果執行個體使用新的網路架構,回應會類似以下內容:

   name: INSTANCE_NAME
   project: PROJECT_ID
   ...
   sqlNetworkArchitecture: NEW_NETWORK_ARCHITECTURE
  

sqlNetworkArchitecture 參數會指出執行個體使用的是舊版網路架構 (OLD_NETWORK_ARCHITECTURE) 還是新版網路架構 (NEW_NETWORK_ARCHITECTURE)。

如要查看執行個體的網路架構,請使用 Cloud SQL Admin API 的 instances.get 方法。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID。
  • INSTANCE_NAME:執行個體名稱。
  • NETWORK_ARCHITECTURE_TYPE:網路架構類型定義如下:
    • OLD_NETWORK_ARCHITECTURE:執行個體使用舊版網路架構。
    • NEW_NETWORK_ARCHITECTURE:執行個體使用新的網路架構。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "sqlNetworkArchitecture": "NETWORK_ARCHITECTURE_TYPE"
}

如要傳送要求,請展開以下其中一個選項:

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "kind": sql#instance
  "name": INSTANCE_NAME
  "project": PROJECT_ID
  "sqlNetworkArchitecture": enum (SqlNetworkArchitecture)
  ...
}

如要查看執行個體的網路架構,請使用 Cloud SQL Admin API 的 instances.get 方法。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID。
  • INSTANCE_NAME:執行個體名稱。
  • NETWORK_ARCHITECTURE_TYPE:網路架構類型定義如下:
    • OLD_NETWORK_ARCHITECTURE:執行個體使用舊版網路架構。
    • NEW_NETWORK_ARCHITECTURE:執行個體使用新的網路架構。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "sqlNetworkArchitecture": "NETWORK_ARCHITECTURE_TYPE"
}

如要傳送要求,請展開以下其中一個選項:

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "kind": sql#instance
  "name": INSTANCE_NAME
  "project": PROJECT_ID
  "sqlNetworkArchitecture": enum (SqlNetworkArchitecture)
  ...
}

檢查多個 Cloud SQL 執行個體的網路架構

如要檢查專案中多個執行個體的網路架構,請使用 gcloud sql instances list 指令或 instance.list 方法。

如要檢查專案中多個執行個體的網路架構,請執行下列指令:

gcloud sql instances list --show-sql-network-architecture

輸出結果類似如下。

NAME        DATABASE_VERSION LOCATION   ...     SQL_NETWORK_ARCHITECTURE
instance_1  POSTGRES_13      asia-northeast1-b  OLD_NETWORK_ARCHITECTURE
instance_2  MYSQL_5_7        europe-west1-d     NEW_NETWORK_ARCHITECTURE
...

如要檢查專案中多個執行個體的網路架構,請使用 instance.list 方法。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID。
  • NETWORK_ARCHITECTURE_TYPE:網路架構類型,如下所示:
    • OLD_NETWORK_ARCHITECTURE:執行個體使用舊版網路架構。
    • NEW_NETWORK_ARCHITECTURE:執行個體使用新的網路架構。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "sqlNetworkArchitecture": "NETWORK_ARCHITECTURE_TYPE"
}

如要傳送要求,請展開以下其中一個選項:

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X LIST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method LIST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "kind": sql#instance
  "name": INSTANCE_NAME
  "project": PROJECT_ID
  "sqlNetworkArchitecture": enum (SqlNetworkArchitecture)
  ...
}

如要檢查專案中多個執行個體的網路架構,請使用 instance.list 方法。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID。
  • NETWORK_ARCHITECTURE_TYPE:網路架構類型定義如下:
    • OLD_NETWORK_ARCHITECTURE:執行個體使用舊版網路架構。
    • NEW_NETWORK_ARCHITECTURE:執行個體使用新的網路架構。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "sqlNetworkArchitecture": "NETWORK_ARCHITECTURE_TYPE"
}

如要傳送要求,請展開以下其中一個選項:

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X LIST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method LIST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "kind": sql#instance
  "name": INSTANCE_NAME
  "project": PROJECT_ID
  "sqlNetworkArchitecture": enum (SqlNetworkArchitecture)
  ...
}

升級單一 Cloud SQL 執行個體的網路架構

如要升級單一執行個體的網路架構,請使用 gcloud sql instances patch 指令、instance.update 方法或 instance.patch 方法。

如要升級執行個體的網路架構,請執行下列指令:

gcloud sql instances patch INSTANCE_NAME --upgrade-sql-network-architecture

升級作業需要幾分鐘才能完成。

升級期間,系統會啟動長時間執行的作業,並傳回作業權杖:

operation_id

如要升級執行個體的網路架構,請使用 Cloud SQL Admin API 的 instance.updateinstance.patch 方法。

升級 Cloud SQL 網路架構時,要求中不得對執行個體進行其他更新。要求主體包含 DatabaseInstance 物件的例項,並將 sqlNetworkArchitecture 設為 NEW_NETWORK_ARCHITECTURE

升級期間,系統會啟動長時間執行的作業,並傳回作業權杖:

operation_id

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID。
  • INSTANCE_NAME:執行個體名稱。
  • NETWORK_ARCHITECTURE_TYPE:網路架構類型定義如下:
    • OLD_NETWORK_ARCHITECTURE:執行個體使用舊版網路架構。
    • NEW_NETWORK_ARCHITECTURE:執行個體使用新的網路架構。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "sqlNetworkArchitecture": "NETWORK_ARCHITECTURE_TYPE"
}

如要傳送要求,請展開以下其中一個選項:

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "kind": sql#instance,
  "targetLink": string,
  "status": enum (SqlOperationStatus),
  "name": string,
  "insertTime": string,
  "startTime": string,
  "endTime": string
  ...
}

如果執行個體升級失敗,請重試升級作業。

如要升級執行個體的網路架構,請使用 Cloud SQL Admin API 的 instance.update methodinstance.patch method

升級 Cloud SQL 網路架構時,要求中不得對執行個體進行其他更新。要求主體包含 DatabaseInstance 物件的例項,並將 sqlNetworkArchitecture 設為 NEW_NETWORK_ARCHITECTURE

升級期間,系統會啟動長時間執行的作業,並傳回下列作業權杖:

operation_id

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID。
  • INSTANCE_NAME:執行個體名稱。
  • NETWORK_ARCHITECTURE_TYPE:網路架構類型定義如下:
    • OLD_NETWORK_ARCHITECTURE:執行個體使用舊版網路架構。
    • NEW_NETWORK_ARCHITECTURE:執行個體使用新的網路架構。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "sqlNetworkArchitecture": "NETWORK_ARCHITECTURE_TYPE"
}

如要傳送要求,請展開以下其中一個選項:

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "kind": sql#instance,
  "targetLink": string,
  "status": enum (SqlOperationStatus),
  "name": string,
  "insertTime": string,
  "startTime": string,
  "endTime": string
  ...
}

如果執行個體升級作業因故失敗,您可以重試。

常見問題

本節提供有關升級 Cloud SQL 網路架構的常見問題解答。

升級對 Cloud SQL 執行個體有什麼影響?

升級網路架構時,Cloud SQL 執行個體會處於「維護」狀態。在此狀態下,執行個體平均會有最多四分鐘的停機時間。升級完成前,您無法對執行個體進行任何其他變更。專案或網路中的其他執行個體不會受到升級影響。

升級後,所有功能是否都正常運作?

新架構上的 Cloud SQL 執行個體功能,與舊架構上的功能相同。將執行個體升級為使用新版網路架構後,如要切換該執行個體的網路,請務必將目標網路中的所有執行個體也升級為新版網路架構。

哪些執行個體使用舊版網路架構?

2021 年 8 月後建立的新專案會自動使用新的網路架構。現有專案可能包含 2021 年 8 月前建立的 Cloud SQL 執行個體,且仍使用舊版網路架構。因此,現有專案中的所有執行個體都必須升級,該專案中的任何新執行個體才能開始使用新的網路架構。

所有新的 Cloud SQL 執行個體都會在新網路架構上建立嗎?

根據預設,在 2021 年 8 月後建立的專案中,新建立的 Cloud SQL 執行個體會使用新的網路架構。

如要在 2021 年 8 月前建立的專案中建立執行個體,並使用新的網路架構,則必須將該專案中的所有現有執行個體更新為新的網路架構。如果您使用共用 VPC,則必須更新參與共用 VPC 的專案中的所有執行個體。

更新專案中的所有現有執行個體後,請等待數小時,再於專案中建立任何執行個體。您在專案中建立的新執行個體會使用新的網路架構。

如果最近刪除的執行個體採用舊版網路架構,您必須等待四天,才能建立採用新版網路架構的執行個體。這段延遲時間是為了配合還原已刪除執行個體的程序。

是否能使用單一指令更新專案中的所有執行個體?

否,升級至新版網路架構是以每個執行個體為準。

如果我升級主要執行個體,副本會自動升級嗎?

否,升級至新版網路架構是以個別執行個體為準。每個副本都會視為個別執行個體,因此必須分別升級。也就是說,如果升級主要執行個體,但備用資源仍使用舊版網路架構,備用資源不會受到影響。反之亦然。升級副本時,主要副本不會受到影響。

我收到通知,指出 Cloud SQL 執行個體的網路架構即將升級。我需要做些什麼?

您不需要採取任何行動。

在某些情況下,當私人網路發生自動升級時,系統會暫時拒絕要求。如要解決這個問題,您可以按照「升級單一 Cloud SQL 執行個體的網路架構」一文中的程序,自行升級執行個體的網路架構。

嘗試升級執行個體時,收到「超出保留 IP 位址範圍」錯誤。我需要做些什麼?

如要在虛擬私有雲網路中使用具有私人 IP 的 Cloud SQL 執行個體,請在為虛擬私有雲網路設定私人服務存取權時,分配 IP 位址範圍。

舉例來說,如果已分配的 IP 位址範圍遭到變更或刪除,您可能會遇到類似下列的錯誤:

Network architecture upgrade not allowed for private-ip instance PROJECT_ID:INSTANCE_NAME
whose IP address range 10.0.0.0/24 is outside the reserved IP address range for
private services access. Re-allocate the IP address range for private services access and retry.

在本例中,原始分配的 IP 位址範圍名稱為 google-managed-services-VPC_NETWORK_NAME,原始分配的 IP 位址範圍為 10.0.0.0/16。 然後建立執行個體,並使用 10.0.0.1 的私人 IP 位址。 如果刪除 google-managed-services-VPC_NETWORK_NAME 的 IP 位址範圍,或更新為參照 10.1.0.0/16 範圍,而該範圍未涵蓋執行個體的私人 IP 位址 10.0.0.1,之後,當您嘗試升級執行個體的網路架構時,會遇到 outside the reserved IP address range 錯誤。

如要解決這個問題,請按照「為 Cloud SQL 設定私人服務存取權」一文中的程序操作。將包含執行個體 IP 位址的 IP 位址範圍,重新分配至私人服務存取權的範圍。至少可以分配錯誤訊息中回報的 IP 位址範圍 (在先前的範例中為 10.0.0.0/24)。

然後重試升級網路架構。

後續步驟