本頁說明如何使用 Private Service Connect 連線至 Cloud SQL 執行個體。
您可以使用 Private Service Connect,透過屬於不同群組、團隊、專案或機構的多個虛擬私有雲 (VPC) 網路,連線至主要 Cloud SQL 執行個體或任何讀取副本。
事前準備
gcloud CLI
支援在 Cloud SQL 執行個體中使用 Private Service Connect,版本為 416.0.0 以上。
使用者角色
下表說明在 Cloud SQL 執行個體中使用 Private Service Connect 所需的角色:
角色 | 說明 |
---|---|
compute.networkAdmin |
授予啟動與 Cloud SQL 執行個體連線的 VPC 網路的完整控制權。您可以建立及管理 IP 位址、防火牆規則、服務連線政策和 Private Service Connect 端點。 如果您使用私人服務連線,透過多個虛擬私有雲網路連線至 Cloud SQL 執行個體,則每個網路都有各自的管理員。 |
dns.admin |
授予 Cloud DNS 資源的完整控制權,包括 DNS 區域和記錄。 |
cloudsql.admin |
提供 Cloud SQL 執行個體的完整控制權,並在執行個體的整個生命週期中控管該執行個體。 |
cloudsql.instanceUser |
提供 Cloud SQL 執行個體的存取權。如果您透過 Cloud SQL 驗證 Proxy 用戶端連線,則必須具備 Cloud SQL 用戶端角色。如果直接連線,就不需要任何身分與存取權管理 (IAM) 角色和權限。 |
建立 Private Service Connect 端點
Private Service Connect 端點是用戶虛擬私有雲網路中的內部 IP 位址,該網路中的用戶端可以直接存取。用戶端可以使用這些端點連線至 Cloud SQL 執行個體。
您可以讓 Cloud SQL 在虛擬私有雲中自動建立 Private Service Connect 端點,也可以手動建立端點。
如要讓 Cloud SQL 自動建立 Private Service Connect 端點,請按照下列步驟操作:
- 在 VPC 網路中建立服務連線政策。您可以透過這項政策自動佈建 Private Service Connect 端點。
- 建立 Cloud SQL 執行個體,並為該執行個體啟用 Private Service Connect,然後設定執行個體,讓它自動建立 Private Service Connect 端點。
- 擷取執行個體的端點。這樣一來,您就能使用端點連線至執行個體。
如要手動建立 Private Service Connect 端點,請按照下列步驟操作:
- 建立 Cloud SQL 執行個體,並為該執行個體啟用 Private Service Connect。
- 取得服務連結 URI。您可以使用這個 URI 建立 Private Service Connect 端點。
- 為 Private Service Connect 端點保留內部 IP 位址,然後使用該位址建立端點。
自動建立端點
接下來的幾個章節將說明如何設定執行個體,讓 Cloud SQL 自動建立 Private Service Connect 端點。
建立服務連線政策
服務連線政策可讓您授權指定的服務類別,在用戶端虛擬私有雲網路中建立 Private Service Connect 端點。您可以使用服務連線政策,讓 Cloud SQL 自動建立 Private Service Connect 端點。
您可以使用 Google Cloud 控制台、gcloud CLI 或 API 建立服務連線政策。
主控台
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「連線政策」分頁標籤。
按一下「建立連線政策」。
輸入連線政策的「名稱」。
如要指定服務類別,請執行下列操作:
- 在「Source service class」(來源服務類別) 中,選取「Google services」。
- 在「Service class」選單中,選取
google-cloud-sql
,因為 Cloud SQL 是連線政策的代管服務。
在「目標端點範圍」部分中,選取這項政策適用的「網路」和「地區」。
在「政策」部分,從「子網路」選單中選取一或多個子網路。子網路會用於為端點分配 IP 位址。
選用步驟:為政策指定連線限制。這項限制會決定使用這項連線政策時,可建立的端點數量。如果未指定連線數量限制,則沒有限制。
按一下「建立政策」。
gcloud
如要建立服務連線政策,請使用 service-connection-policies create
指令。
gcloud network-connectivity service-connection-policies create POLICY_NAME \ --network=NETWORK \ --project=PROJECT_ID \ --region=REGION \ --service-class=SERVICE_CLASS \ --subnets=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETS \ --psc-connection-limit=LIMIT \ --description="DESCRIPTION" \ --producer-instance-location=PRODUCER_INSTANCE_LOCATION \ --allowed-google-producers-resource-hierarchy-level=RESOURCE_HIERARCHY_LEVEL
更改下列內容:
POLICY_NAME
:服務連線政策的名稱。NETWORK
:這項政策適用的網路。PROJECT_ID
:VPC 網路專案的專案 ID 或編號。對於共用虛擬私有雲網路,您必須在主專案中部署服務連線政策,因為服務專案不支援這些政策。REGION
:這項政策適用的地區。您必須為每個要自動連線服務的區域建立相同的政策。SERVICE_CLASS
:服務類別的生產者提供的資源 ID。在 Cloud SQL 中,服務類別為google-cloud-sql
。SUBNETS
:一或多個用於為 Private Service Connect 端點分配 IP 位址的一般消費者子網路。這些 IP 位址會在建立及刪除受管理的服務執行個體時自動分配,並傳回至子網路的集區。子網路必須與服務連線政策位於相同區域。如果多個連線政策共用相同的地區,您可以在這些政策中重複使用相同的子網路。您可以在以半形逗號分隔的清單中輸入多個子網路。LIMIT
:您可以使用這項政策建立的端點數量上限。如未指定,則代表沒有限制。DESCRIPTION
:服務連線政策的選用說明。PRODUCER_INSTANCE_LOCATION
:使用這個選用標記,指定是否要授權 Cloud SQL 執行個體的位置自訂階層。您只能將PRODUCER_INSTANCE_LOCATION
的值設為下列其中一個:custom-resource-hierarchy-levels
:執行個體必須位於您提供的allowed-google-producers-resource-hierarchy-level
參數值中,位於其中一個專案、資料夾或機構。none
:執行個體與服務連線政策位於相同專案。
RESOURCE_HIERARCHY_LEVEL
:實例所在的專案、資料夾或機構清單。這個清單的格式為projects/PROJECT_ID
、folders/FOLDER_ID
或organizations/ORGANIZATION_ID
。
舉例來說,下列指令會為
google-cloud-sql
服務類別建立服務連線政策,該類別會從 managed-services
子網路中分配 IP 位址。使用這項政策最多可建立 10 個 Private Service Connect 端點。端點必須在與代管服務執行個體位於同一機構的專案中建立。Cloud SQL 執行個體位於 myproject
專案中。
gcloud network-connectivity service-connection-policies create cloud-sql-policy \ --network=default \ --project=my-project \ --region=us-central1 \ --service-class=google-cloud-sql \ --subnets=managed-service-subnet \ --psc-connection-limit=10 \ --producer-instance-location=custom-resource-hierarchy-levels \ --allowed-google-producers-resource-hierarchy-level=projects/myproject
REST
使用任何要求資料之前,請先替換以下項目:
PROJECT_ID
:專案 ID。REGION
:服務連線政策的區域。POLICY_NAME
:服務連線政策的名稱。DESCRIPTION
:服務連線政策的選用說明。NETWORK
:服務連線政策的網路。LIMIT
:您可以使用這項政策建立的端點數量上限。如未指定,則代表沒有限制。SUBNETS
:一或多個一般消費者子網路,用於為 Private Service Connect 端點分配 IP 位址。這些 IP 位址會在建立及刪除受管理的服務執行個體時自動分配,並回傳至子網路的集區。子網路必須與服務連線政策位於相同區域。如果多個連線政策共用相同的區域,您可以在這些政策中重複使用相同的子網路。您可以使用半形逗號分隔的清單輸入多個子網路。SERVICE_CLASS
:服務類別的產生者提供的資源 ID。
HTTP 方法和網址:
POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies?serviceConnectionPolicyId=POLICY_NAME
JSON 要求主體:
{ "description": "DESCRIPTION", "network": "projects/PROJECT_ID/global/networks/NETWORK", "pscConfig": { "limit": "LIMIT", "subnetworks": [ "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET" ] }, "serviceClass": "SERVICE_CLASS" }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata", "createTime": "2023-08-15T16:59:29.236110917Z", "target": "projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
建立 Cloud SQL 執行個體
您可以使用 gcloud CLI 或 API,為執行個體啟用 Private Service Connect,並設定執行個體自動建立端點。
gcloud
如要建立已啟用 Private Service Connect 的執行個體,請使用 gcloud sql instances create
指令:
gcloud sql instances create INSTANCE_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --enable-private-service-connect \ --allowed-psc-projects=ALLOWED_PROJECTS \ --availability-type=AVAILABILITY_TYPE \ --no-assign-ip \ --database-version=DATABASE_VERSION --cpu=NUMBER_OF_vCPUs \ --memory=MEMORY_SIZE \ --root-password=ROOT_PASSWORD \ --psc-auto-connections=network=CONSUMER_NETWORK,project=CONSUMER_PROJECT
請將以下項目改為對應的值:
- INSTANCE_NAME:執行個體的名稱。
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
- REGION_NAME:執行個體的區域名稱。
ALLOWED_PROJECTS:以半形逗號分隔的清單,列出允許的專案 ID 或編號,Private Service Connect 端點可透過這些專案 ID 或編號連線至 Cloud SQL 執行個體。
如果專案未包含在這份清單中,您就無法在專案中建立Private Service Connect 端點來連線至執行個體。
- AVAILABILITY_TYPE:啟用執行個體的高可用性。針對這個參數,請指定下列其中一個值:
REGIONAL
:啟用高可用性,建議用於實際工作環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。ZONAL
:不提供備援功能。這是預設值。
如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。
- DATABASE_VERSION:執行個體的資料庫版本 (例如
SQLSERVER_2019_STANDARD
)。 - NUMBER_OF_vCPUs:執行個體的核心數量。
- MEMORY_SIZE:執行個體的記憶體量。
- ROOT_PASSWORD:
root
Cloud SQL 使用者的密碼。 - CONSUMER_NETWORK:Private Service Connect 端點需要建立的 VPC 網路路徑。例如:
projects/my-host-project/global/networks/default
。 CONSUMER_PROJECT:Private Service Connect 端點建立的專案。如果您使用共用虛擬私有雲網路,則可以是主專案或服務專案。
您在自動連線參數中指定的所有專案都會自動新增至允許的專案。如要手動建立 Private Service Connect 端點,您可以選擇將這些專案加入允許專案清單。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
- INSTANCE_NAME:執行個體的名稱。
- REGION_NAME:執行個體的區域名稱。
- ROOT_PASSWORD:
root
Cloud SQL 使用者的密碼。 - AVAILABILITY_TYPE:啟用執行個體的高可用性。針對這個參數,請指定下列其中一個值:
REGIONAL
:啟用高可用性,建議用於實際工作環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。ZONAL
:不提供備援功能。這是預設值。
如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。
ALLOWED_PROJECTS:以半形逗號分隔的清單,列出允許的專案 ID 或編號,Private Service Connect 端點可透過這些專案 ID 或編號連線至 Cloud SQL 執行個體。
如果專案未包含在這份清單中,您就無法在專案中建立Private Service Connect 端點來連線至執行個體。
- MACHINE_TYPE:代表執行個體機器類型的列舉字串值。例如:
db-custom-NUMBER_OF_vCPUs-MEMORY_SIZE
,其中 NUMBER_OF_vCPUs 和 MEMORY_SIZE 分別是核心數量和執行個體所需的記憶體容量。 - CONSUMER_NETWORK:您要允許自動建立 Private Service Connect 端點的 VPC 網路。
- PARENT_PROJECT:包含網路 CONSUMER_NETWORK 的專案。如果您未在 CONSUMER_PROJECT 中指定其他專案,系統會在 PARENT_PROJECT 中自動建立端點
CONSUMER_PROJECT:選用。只有在 CONSUMER_NETWORK 為共用虛擬私有雲網路,且您想允許在服務專案中自動建立 Private Service Connect 端點時,才需要指定這個值。
您在自動連線參數中指定的所有專案都會自動新增至允許的專案。如要手動建立 Private Service Connect 端點,您可以選擇將這些專案加入允許專案清單。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
JSON 要求主體:
{ "name": "INSTANCE_NAME", "project": PROJECT_ID", "region": "REGION_NAME", "databaseVersion": "SQLSERVER_2019_STANDARD", "rootPassword": "ROOT_PASSWORD", "kind": "sql#instance", "settings": { "availabilityType": "AVAILABILITY_TYPE", "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscAutoConnections": [ { "consumerProject":"CONSUMER_PROJECT", "consumerNetwork":"projects/PARENT_PROJECT/global/networks/CONSUMER_NETWORK" } ], "pscEnabled": true } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "tier": "MACHINE_TYPE" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME", "status": "RUNNING", "user": "[email protected]", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "2023-06-14T18:48:35.499Z", "operationType": "CREATE", "name": "OPERATION_ID", "targetId": "INSTANCE_NAME", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
擷取端點
擷取內部 IP 位址 (即執行個體的 Private Service Connect 端點) 後,您就可以使用這個端點連線至執行個體。
gcloud
如要查看執行個體的相關資訊,包括執行個體的 Private Service Connect 端點 IP 位址,請使用 gcloud sql instances describe
指令:
gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID \ --format='json(settings.ipConfiguration.pscConfig.pscAutoConnections)'
請將以下項目改為對應的值:
- INSTANCE_NAME:Cloud SQL 執行個體的名稱。如果這個執行個體已啟用 Private Service Connect,虛擬私有雲網路中的 Private Service Connect 端點就能連線至這個執行個體。
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
請在回應中記下 pscConfig:pscAutoConnections:ipAddress
欄位旁邊顯示的值。這個值是內部 IP 位址,也是執行個體的 Private Service Connect 端點。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
- INSTANCE_NAME:Cloud SQL 執行個體的名稱。如果這個執行個體已啟用 Private Service Connect,虛擬私有雲網路中的 Private Service Connect 端點就能連線至這個執行個體。
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD", "settings": { "authorizedGaeApplications": [], "tier": "db-custom-2-7680", "kind": "sql#settings", "availabilityType": "REGIONAL", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "activationPolicy": "ALWAYS", "ipConfiguration": { "authorizedNetworks": [], "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscAutoConnections": { consumerNetwork:"projects/PARENT_PROJECT/global/networks/CONSUMER_NETWORK", consumerNetworkStatus:"CONSUMER_NETWORK_STATUS", consumerProject:"CONSUMER_PROJECT", ipAddress:"IP_ADDRESS", status:"STATUS" }, "pscEnabled": true }, "ipv4Enabled": false }, }
已啟用 Private Service Connect 的執行個體會顯示下列欄位:
allowedConsumerProjects
:執行個體的許可專案清單。您可以從這些專案中的任何虛擬私有雲網路,建立 Private Service Connect 端點至執行個體的服務連結。pscAutoConnections
:允許的 VPC 網路、服務連線政策的狀態,以及執行個體端點的 IP 位址狀態。pscEnabled
:是否已為執行個體啟用 Private Service Connect。
如要瞭解如何建立該工作的基礎 REST API 要求,請參閱 instances:get 頁面。
手動建立端點
接下來的幾節將說明如何手動建立 Private Service Connect 端點。
建立 Cloud SQL 執行個體
您可以使用 gcloud CLI、Terraform 或 API,為執行個體啟用 Private Service Connect。
gcloud
如要建立已啟用 Private Service Connect 的執行個體,請使用 gcloud sql instances create
指令:
gcloud sql instances create INSTANCE_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --enable-private-service-connect \ --allowed-psc-projects=ALLOWED_PROJECTS \ --availability-type=AVAILABILITY_TYPE \ --no-assign-ip \ --database-version=DATABASE_VERSION --cpu=NUMBER_OF_vCPUs \ --memory=MEMORY_SIZE \ --root-password=ROOT_PASSWORD
請將以下項目改為對應的值:
- INSTANCE_NAME:執行個體的名稱。
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
- REGION_NAME:執行個體的區域名稱。
ALLOWED_PROJECTS:以半形逗號分隔的清單,列出允許的專案 ID 或編號,Private Service Connect 端點可透過這些專案 ID 或編號連線至 Cloud SQL 執行個體。
如果專案未包含在這份清單中,您就無法在專案中建立Private Service Connect 端點來連線至執行個體。
- AVAILABILITY_TYPE:為執行個體啟用高可用性。針對這個參數,請指定下列其中一個值:
REGIONAL
:啟用高可用性,建議用於實際工作環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。ZONAL
:不提供備援功能。這是預設值。
如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。
- DATABASE_VERSION:執行個體的資料庫版本 (例如
SQLSERVER_2019_STANDARD
)。 - NUMBER_OF_vCPUs:執行個體的核心數量。
- MEMORY_SIZE:執行個體的記憶體量。
- ROOT_PASSWORD:
root
Cloud SQL 使用者的密碼。
Terraform
如要建立已啟用 Private Service Connect 的執行個體,請使用 google_sql_database_instance
Terraform 資源。
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含
.tf
副檔名,例如main.tf
。在本教學課程中,檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。
將範例程式碼複製到新建立的
main.tf
中。您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 查看並修改要套用至環境的範例參數。
- 儲存變更。
-
初始化 Terraform。這項操作只需對每個目錄執行一次。
terraform init
如要使用最新版的 Google 供應器,請視需要加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
- INSTANCE_NAME:執行個體的名稱。
- REGION_NAME:執行個體的區域名稱。
- ROOT_PASSWORD:
root
Cloud SQL 使用者的密碼。 - AVAILABILITY_TYPE:啟用執行個體的高可用性。針對這個參數,請指定下列其中一個值:
REGIONAL
:啟用高可用性,建議用於實際工作環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。ZONAL
:不提供備援功能。這是預設值。
如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。
ALLOWED_PROJECTS:以半形逗號分隔的清單,列出允許的專案 ID 或編號,Private Service Connect 端點可透過這些專案 ID 或編號連線至 Cloud SQL 執行個體。
如果專案未包含在這份清單中,您就無法在專案中建立Private Service Connect 端點來連線至執行個體。
- MACHINE_TYPE:代表執行個體機器類型的列舉字串值。例如:
db-custom-NUMBER_OF_vCPUs-MEMORY_SIZE
,其中 NUMBER_OF_vCPUs 和 MEMORY_SIZE 分別是核心數量和執行個體所需的記憶體容量。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
JSON 要求主體:
{ "name": "INSTANCE_NAME", "project": PROJECT_ID", "region": "REGION_NAME", "databaseVersion": "SQLSERVER_2019_STANDARD", "rootPassword": "ROOT_PASSWORD", "kind": "sql#instance", "settings": { "availabilityType": "AVAILABILITY_TYPE", "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscEnabled": true } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "tier": "MACHINE_TYPE" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME", "status": "RUNNING", "user": "[email protected]", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "2023-06-14T18:48:35.499Z", "operationType": "CREATE", "name": "OPERATION_ID", "targetId": "INSTANCE_NAME", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
取得服務附件
建立啟用 Private Service Connect 的 Cloud SQL 執行個體後,請取得服務連結 URI,並使用該 URI 建立 Private Service Connect 端點。
gcloud
如要查看已啟用 Private Service Connect 的執行個體摘要資訊,例如 pscServiceAttachmentLink
欄位 (會顯示指向執行個體服務連結的 URI),請使用 gcloud sql instances describe
指令:
gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
請將以下項目改為對應的值:
- INSTANCE_NAME:VPC 網路中的 Private Service Connect 端點可連線的 Cloud SQL 執行個體名稱
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
以下範例顯示此指令的輸出範例:
gcloud sql instances describe myinstance \ --project=12345 ... pscServiceAttachmentLink: projects/45678/regions/myregion/serviceAttachments/myserviceattachment
Terraform
如要取得服務連結 URI,請使用 google_compute_address
Terraform 資源。
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含
.tf
副檔名,例如main.tf
。在本教學課程中,檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。
將範例程式碼複製到新建立的
main.tf
中。您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 查看並修改要套用至環境的範例參數。
- 儲存變更。
-
初始化 Terraform。這項操作只需對每個目錄執行一次。
terraform init
如要使用最新版的 Google 供應器,請視需要加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
- INSTANCE_NAME:執行個體名稱
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ ... pscServiceAttachmentLink: "projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME" }
pscServiceAttachmentLink
欄位會顯示指向執行個體服務連結的 URI。
建立 Private Service Connect 端點
您可以為 Private Service Connect 端點保留內部 IP 位址,並使用該位址建立端點。如要建立端點,您需要服務附件 URI 和執行個體允許的專案。
gcloud
如要為 Private Service Connect 端點保留內部 IP 位址,請使用
gcloud compute addresses create
指令:gcloud compute addresses create ADDRESS_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --subnet=SUBNET_NAME \ --addresses=INTERNAL_IP_ADDRESS
請將以下項目改為對應的值:
如要確認 IP 位址是否已保留,請使用
gcloud compute addresses list
指令:gcloud compute addresses list ADDRESS_NAME \ --project=PROJECT_ID
在回應中,確認 IP 位址顯示
RESERVED
狀態。如要建立 Private Service Connect 端點並將其指向 Cloud SQL 服務連結,請使用
gcloud compute forwarding-rules create
指令:gcloud compute forwarding-rules create ENDPOINT_NAME \ --address=ADDRESS_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --network=NETWORK_NAME \ --target-service-attachment=SERVICE_ATTACHMENT_URI \ --allow-psc-global-access
請將以下項目改為對應的值:
- ENDPOINT_NAME:端點名稱
- NETWORK_NAME:端點的虛擬私有雲網路名稱
- SERVICE_ATTACHMENT_URI:服務附件的 URI
如要確認服務附件是否接受端點,請使用
gcloud compute forwarding-rules describe
指令:gcloud compute forwarding-rules describe ENDPOINT_NAME \ --project=PROJECT_ID \ --region=REGION_NAME
在回應中,確認
pscConnectionStatus
欄位的狀態為ACCEPTED
。端點可連線至服務附件。
Terraform
如要建立 Private Service Connect 端點,請使用 google_sql_database_instance
Terraform 資源。
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含
.tf
副檔名,例如main.tf
。在本教學課程中,檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。
將範例程式碼複製到新建立的
main.tf
中。您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 查看並修改要套用至環境的範例參數。
- 儲存變更。
-
初始化 Terraform。這項操作只需對每個目錄執行一次。
terraform init
如要使用最新版的 Google 供應器,請視需要加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
REST
為 Private Service Connect 端點保留內部 IP 位址。
確認 IP 位址是否已保留。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含 Private Service Connect 端點的 Google Cloud 專案 ID 或專案編號
- REGION_NAME:區域名稱
- ADDRESS_NAME:IP 位址名稱
HTTP 方法和網址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "compute#address", "id": "ADDRESS_ID", "creationTimestamp": "2024-05-09T11:20:50.114-07:00", "name": "ADDRESS_NAME", "description": "This is the name of the internal IP address.", "address": "IP_ADDRESS", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME", "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "addressType": "EXTERNAL" }
在回應中,確認 IP 位址顯示
RESERVED
狀態。建立 Private Service Connect 端點,並將其指向 Cloud SQL 服務連結。
確認服務附件是否接受端點。
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含 Private Service Connect 端點的 Google Cloud 專案 ID 或專案編號
- REGION_NAME:區域名稱
- ENDPOINT_NAME:端點名稱
HTTP 方法和網址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "compute#forwardingRule", "id": "ENDPOINT_ID", "creationTimestamp": "2024-05-09T12:03:21.383-07:00", "name": "ENDPOINT_NAME", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "IPAddress": "IP_ADDRESS", "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default", "serviceDirectoryRegistrations": [ { "namespace": "goog-psc-default" } ], "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "fingerprint": "FINGERPRINT_ID", "pscConnectionId": "CONNECTION_ID", "pscConnectionStatus": "ACCEPTED", "allowPscGlobalAccess": true }
在回應中,確認
pscConnectionStatus
欄位的狀態為ACCEPTED
。端點可連線至服務附件。
連線至 Cloud SQL 執行個體
您可以使用內部 IP 位址、DNS 記錄、Cloud SQL Auth Proxy、Cloud SQL 語言連接器或其他 Google Cloud 應用程式,連線至已啟用 Private Service Connect 的 Cloud SQL 執行個體。
設定 DNS 代管區域和 DNS 記錄
Cloud SQL 不會自動建立 DNS 記錄。相反地,執行個體查詢 API 回應會提供建議的 DNS 名稱。建議您在對應的 VPC 網路中,於私人 DNS 區域中建立 DNS 記錄。這樣一來,您就能透過一致的方式,使用 Cloud SQL 驗證 Proxy 從不同網路連線。
gcloud
如要查看 Cloud SQL 執行個體的摘要資訊 (包括執行個體的 DNS 名稱),請使用
gcloud sql instances describe
指令:gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
請將以下項目改為對應的值:
- INSTANCE_NAME:Cloud SQL 執行個體的名稱
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
在回應中,確認 DNS 名稱是否顯示。這個名稱的格式如下:
INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.
。例如:1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
。如果您想使用自訂 DNS 名稱連線至 Cloud SQL 執行個體,而非使用本節中的預先定義 DNS 名稱,請在建立執行個體時設定自訂主體別名 (SAN)。您插入自訂 SAN 設定的自訂 DNS 名稱會新增至執行個體的伺服器憑證 SAN 欄位。這樣一來,您就能安全地使用自訂 DNS 名稱進行主機名稱驗證。
如要進一步瞭解如何設定自訂 SAN,請參閱「建立執行個體」。
如要建立私人 DNS 區域,請使用
gcloud dns managed-zones create
指令。這個區域與 VPC 網路相關聯,該網路會透過 Private Service Connect 端點連線至 Cloud SQL 執行個體。gcloud dns managed-zones create ZONE_NAME \ --project=PROJECT_ID \ --description="DESCRIPTION" \ --dns-name=DNS_NAME \ --networks=NETWORK_NAME \ --visibility=private
請將以下項目改為對應的值:
- ZONE_NAME:DNS 區域名稱
- PROJECT_ID:包含區域的 Google Cloud 專案 ID 或專案編號
- DESCRIPTION:可用區的說明 (例如,Cloud SQL 執行個體的 DNS 可用區)
- DNS_NAME:區域的 DNS 後置字串名稱,例如
REGION_NAME.sql.goog.
(REGION_NAME 是區域的區域名稱) - NETWORK_NAME:虛擬私有雲網路的名稱
建立 Private Service Connect 端點後,如要在可用區中建立 DNS 記錄,請使用
gcloud dns record-sets create
指令:gcloud dns record-sets create DNS_RECORD \ --project=PROJECT_ID \ --type=RRSET_TYPE \ --rrdatas=RR_DATA \ --zone=ZONE_NAME
請將以下項目改為對應的值:
- DNS_RECORD:DNS 記錄的名稱。這個記錄會設為您在本程序稍早從 Cloud SQL 執行個體擷取的 DNS 名稱 (例如
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
)。 - RRSET_TYPE:DNS 記錄集合的資源記錄類型 (例如
A
)。 - RR_DATA:為 Private Service Connect 端點分配的 IP 位址 (例如
198.51.100.5
)。您也可以輸入多個值,例如rrdata1 rrdata2 rrdata3
(例如10.1.2.3 10.2.3.4 10.3.4.5
)。
- DNS_RECORD:DNS 記錄的名稱。這個記錄會設為您在本程序稍早從 Cloud SQL 執行個體擷取的 DNS 名稱 (例如
REST
- 取得 Cloud SQL 執行個體的 DNS 名稱。
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
- INSTANCE_NAME:執行個體名稱
- 建立私人 DNS 區域。這個區域與 VPC 網路相關聯,該網路會透過 Private Service Connect 端點連線至 Cloud SQL 執行個體。
- PROJECT_ID:包含 DNS 區域的 Google Cloud 專案 ID 或專案編號
- ZONE_NAME:區域名稱
- DESCRIPTION:可用區的說明 (例如,Cloud SQL 執行個體的 DNS 可用區)
- DNS_NAME:區域的 DNS 後置字串名稱,例如
REGION_NAME.sql.goog.
(REGION_NAME 是區域的區域名稱) - NETWORK_NAME:虛擬私有雲網路名稱
- 建立 Private Service Connect 端點後,請在該區域中建立 DNS 記錄。
- PROJECT_ID:包含 DNS 區域的 Google Cloud 專案 ID 或專案編號。
- ZONE_NAME:可用區名稱。
- DNS_RECORD:DNS 記錄的名稱。這個記錄會設為您在本程序稍早從 Cloud SQL 執行個體擷取的 DNS 名稱 (例如
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
)。 - RRSET_TYPE:記錄集合的類型 (例如
A
)。 - TTL:記錄集合的存留時間 (TTL),以秒為單位 (例如
300
)。 - RR_DATA:為 Private Service Connect 端點分配的 IP 位址 (例如
198.51.100.5
)。您也可以輸入多個值,例如rrdata1 rrdata2 rrdata3
(例如10.1.2.3 10.2.3.4 10.3.4.5
)。
使用任何要求資料之前,請先替換以下項目:
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ ... "dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog." }
dnsName
欄位會顯示 Cloud SQL 執行個體的 DNS 名稱。DNS 名稱的結尾一律是句號 (.
)。
使用任何要求資料之前,請先替換以下項目:
HTTP 方法和網址:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
JSON 要求主體:
{ "name": "ZONE_NAME", "description": "DESCRIPTION", "dnsName": "DNS_NAME", "visibility": "private", "privateVisibilityConfig": { "kind": "dns#managedZonePrivateVisibilityConfig", "networks": [ { "kind": "dns#managedZonePrivateVisibilityConfigNetwork", "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME" } ] } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "ZONE_NAME", "dnsName": "DNS_NAME", "description": "DESCRIPTION", "id": "ID", "nameServers": [ "ns-gcp-private.googledomains.com." ], "creationTime": "2024-05-10T17:05:34.607Z", "visibility": "private", "privateVisibilityConfig": { "networks": [ { "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME", "kind": "dns#managedZonePrivateVisibilityConfigNetwork" } ], "gkeClusters": [], "kind": "dns#managedZonePrivateVisibilityConfig" }, "cloudLoggingConfig": { "kind": "dns#managedZoneCloudLoggingConfig" }, "kind": "dns#managedZone" }
使用任何要求資料之前,請先替換以下項目:
HTTP 方法和網址:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME
JSON 要求主體:
{ "deletions": [] "additions": [ { "name": "DNS_RECORD", "type": "RRSET_TYPE", "ttl": TTL, "rrdatas": [ "RR_DATA" ] } ] }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "additions": [ { "name": "DNS_RECORD", "type": "RRSET_TYPE", "ttl": TTL, "rrdatas": [ "RR_DATA" ], "signatureRrdatas": [], "kind": "dns#resourceRecordSet" } ], "deletions": [], "startTime": "2024-05-10T17:29:44.375Z", "id": "CHANGE_ID", "status": "pending", "kind": "dns#change" }
使用 DNS 記錄直接連線
使用 DNS 記錄連線至 Cloud SQL 執行個體前,請先執行下列操作:
- 建立 Private Service Connect 端點。
- 確認執行個體的服務附件是否接受端點。如要確認端點的狀態為
ACCEPTED
,請查看狀態。 - 設定 DNS 代管區域和 DNS 記錄。
滿足這些條件後,您就可以使用 DNS 記錄,從您建立端點的任何 VPC 網路連線至執行個體。
sqlcmd -S DNS_RECORD -d DATABASE_NAME -U USERNAME
請將以下項目改為對應的值:
- DNS_RECORD:端點的 DNS 記錄
- DATABASE_NAME:執行個體內含的 SQL Server 適用 Cloud SQL 資料庫名稱
- USERNAME:連線至執行個體的使用者名稱
直接透過內部 IP 位址連線
在連線至已啟用 Private Service Connect 的 Cloud SQL 執行個體之前,請先執行下列操作:
- 建立 Private Service Connect 端點。
- 確認執行個體的服務附件是否接受端點。如要確認端點的狀態為
ACCEPTED
,請查看狀態。
符合這些條件後,您就可以使用端點的 IP 位址,從建立端點的任何虛擬私有雲網路存取執行個體。
使用端點 IP 位址的名稱,擷取 Private Service Connect 端點的內部 IP 位址。
gcloud
如要擷取 IP 位址,請使用
gcloud compute addresses describe
指令:gcloud compute addresses describe ADDRESS_NAME \ --project=PROJECT_ID \ --region=REGION_NAME
請將以下項目改為對應的值:
- ADDRESS_NAME:端點的 IP 位址名稱
- PROJECT_ID:包含端點的 Google Cloud 專案 ID 或專案編號
- REGION_NAME:端點的區域名稱
在回應中,確認
address
欄位顯示 IP 位址。這是內部 IP 位址。REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含端點的 Google Cloud 專案 ID 或專案編號
- REGION_NAME:端點的區域名稱
- ADDRESS_NAME:端點的 IP 位址名稱
HTTP 方法和網址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "compute#address", "id": "ADDRESS_ID", "creationTimestamp": "2024-05-09T11:20:50.114-07:00", "name": "ADDRESS_NAME", "description": "This is the name of the internal IP address.", "address": "IP_ADDRESS", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME", "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "addressType": "EXTERNAL" }
內部 IP 位址是與
address
欄位相關聯的值。或者,您也可以使用 Cloud SQL 執行個體的服務連結,擷取 Private Service Connect 端點的內部 IP 位址。
gcloud
如要擷取 IP 位址,請使用
gcloud compute forwarding-rules list
指令:gcloud compute forwarding-rules list \ --filter="TARGET:REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME" \ --project=PROJECT_ID
請將以下項目改為對應的值:
- REGION_NAME:端點的區域名稱
- PROJECT_ID:包含端點的 Google Cloud 專案 ID 或專案編號
- SERVICE_ATTACHMENT_NAME:Cloud SQL 執行個體的服務附件名稱
在回應中,確認是否顯示 IP 位址。這是內部 IP 位址。
以下是回應範例:
NAME
REGION
IP_ADDRESS
TARGET
myInstance
us-central1
10.10.10.10
us-central1/serviceAttachments/a-123456789e0a-psc-service-attachment-abc123d4e5f67gh8
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含端點的 Google Cloud 專案 ID 或專案編號
- REGION_NAME:端點的區域名稱
- SERVICE_ATTACHMENT_PROJECT_ID:包含服務附件的 Google Cloud 專案 ID 或專案編號
- SERVICE_ATTACHMENT_NAME:Cloud SQL 執行個體的服務附件名稱
HTTP 方法和網址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules?target="https://www.googleapis.com/compute/v1/projects/SERVICE_ATTACHMENT_PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME"
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "compute#forwardingRuleList", "id": "projects/PROJECT_ID/regions/REGION_NAME/forwardingRules", "items": [ { "kind": "compute#forwardingRule", "id": "FORWARDING_RULE_ID", "creationTimestamp": "2023-10-31T13:04:37.168-07:00", "name": "FORWARDING_RULE_NAME", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "IPAddress": "IP_ADDRESS", "target": "https://www.googleapis.com/compute/v1/projects/SERVICE_ATTACHMENT_PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/FORWARDING_RULE_NAME", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "serviceDirectoryRegistrations": [ { "namespace": "goog-psc-default" } ], "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "fingerprint": "FINGERPRINT_ID", "pscConnectionId": "PSC_CONNECTION_ID", "pscConnectionStatus": "CLOSED", "allowPscGlobalAccess": true } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules" }
內部 IP 位址是與
IPAddress
欄位相關聯的值。-
如要連線至 Cloud SQL 執行個體,請使用內部 IP 位址。
sqlcmd -S IP_ADDRESS -d DATABASE_NAME -U USERNAME
請將以下項目改為對應的值:
- IP_ADDRESS:端點的 IP 位址
- DATABASE_NAME:執行個體內含的 SQL Server 適用 Cloud SQL 資料庫名稱
- USERNAME:連線至執行個體的使用者名稱
使用 Cloud SQL 驗證 Proxy 連線
Cloud SQL Auth Proxy 是一種連接器,可在啟用 Private Service Connect 的情況下,提供安全存取執行個體的方式,無須使用授權網路或設定 SSL。
如要允許 Cloud SQL 驗證 Proxy 用戶端連線,請設定 DNS 記錄,與為執行個體提供的建議 DNS 名稱相符。DNS 記錄是 DNS 資源與網域名稱之間的對應。
如果您是透過 Private Service Connect 連線,則必須使用 v2.5.0 以上版本的 Cloud SQL 驗證 Proxy。
下載並安裝 Cloud SQL 驗證 Proxy
如要連線至已啟用私人服務連線的執行個體,您必須下載並安裝 Cloud SQL 驗證 Proxy 的二進位檔。您下載的二進位檔取決於作業系統,以及該作業系統使用 32 位元或 64 位元核心。大多數較新的硬體都使用 64 位元核心。
如果您不確定自己的機器是否執行 32 位元或 64 位元核心,請在 Linux 或 macOS 中使用 uname -a
指令。如為 Windows,請參閱 Windows 說明文件。
啟動 Cloud SQL 驗證 Proxy
Cloud SQL 驗證 Proxy 支援連線至已啟用 Private Service Connect 的執行個體。詳情請參閱「啟動 Cloud SQL 驗證 Proxy」。
- 查看 Cloud SQL 執行個體的摘要資訊,包括執行個體的連線名稱。
gcloud
如要查看 Cloud SQL 執行個體的摘要資訊,請使用
gcloud sql instances describe
指令。gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID \ --format='value(connectionName)'
請將以下項目改為對應的值:
- INSTANCE_NAME:Cloud SQL 執行個體的名稱
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
連線名稱的格式為
PROJECT_ID:REGION_NAME:INSTANCE_NAME
。REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號
- INSTANCE_NAME:執行個體名稱
HTTP 方法和網址:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ ... "connectionName": "PROJECT_ID:REGION_NAME:INSTANCE_NAME" }
連線名稱的格式為
PROJECT_ID:REGION_NAME:INSTANCE_NAME
。 - 複製執行個體連線名稱。
啟動 Cloud SQL 驗證 Proxy:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --psc
將 INSTANCE_CONNECTION_NAME 替換為您在上一個步驟中複製的執行個體連線名稱。
使用 Cloud SQL 語言連接器建立連線
Cloud SQL 語言連接器是可提供安全存取權的程式庫,可啟用 Private Service Connect,無須授權網路或設定 SSL。
如要允許與 Cloud SQL 語言連接器建立連線,請設定 DNS 記錄,與為執行個體提供的建議 DNS 名稱相符。DNS 記錄是 DNS 資源與網域名稱之間的對應。
Cloud SQL 語言連接器會透過各自程式庫中的 PSC
IP 類型,支援 Private Service Connect 連線。
- Cloud SQL Python 連接器 (v1.3.0 以上版本)
- Cloud SQL Go 連接器 (v1.4.0 以上版本)
- Cloud SQL Java Connector (v1.13.0 以上版本)
- Cloud SQL Node.js 連接器 (v0.5.0 以上版本)
從 App Engine Standard、Cloud Run 或 Cloud Run 函式連線
如要連線至已啟用 Private Service Connect 的 Cloud SQL 執行個體,您可以使用 App Engine Standard、Cloud Run 或 Cloud Run 函式。
在這些支援的無伺服器環境中,系統支援 Cloud SQL 語言連接器,以及使用 IP 位址和通訊埠編號建立的直接 TCP 連線。對於直接 TCP 連線,這是您建立 Private Service Connect 端點時保留的 IP 位址。您可以將 IP 位址指定為資料庫主機的位址。
如果您為端點建立 DNS 記錄,就可以為主機指定這個記錄。
透過 BigQuery 連線
如要存取 Cloud SQL 中的資料,並透過內部 IP 連線對這項資料執行查詢,請使用 --enable-google-private-path
參數。只有在下列情況下,此參數才有效:
- 您可以使用
--no-assign-ip
參數。 - 您可以使用
--network
參數指定要用來建立內部連線的虛擬私人雲端網路名稱。
測試連線能力
如要測試啟用 Private Service Connect 後,Cloud SQL 執行個體的傳入連線,請將 Private Service Connect 端點的 IP 位址設為目的地 IP 位址。
gcloud
如要為已啟用 Private Service Connect 的 Cloud SQL 執行個體建立連線測試,請使用 gcloud network-management connectivity-tests create
指令:
gcloud network-management connectivity-tests create CONNECTIVITY_TEST_NAME \ --source-instance=SOURCE_INSTANCE \ --destination-cloud-sql-instance=DESTINATION_CLOUD_SQL_INSTANCE \ --destination-network=DESTINATION_NETWORK \ --destination-port=DESTINATION_PORT \ --protocol=tcp
請將以下項目改為對應的值:
- CONNECTIVITY_TEST_NAME:連線測試的名稱。
- SOURCE_INSTANCE:來源 IP 位址所在的 Compute Engine 執行個體 URI (例如
projects/myproject/zones/myzone/instances/myinstance
)。 - DESTINATION_CLOUD_SQL_INSTANCE:Cloud SQL 執行個體的網址 (例如
projects/myproject/instances/myinstance
)。 - DESTINATION_NETWORK:目的地 IP 位址所在的 VPC 網路 URI (例如
projects/myproject/global/networks/mynetwork
)。 - DESTINATION_PORT:為執行個體保留的通訊埠號碼。對於 SQL Server 適用的 Cloud SQL 執行個體,通訊埠號碼為
1433
。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
- CONNECTIVITY_TEST_NAME:連線測試的名稱。
- SOURCE_IP_ADDRESS:來源 Compute Engine 執行個體的 IP 位址。
- SOURCE_INSTANCE:來源 IP 位址所在的 Compute Engine 執行個體 URI (例如
projects/myproject/zones/myzone/instances/myinstance
)。 - SOURCE_NETWORK:來源 IP 位址所在的 VPC 網路 URI (例如
projects/myproject/global/networks/mynetwork
)。 - DESTINATION_IP_ADDRESS:目的地 Cloud SQL 執行個體的 IP 位址。
- DESTINATION_PORT:為執行個體保留的通訊埠號碼。對於 SQL Server 適用的 Cloud SQL 執行個體,通訊埠號碼為
1433
。 - DESTINATION_NETWORK:目的地 IP 位址所在的 VPC 網路 URI (例如
projects/myproject/global/networks/mynetwork
)。
HTTP 方法和網址:
POST https://networkmanagement.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/connectivityTests?testId=CONNECTIVITY_TEST_NAME
JSON 要求主體:
{ "source": { "ipAddress": "SOURCE_IP_ADDRESS", "instance": "SOURCE_INSTANCE", "network": "SOURCE_NETWORK" }, "destination": { "ipAddress": "DESTINATION_IP_ADDRESS", "port": DESTINATION_PORT, "network": "DESTINATION_NETWORK", "projectId": "PROJECT_ID" }, "protocol": "TCP" }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "name": "projects/PROJECT_ID/locations/global/operations/operation-OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.networkmanagement.v1.OperationMetadata", "createTime": "2024-05-23T16:43:49.313981473Z", "target": "projects/PROJECT_ID/locations/global/connectivityTests/CONNECTIVITY_TEST_NAME", "verb": "create", "cancelRequested": false, "apiVersion": "v1" }, "done": false }
限制
- 您最多可以設定 20 個 Private Service Connect 端點,連線至已啟用 Private Service Connect 的 Cloud SQL 執行個體服務連結。
- 您無法為已啟用 Private Service Connect 的執行個體使用 Private Service Connect 後端。
- 下列旗標無效或受到影響:
- 您無法為已啟用 Private Service Connect 的執行個體建立外部副本。
- 您無法設定已啟用 Private Service Connect 的執行個體,以便使用私人服務存取權或外部 IP 連線。
- 您無法在已啟用 Private Service Connect 的執行個體上啟用外部 IP 連線。
- 您無法啟用私人服務存取權,也無法在執行個體中新增授權網路。
- 您無法變更執行個體的連線類型。
- 您無法使用
gcloud sql connect
指令、Cloud Shell、Cloud Build、資料庫移轉服務或 Datastream 連線至啟用 Private Service Connect 的 Cloud SQL 執行個體。 - 測試連線至已啟用 Private Service Connect 的 Cloud SQL 執行個體時,您無法設定下列項目:
- 直接將執行個體的內部 IP 位址或 DNS 名稱設為目的地
- 做為來源的例項
- Private Service Connect 端點的 IP 位址做為來源
- 系統不支援使用已授權網路的 IP 白名單功能。
- 對於啟用私人服務連線的 Cloud SQL 執行個體,我們不支援 Managed Service for Microsoft Active Directory (也稱為 Managed Microsoft AD) 和已連結的伺服器。
疑難排解
本節提供有關啟用 Private Service Connect 的 Cloud SQL 執行個體相關問題的資訊,以及疑難排解步驟。
問題 疑難排解 執行個體的服務附件不接受 Private Service Connect 端點。 - 查看端點的狀態。
gcloud
如要查看狀態,請使用
gcloud compute forwarding-rules describe
指令。gcloud compute forwarding-rules describe ENDPOINT_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ | grep pscConnectionStatus
請將以下項目改為對應的值:
- ENDPOINT_NAME:端點名稱
- PROJECT_ID:包含端點的 Google Cloud 專案 ID 或專案編號
- REGION_NAME:端點的區域名稱
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含 Private Service Connect 端點的 Google Cloud 專案 ID 或專案編號
- REGION_NAME:區域名稱
- ENDPOINT_NAME:端點名稱
HTTP 方法和網址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
{ "kind": "compute#forwardingRule", "id": "ENDPOINT_ID", "creationTimestamp": "2024-05-09T12:03:21.383-07:00", "name": "ENDPOINT_NAME", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "IPAddress": "IP_ADDRESS", "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default", "serviceDirectoryRegistrations": [ { "namespace": "goog-psc-default" } ], "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "fingerprint": "FINGERPRINT_ID", "pscConnectionId": "CONNECTION_ID", "pscConnectionStatus": "ACCEPTED", "allowPscGlobalAccess": true }
- 確認端點的狀態為
ACCEPTED
。如果狀態為PENDING
,則表示執行個體不允許包含端點的 Google Cloud 專案。請確認建立端點的網路專案是否允許端點。詳情請參閱「編輯已啟用 Private Service Connect 的執行個體」。
後續步驟
- 進一步瞭解私人 IP。
- 進一步瞭解 Private Service Connect。
- 進一步瞭解如何為已啟用 Private Service Connect 的執行個體建立讀取副本。
- 進一步瞭解如何複製已啟用 Private Service Connect 的執行個體。
- 進一步瞭解如何查看已啟用 Private Service Connect 的執行個體摘要資訊。
- 進一步瞭解如何設定及移除已啟用 Private Service Connect 的執行個體的高可用性。
- 進一步瞭解如何編輯及刪除已啟用 Private Service Connect 的執行個體。