本頁說明如何將 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 執行個體的網路架構,請按照下列步驟操作:
檢查單一 Cloud SQL 執行個體的網路架構
如要檢查單一執行個體的目前網路架構,請使用 gcloud sql instances describe
指令或 instances.get
方法。
如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱「使用 Cloud Shell」。
如要檢查單一執行個體的網路架構,請執行下列指令:
gcloud sql instances describeINSTANCE_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 " }
如要傳送要求,請展開以下其中一個選項:
curl (Linux、macOS 或 Cloud Shell)
將要求主體儲存在名為 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 "
PowerShell (Windows)
將要求主體儲存在名為 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 " }
如要傳送要求,請展開以下其中一個選項:
curl (Linux、macOS 或 Cloud Shell)
將要求主體儲存在名為 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 "
PowerShell (Windows)
將要求主體儲存在名為 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 " }
如要傳送要求,請展開以下其中一個選項:
curl (Linux、macOS 或 Cloud Shell)
將要求主體儲存在名為 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"
PowerShell (Windows)
將要求主體儲存在名為 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 " }
如要傳送要求,請展開以下其中一個選項:
curl (Linux、macOS 或 Cloud Shell)
將要求主體儲存在名為 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"
PowerShell (Windows)
將要求主體儲存在名為 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 patchINSTANCE_NAME --upgrade-sql-network-architecture
升級作業需要幾分鐘才能完成。
升級期間,系統會啟動長時間執行的作業,並傳回作業權杖:
operation_id
如要升級執行個體的網路架構,請使用 Cloud SQL Admin API 的 instance.update
或 instance.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 " }
如要傳送要求,請展開以下其中一個選項:
curl (Linux、macOS 或 Cloud Shell)
將要求主體儲存在名為 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 "
PowerShell (Windows)
將要求主體儲存在名為 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 method
或 instance.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 " }
如要傳送要求,請展開以下其中一個選項:
curl (Linux、macOS 或 Cloud Shell)
將要求主體儲存在名為 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 "
PowerShell (Windows)
將要求主體儲存在名為 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 執行個體的網路架構即將升級。該怎麼辦?
- 嘗試升級執行個體時,收到「outside the reserved IP address range」(超出保留 IP 位址範圍) 錯誤訊息。該怎麼辦?
升級對 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 instancePROJECT_ID :INSTANCE_NAME whose IP address range10.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
)。
然後重試升級網路架構。
後續步驟
- 進一步瞭解 Private Service Connect
- 進一步瞭解 Assured Workloads
- 進一步瞭解如何為 Cloud SQL 設定私人服務存取權
- 進一步瞭解資料庫遷移服務至 AlloyDB for PostgreSQL