設定 Private Service Connect

本文說明如何設定及設定 Cloud SQL 執行個體私人網路連線的 Private Service Connect。

設定 Private Service Connect 及其端點後,您和應用程式用戶端就能從屬於不同群組、團隊、專案或組織的多個虛擬私有雲 (VPC) 網路,連線至主要 Cloud SQL 執行個體或其任何唯讀副本。您也可以為以 DNS 名稱為基礎的用戶端連線設定執行個體或全域 DNS 名稱,這對於容錯移轉和災難復原用例很有幫助。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自體驗產品的實際應用成效。新客戶還能獲得價值 $300 美元的免費抵免額,能用於執行、測試及部署工作負載。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Service Networking, Network Connectivity, Cloud DNS APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Make sure that you have the following role or roles on the project: Compute Network Admin, Cloud SQL Admin, Cloud DNS Admin, Cloud SQL Instance User

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. Click Grant access.
    4. In the New principals field, enter your user identifier. This is typically the email address for a Google Account.

    5. Click Select a role, then search for the role.
    6. To grant additional roles, click Add another role and add each additional role.
    7. Click Save.
  6. Install the gcloud CLI.

  7. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that billing is enabled for your Google Cloud project.

  11. Enable the Service Networking, Network Connectivity, Cloud DNS APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  12. Make sure that you have the following role or roles on the project: Compute Network Admin, Cloud SQL Admin, Cloud DNS Admin, Cloud SQL Instance User

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. Click Grant access.
    4. In the New principals field, enter your user identifier. This is typically the email address for a Google Account.

    5. Click Select a role, then search for the role.
    6. To grant additional roles, click Add another role and add each additional role.
    7. Click Save.
  13. Install the gcloud CLI.

  14. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  15. To initialize the gcloud CLI, run the following command:

    gcloud init

Private Service Connect 的必要角色

下表列出設定 Private Service Connect 並連線至 Cloud SQL 執行個體所需的角色。

角色 說明
compute.networkAdmin

授予啟動與 Cloud SQL 執行個體連線的虛擬私有雲網路完整控制權。您可以建立及管理 IP 位址、防火牆規則、服務連線政策和 Private Service Connect 端點。

如果您使用 Private Service Connect 從多個虛擬私有雲網路連線至 Cloud SQL 執行個體,則每個網路都有自己的管理員。

dns.admin 可完整控管 Cloud DNS 資源,包括 DNS 區域和記錄。
cloudsql.admin 可完整控管 Cloud SQL 執行個體,並在執行個體的生命週期內控管執行個體。
cloudsql.instanceUser 提供 Cloud SQL 執行個體的存取權。如果您透過 Cloud SQL Auth Proxy 用戶端連線,則必須具備 Cloud SQL 用戶端角色。如果直接連線,則不需要任何 Identity and Access Management (IAM) 角色和權限。

如要在建立 Cloud SQL 執行個體時自動設定服務連線政策,您需要額外角色,並有權將這些角色指派給 Cloud SQL 服務代理。詳情請參閱「建立服務連線政策」。

建立 Private Service Connect 端點

Private Service Connect 端點是用戶虛擬私有雲網路中的內部 IP 位址,該網路中的用戶端可以直接存取。用戶端可以使用這些端點連線至 Cloud SQL 執行個體。

您可以讓 Cloud SQL 在虛擬私有雲中自動建立 Private Service Connect 端點,也可以手動建立端點。

自動建立端點

如要讓 Cloud SQL 自動建立 Private Service Connect 端點,請按照下列步驟操作:

  1. 在虛擬私有雲網路中建立服務連線政策。有了這項政策,您就能自動佈建 Private Service Connect 端點。

  2. 建立 Cloud SQL 執行個體,並為執行個體啟用 Private Service Connect,然後設定執行個體,自動建立 Private Service Connect 端點。

  3. 擷取執行個體的端點。這樣一來,您就能使用端點連線至執行個體。

建立服務連線政策

您可以使用 Google Cloud 控制台、gcloud CLI 或 API 建立服務連線政策。

控制台

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往 Private Service Connect

  2. 按一下「連線政策」分頁標籤。

  3. 按一下「Create connection policy」(建立連線政策)。

  4. 輸入連線政策的名稱。

  5. 請按照下列步驟指定服務類別:

    1. 在「來源服務類別」部分,選取「Google 服務」。
    2. 從「Service class」(服務類別) 選單中選取 google-cloud-sql,因為 Cloud SQL 是連線政策的代管服務。
  6. 在「Target endpoints scope」(目標端點範圍) 部分,選取要套用這項政策的「Network」(網路) 和「Region」(區域)。

  7. 選用:如果服務連線政策和 Cloud SQL 執行個體位於不同的專案、資料夾或組織,請設定「Custom service instance scope」(自訂服務執行個體範圍):

    1. 將「Custom service instance scope」(自訂服務執行個體範圍) 切換鈕撥到「on」(開啟) 位置。
    2. 在「Scopes」(範圍) 欄位中,輸入執行個體所在專案、資料夾或組織的 ID。
  8. 在「政策」部分,從「子網路」選單選取一或多個子網路。子網路會用來為端點分配 IP 位址。

  9. 選用:指定政策的「連線限制」。這項限制決定了可透過這項連線政策建立的端點數量。如未指定連線限制,則沒有限制。

  10. 點選「建立政策」。

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:虛擬私有雲網路專案的專案 ID 或編號。如果是共用虛擬私有雲網路,您必須在主專案中部署服務連線政策,因為服務專案不支援這些政策。
  • REGION:這項政策適用的區域。您必須為要自動建立服務連線的每個區域,設定相同的政策。
  • SERVICE_CLASS:供應商提供的服務類別資源 ID。如果是 Cloud SQL,服務類別為 google-cloud-sql。
  • SUBNETS:一或多個一般用戶子網路,用於為 Private Service Connect 端點分配 IP 位址。這些 IP 位址會自動分配,並在建立及刪除代管服務執行個體時,傳回子網路的集區。子網路必須與服務連線政策位於相同區域。如果多項連線政策共用同一個區域,您可以在這些政策中重複使用同一個子網路。您可以使用以半形逗號分隔的清單,輸入多個子網路。
  • LIMIT:您可使用這項政策建立的端點數量上限。如未指定上限,則沒有上限。
  • DESCRIPTION:服務連線政策的選用說明。
  • PRODUCER_INSTANCE_LOCATION:指定是否要為 Cloud SQL 執行個體授權自訂位置階層。如果執行個體與政策位於不同的專案、資料夾或組織,則必須將這個值設為 custom-resource-hierarchy-levels。

  • 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 執行個體時自動建立服務連線政策,但這個選項需要額外的管理權限。

控制台

如果您使用 Google Cloud 控制台,請建立啟用 Private Service Connect 的 Cloud SQL 執行個體。 Google Cloud 控制台會檢查必要角色,並自動設定。如果專案尚未啟用 Network Connectivity API,您可能需要啟用這項 API。

gcloud 或 REST

如果您使用的是 gcloud CLI 或 Cloud SQL Admin API,則必須先將其他角色授予 Cloud SQL 服務代理,才能建立執行個體。

  1. 如果託管 Cloud SQL 執行個體的專案中,尚未有專案專屬的 Cloud SQL 服務代理,請建立一個。

    如要建立服務代理,請執行下列指令:

    gcloud beta services identity create \
      --service=sqladmin.googleapis.com \
      --project=INSTANCE_PROJECT
    

    更改下列內容:

    • INSTANCE_PROJECT:您打算建立 Cloud SQL 執行個體的專案。

    這個指令會建立服務代理,格式為 service-INSTANCE_PROJECT_NUMBER@gcp-sa-cloudsql.iam.gserviceaccount.com。

  2. 將下列角色授予 Cloud SQL 服務代理,提供必要的 IAM 權限:

    • 服務自動化用戶端網路管理員 (roles/networkconnectivity.consumerNetworkAdmin)
    • Compute 網路檢視者 (roles/compute.networkViewer)

    如要將角色新增至 Cloud SQL 服務代理,請執行下列指令:

    gcloud projects add-iam-policy-binding CONSUMER_PROJECT \
      --member='serviceAccount:CLOUD_SQL_SERVICE_AGENT' \
      --role='roles/networkconnectivity.consumerNetworkAdmin'
    
    gcloud projects add-iam-policy-binding CONSUMER_PROJECT \
      --member='serviceAccount:CLOUD_SQL_SERVICE_AGENT' \
      --role='roles/compute.networkViewer'
    

    更改下列內容:

    • CONSUMER_PROJECT:要建立 Private Service Connect 端點的專案。如果您使用的是 Shared VPC 虛擬私有雲網路,則可以是主專案或服務專案。
    • CLOUD_SQL_SERVICE_AGENT:您建立的 Cloud SQL 服務代理帳戶電子郵件地址。

建立 Cloud SQL 執行個體

您可以建立已啟用 Private Service Connect 的執行個體,並使用 Google Cloud 控制台、gcloud CLI 或 API,將執行個體設定為自動建立端點。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往 Cloud SQL 執行個體

  2. 在「Customize your instance」(自訂執行個體) 部分,展開「Connections」(連線) 部分。
  3. 勾選「Private IP」(私人 IP) 核取方塊。
  4. 在「Choose a private connection method」(選取私人連線方法) 區段中,勾選「Private Service Connect (PSC)」核取方塊。
  5. 在「Endpoint setup」(端點設定) 部分,按一下「Add an Endpoint」(新增端點)。
  6. 在「端點設定」部分,執行下列操作:
    1. 在「New Endpoint」(新增端點) 資訊卡中,從「Project」(專案) 選單選取要設定端點的專案。
    2. 從「Network」(網路) 選單中,選取端點的網路。
    3. 如果尚未啟用 Network Connectivity API,請按一下「Enable」(啟用)。
  7. 按一下「確認網路設定」。如果系統偵測到所選網路的服務連線政策,就會顯示成功訊息。如果未偵測到服務連線政策,但已成功授予權限, Google Cloud 會為您建立服務連線政策。
  8. 選用:完成任何其他執行個體設定選項。
  9. 點選「建立執行個體」。

gcloud

如要建立已啟用 Private Service Connect 的執行個體,請使用 gcloud sql instances create 指令:

gcloud sql instances create INSTANCE_NAME \
  --project=PROJECT_ID \
  --region=REGION_NAME \
  --cpu=NUMBER_OF_vCPUs \
  --memory=MEMORY_SIZE \
  --root-password=ROOT_PASSWORD \
  --availability-type=AVAILABILITY_TYPE \
  --database-version=DATABASE_VERSION \
  --no-assign-ip \
  --enable-private-service-connect \
  --allowed-psc-projects=ALLOWED_PROJECTS \
  --psc-auto-connections=network=CONSUMER_NETWORK,project=CONSUMER_PROJECT \
  --enable-psc-auto-dns \
  --enable-psc-write-endpoint-dns

選用。如要在建立 Cloud SQL 執行個體時自動建立或更新服務連線政策,請在指令中加入 --enable-psc-auto-connection-policy 參數。您必須設定其他權限,才能使用這項參數。詳情請參閱「自動建立服務連線政策」。

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。
  • PROJECT_ID:執行個體所在 Google Cloud 專案的 ID 或專案編號。
  • REGION_NAME:執行個體的區域名稱。
  • NUMBER_OF_vCPUs:執行個體的核心數量。
  • MEMORY_SIZE:執行個體的記憶體容量。
  • ROOT_PASSWORD:Cloud SQL 使用者的密碼。root
  • AVAILABILITY_TYPE:為執行個體啟用高可用性。請為這項參數指定下列其中一個值:

    • REGIONAL:啟用高可用性,建議用於正式環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供容錯移轉功能。這是預設值。

    如要進一步瞭解如何為執行個體設定及移除高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • DATABASE_VERSION:執行個體的資料庫版本 (例如 SQLSERVER_2019_STANDARD)。

  • ALLOWED_PROJECTS:以半形逗號分隔的允許專案 ID 或編號清單,Private Service Connect 端點可從這些專案連線至 Cloud SQL 執行個體。

    如果專案不在這個清單中,您就無法在專案中建立 Private Service Connect 端點,連線至執行個體。

  • CONSUMER_NETWORK:虛擬私有雲網路的路徑,必須從該網路建立 Private Service Connect 端點。例如:projects/my-host-project/global/networks/default。

  • CONSUMER_PROJECT:建立 Private Service Connect 端點的專案。如果您使用 Shared VPC 虛擬私有雲網路,則可以是主專案或服務專案。

    您在自動連線參數中指定的任何專案,都會自動新增至允許的專案。您也可以視需要將要手動建立 Private Service Connect 端點的專案,新增至允許的專案清單。

使用下列參數啟用及設定 Private Service Connect:

  • --enable-private-service-connect:啟用 Private Service Connect。
  • --allowed-psc-projects=ALLOWED_PROJECTS:指定以半形逗號分隔的允許專案 ID 或編號清單。Private Service Connect 端點可從這些專案連至 Cloud SQL 執行個體。
  • --psc-auto-connections=network=CONSUMER_NETWORK,project=CONSUMER_PROJECT:指定虛擬私有雲網路的路徑,以便建立 Private Service Connect 端點。
  • --enable-psc-auto-dns:指出是否應為這個執行個體啟用 Private Service Connect DNS 自動化功能。使用 --enable-private-service-connect 啟用 Private Service Connect 時,新執行個體預設為停用。

    啟用 DNS 自動化功能後,Cloud SQL 會在所有設定 Private Service Connect 自動連線的網路中,為每個執行個體佈建 DNS 記錄。

  • --enable-psc-write-endpoint-dns:指出是否為這個執行個體啟用 Private Service Connect 寫入端點 DNS 自動化功能。這項功能僅適用於也設定了 --enable-psc-auto-dns 的 Enterprise Plus 執行個體,且在建立新執行個體時預設為停用。

    啟用寫入端點 DNS 自動化功能後,Cloud SQL 會佈建全域 DNS 記錄,做為已設定 Private Service Connect 自動連線的所有網路中,複寫叢集的寫入端點。這個全域 DNS 記錄一律指向複寫叢集的目前主要執行個體,因此在副本容錯移轉或切換作業時,應用程式可順暢容錯移轉,且無須更新任何用戶端連線字串。

REST

使用任何要求資料之前,請先修改下列項目的值:

  • INSTANCE_NAME:Cloud SQL 執行個體的名稱。
  • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號。
  • REGION_NAME:執行個體的區域名稱。
  • DATABASE_VERSION:執行個體的資料庫版本 (例如 SQLSERVER_2019_STANDARD)。
  • ROOT_PASSWORD:root Cloud SQL 使用者的密碼。
  • AVAILABILITY_TYPE:執行個體的可用區可用性類型。使用這個參數,指定下列其中一個值,即可啟用或停用執行個體的高可用性:
    • REGIONAL:啟用高可用性,建議用於正式環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供切換功能。這是預設值。

    如要進一步瞭解如何為執行個體設定及移除高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • ALLOWED_PROJECTS:以半形逗號分隔的清單,列出允許的專案 ID 或編號,Private Service Connect 端點可從這些專案連線至 Cloud SQL 執行個體。

    如果專案不在這個清單中,您就無法在專案中建立 Private Service Connect 端點,連線至執行個體。

  • CONSUMER_PROJECT:建立 Private Service Connect 端點的專案。如果您使用 Shared VPC 網路,則可以是主專案或服務專案。

    您在自動連線參數中指定的任何專案,都會自動新增至允許的專案。(選用) 如果您想在任何專案中手動建立 Private Service Connect 端點,可以將這些專案新增至允許的專案清單。

  • PARENT_PROJECT:包含網路 CONSUMER_NETWORK 的專案。如未在 CONSUMER_PROJECT 中指定其他專案,系統會自動在 PARENT_PROJECT 中建立端點
  • CONSUMER_PROJECT:選用。只有在 CONSUMER_NETWORK 是 Shared VPC 虛擬私有雲網路,且您想允許在服務專案中自動建立 Private Service Connect 端點時,才需要指定這個值。

    您在自動連線參數中指定的任何專案,都會自動新增至允許的專案。如要手動建立 Private Service Connect 端點,可以視需要將專案新增至允許的專案清單。

  • CONSUMER_NETWORK:您要允許自動建立 Private Service Connect 端點的虛擬私有雲網路。例如:
    projects/my-host-project/global/networks/default。
  • MACHINE_TYPE:列舉字串值,代表執行個體的機器類型。例如:code>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"
        ],
        "pscAutoConnections": [
          {
            "consumerProject":"CONSUMER_PROJECT",
            "consumerNetwork":"projects/PARENT_PROJECT/global/networks/CONSUMER_NETWORK"
          }
        ],
        "pscEnabled": true,
        "pscAutoConnectionPolicyEnabled": true,
        "pscAutoDnsEnabled": true,
        "pscWriteEndpointDnsEnabled": 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": "user@example.com",
  "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"
}

您可以使用下列欄位啟用 DNS 自動化功能和全域寫入端點 DNS 名稱:

  • psc_auto_dns_enabled:指出這個執行個體是否已啟用 Private Service Connect DNS 自動化功能。使用 --enable-private-service-connect 啟用 Private Service Connect 時,新執行個體預設為停用。

    啟用 DNS 自動化功能後,Cloud SQL 會在所有設定 Private Service Connect 自動連線的網路中,佈建通用 DNS 記錄。

  • psc_write_endpoint_dns_enabled:指出是否為這個執行個體啟用 Private Service Connect 寫入端點 DNS 自動化功能。這項功能僅適用於已設定 --enable-psc-auto-dns 的 Enterprise Plus 執行個體,且建立新執行個體時,這項功能預設為停用。

    啟用寫入端點 DNS 自動化功能後,Cloud SQL 會在所有設定 Private Service Connect 自動連線的網路中,佈建全域 DNS 記錄做為寫入端點。這項全域 DNS 記錄一律指向複製叢集目前的主要執行個體,因此在副本容錯移轉或切換作業中,應用程式可順暢容錯移轉,不需更新任何用戶端連線字串。

如要在建立執行個體時自動建立服務連線政策,請啟用下列欄位:

  • psc_auto_connection_policy_enabled:指出是否要在建立 Cloud SQL 執行個體時,允許Google Cloud 建立或更新服務連線政策。您必須設定額外權限,才能使用這個選項。詳情請參閱「自動建立服務連線政策」。

Terraform

如要建立執行個體,請使用具有 psc_config 欄位的 Terraform 資源:

resource "google_sql_database_instance" "INSTANCE_NAME"
{
  name = "INSTANCE_NAME"
  database_version = "DATABASE_VERSION"
  settings
  {
    tier = "MACHINE_TYPE"
    ip_configuration
    {
      psc_config
      {
        psc_enabled = true
        psc_auto_dns_enabled = true
        psc_write_endpoint_dns_enabled = true
        allowed_consumer_projects = ["ALLOWED_PROJECTS"]
        psc_auto_connections
        {
          consumer_network = "CONSUMER_NETWORK"
          consumer_service_project_id = "CONSUMER_PROJECT"
        }
      }
      ipv4_enabled = false
    }
  }
}

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。
  • DATABASE_VERSION:執行個體的資料庫版本 (例如 SQLSERVER_2019_STANDARD)。
  • MACHINE_TYPE:執行個體的機型。
  • ALLOWED_PROJECTS:以逗號分隔的清單,列出允許的專案 ID 或編號,Private Service Connect 端點可從這些專案連線至 Cloud SQL 執行個體。

    如果專案不在這個清單中,您就無法在專案中建立 Private Service Connect 端點,連線至執行個體。

  • CONSUMER_NETWORK:虛擬私有雲網路的路徑,必須從該網路建立 Private Service Connect 端點。例如:projects/my-host-project/global/networks/default。

  • CONSUMER_PROJECT:建立 Private Service Connect 端點的專案。如果您使用 Shared VPC 虛擬私有雲網路,則可以是主專案或服務專案。

使用這些欄位啟用 DNS 自動化功能和全域寫入端點 DNS 名稱:

  • psc_auto_dns_enabled:指出這個執行個體是否已啟用 Private Service Connect DNS 自動化功能。使用 --enable-private-service-connect 啟用 Private Service Connect 時,新執行個體預設會停用這項功能。

    啟用 DNS 自動化功能後,Cloud SQL 會在所有設定 Private Service Connect 自動連線的網路中,佈建通用 DNS 記錄。

  • psc_write_endpoint_dns_enabled:指出是否為這個執行個體啟用 Private Service Connect 寫入端點 DNS 自動化功能。這項功能僅適用於已設定 --enable-psc-auto-dns 的 Enterprise Plus 執行個體,且建立新執行個體時,這項功能預設為停用。

    啟用寫入端點 DNS 自動化功能後,Cloud SQL 會佈建全域 DNS 記錄,在所有設定 Private Service Connect 自動連線的網路中,做為寫入端點。這項全域 DNS 記錄一律指向複製叢集目前的主要執行個體,因此在副本容錯移轉或切換作業中,應用程式可順暢容錯移轉,不需更新任何用戶端連線字串。

如要啟用 Private Service Connect 並自動建立服務連線政策,請使用下列欄位:

  • psc_auto_connection_policy_enabled:指出是否要在建立 Cloud SQL 執行個體時,讓 Google Cloud 建立或更新服務連結政策。您必須設定額外權限,才能使用這個選項。詳情請參閱「自動建立服務連線政策」。

套用變更

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 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 顯示「Apply complete!」訊息。

  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

擷取端點

擷取執行個體的 Private Service Connect 端點 (即內部 IP 位址) 後,您可以使用這個端點連線至執行個體。

gcloud

如要查看執行個體的相關資訊,包括執行個體的 Private Service Connect 端點 IP 位址,請使用 gcloud sql instances describe 指令:

gcloud sql instances describe INSTANCE_NAME \
--project=PROJECT_ID \
--format='json(settings.ipConfiguration.pscConfig.pscAutoConnections)'

請將下列項目改為對應的值:

在回應中,請注意 pscConfig:pscAutoConnections:ipAddress 欄位旁顯示的值。這個值是內部 IP 位址,也是執行個體的 Private Service Connect 端點。

REST

使用任何要求資料之前,請先修改下列項目的值:

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:允許的虛擬私有雲網路、服務連線政策狀態,以及執行個體端點 IP 位址的狀態。
  • pscEnabled:執行個體是否已啟用 Private Service Connect。

如要瞭解如何建構這項工作的基礎 REST API 要求,請參閱 instances:get 頁面。

手動建立端點

如要手動建立 Private Service Connect 端點,請按照下列步驟操作:

  1. 建立 Cloud SQL 執行個體,並為執行個體啟用 Private Service Connect。

  2. 取得服務連結 URI。您可以使用這個 URI 建立 Private Service Connect 端點。

  3. 為 Private Service Connect 端點預留內部 IP 位址,並使用該位址建立端點。

建立 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 端點可從這些專案連線至 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 資源。

resource "google_sql_database_instance" "default" {
  name             = "sqlserver-instance"
  region           = "us-central1"
  database_version = "SQLSERVER_2019_ENTERPRISE"
  root_password    = "INSERT-PASSWORD-HERE"
  settings {
    tier              = "db-custom-2-7680"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled    = true
      start_time = "20:55"
    }
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [] # Add consumer project IDs here.
      }
      ipv4_enabled = false
    }
  }
}

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 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 顯示「Apply complete!」訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台的使用者介面中,前往資源頁面,確認 Terraform 已建立或更新資源。

REST

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:執行個體所在 Google Cloud 專案的 ID 或專案編號。
  • INSTANCE_NAME:執行個體的名稱。
  • REGION_NAME:執行個體的區域名稱。
  • ROOT_PASSWORD:rootCloud SQL 使用者的密碼。
  • AVAILABILITY_TYPE:為執行個體啟用高可用性。請為這項參數指定下列其中一個值:
    • REGIONAL:啟用高可用性,建議用於正式環境執行個體。執行個體會容錯移轉至所選區域內的其他可用區。
    • ZONAL:不提供容錯移轉功能。這是預設值。

    如要進一步瞭解如何設定及移除執行個體的高可用性,請參閱「為現有執行個體設定高可用性」和「停用執行個體的高可用性」。

  • ALLOWED_PROJECTS:以半形逗號分隔的清單,列出允許的專案 ID 或編號,Private Service Connect 端點可從這些專案連線至 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": "user@example.com",
  "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 的執行個體摘要資訊,例如顯示指向執行個體服務連結 URI 的 pscServiceAttachmentLink 欄位,請使用 gcloud sql instances describe 指令:

gcloud sql instances describe INSTANCE_NAME \
--project=PROJECT_ID

請將下列項目改為對應的值:

  • INSTANCE_NAME:虛擬私有雲網路中的 Private Service Connect 端點可連線的 Cloud SQL 執行個體名稱
  • PROJECT_ID:包含執行個體的 Google Cloud 專案 ID 或專案編號

以下範例顯示這項指令的輸出範例:

gcloud sql instances describe myinstance \
--project=12345

...
pscServiceAttachmentLink: projects/45678/regions/myregion/serviceAttachments/myserviceattachment

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

  1. 如要為 Private Service Connect 端點保留內部 IP 位址,請使用
    gcloud compute addresses create 指令:

    gcloud compute addresses create ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --subnet=SUBNET_URI \
    --addresses=INTERNAL_IP_ADDRESS

    請將下列項目改為對應的值:

    • ADDRESS_NAME:內部 IP 位址的名稱。
    • PROJECT_ID:端點 Google Cloud 專案的 ID 或專案編號。
    • REGION_NAME:端點的區域名稱。
    • SUBNET_URI:IP 位址的子網路名稱。格式為:projects/SUBNET_PROJECT_ID/regions/REGION_NAME/subnetworks/SUBNET_NAME。 如果子網路位於 Shared VPC 網路,建議將 SUBNET_PROJECT_ID 設為主專案。
    • INTERNAL_IP_ADDRESS:要保留的 IP 位址。這個 IP 位址必須位於子網路的主要 IP 範圍內。IP 位址可以是 RFC 1918 位址,也可以是具有非 RFC 範圍的子網路。如要保留子網路中可用的 IP 位址,請省略這個旗標,不要指定 IP 位址。 Google Cloud
  2. 如要確認 IP 位址已預留,請使用 gcloud compute addresses list 指令:

    gcloud compute addresses list ADDRESS_NAME \
    --project=PROJECT_ID

    在回應中,確認 IP 位址顯示 RESERVED 狀態。

  3. 如要建立 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_URI \
    --target-service-attachment=SERVICE_ATTACHMENT_URI \
    --allow-psc-global-access

    請將下列項目改為對應的值:

    • ENDPOINT_NAME:端點名稱
    • NETWORK_URI:端點的虛擬私有雲網路 URI。格式如下: projects/NETWORK_PROJECT_ID/global/networks/NETWORK_NAME。 如要使用 Shared VPC 網路,請將主專案指定為 NETWORK_PROJECT_ID。
    • SERVICE_ATTACHMENT_URI:服務連結的 URI
  4. 如要確認服務連結是否接受端點,請使用
    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_instanceTerraform 資源。

使用下列範例建立 IPv4 Private Service Connect 端點。

resource "google_compute_address" "default" {
  name         = "psc-compute-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"     # Replace value with the name of the subnet here.
  address      = "10.128.0.44" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                    = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                  = "us-central1"
  network                 = "default"
  ip_address              = google_compute_address.default.self_link
  load_balancing_scheme   = ""
  target                  = data.google_sql_database_instance.default.psc_service_attachment_link
  allow_psc_global_access = true
}

使用下列範例建立 IPv6 Private Service Connect 端點。

resource "google_compute_network" "ipv6_default" {
  name                     = "net-ipv6"
  auto_create_subnetworks  = false
  enable_ula_internal_ipv6 = true
}

resource "google_compute_subnetwork" "ipv6_default" {
  name             = "subnet-internal-ipv6"
  ip_cidr_range    = "10.0.0.0/16"
  region           = "us-central1"
  stack_type       = "IPV4_IPV6"
  ipv6_access_type = "INTERNAL"
  network          = google_compute_network.ipv6_default.id
}

resource "google_compute_address" "ipv6_default" {
  name         = "psc-compute-ipv6-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = google_compute_subnetwork.ipv6_default.name
  ip_version   = "IPV6"
}

resource "google_compute_forwarding_rule" "ipv6_ilb_example" {
  name   = "ipv6-psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region = "us-central1"

  load_balancing_scheme   = ""
  target                  = data.google_sql_database_instance.default.psc_service_attachment_link
  network                 = google_compute_network.ipv6_default.name
  subnetwork              = google_compute_subnetwork.ipv6_default.name
  ip_address              = google_compute_address.ipv6_default.id
  allow_psc_global_access = true
}

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 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 顯示「Apply complete!」訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台的使用者介面中,前往資源頁面,確認 Terraform 已建立或更新資源。

REST

  1. 為 Private Service Connect 端點預留內部 IP 位址。

  2. 確認 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 狀態。

  3. 建立 Private Service Connect 端點,並指向 Cloud SQL 服務連結。

  4. 確認服務連結接受端點。

    使用任何要求資料之前,請先修改下列項目的值:

    • 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 記錄連線

如要連線至已啟用 Private Service Connect 的執行個體,建議使用 DNS。DNS 名稱可讓不同網路連線至同一個執行個體,而各網路中的 Private Service Connect 端點可能會有不同的 IP 位址。此外,Cloud SQL Auth Proxy 需要 DNS 名稱,才能連線至這些執行個體。如要瞭解如何設定 DNS,請參閱「設定 Private Service Connect 的 DNS」。

使用 DNS 記錄連線至 Cloud SQL 執行個體前,請先完成下列步驟:

  1. 建立 Private Service Connect 端點。
  2. 確認執行個體的服務連結接受端點。如要確認端點狀態為 ACCEPTED,請查看狀態。
  3. 設定 DNS 代管區域和 DNS 記錄。

符合這些條件後,您就能使用 DNS 記錄,從建立端點的任何虛擬私有雲網路連線至執行個體。

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 執行個體前,請先完成下列事項:

  1. 建立 Private Service Connect 端點。
  2. 確認執行個體的服務連結接受端點。如要確認端點狀態為 ACCEPTED,請查看狀態。

符合這些條件後,您就能使用端點的 IP 位址,從建立端點的任何虛擬私有雲網路存取執行個體。

  1. 使用端點 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 欄位相關聯的值。

  2. 或者,您也可以使用 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 欄位相關聯的值。

  3. 如要連線至 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。

使用執行個體的 Private Service Connect DNS 名稱設定 Cloud SQL Auth Proxy。DNS 名稱會識別 DNS 記錄,將 DNS 資源對應至網域名稱。如要進一步瞭解如何為專案啟用 DNS,請參閱「在 Private Service Connect 中設定 DNS」。如要找出執行個體的現有 DNS 名稱,請參閱「尋找 DNS 名稱」。

您也可以設定 Cloud SQL Auth Proxy,使用進階容錯移轉叢集的 Private Service Connect 寫入端點 DNS 名稱 (如有啟用)。舉例來說,如果叢集的 Private Service Connect DNS 寫入端點名稱為 abcdef123456.987654321fedcb.global.sql-psc.goog,則應按照下列方式啟動驗證 Proxy:

./cloud-sql-proxy abcdef123456.987654321fedcb.global.sql-psc.goog

如要透過 Private Service Connect 連線,必須使用 Cloud SQL Auth Proxy 2.5.0 版以上。

下載並安裝 Cloud SQL Auth Proxy

如要連線至已啟用 Private Service Connect 的執行個體,您必須下載並安裝 Cloud SQL Auth Proxy 的二進位檔。下載的二進位檔取決於作業系統,以及是否使用 32 位元或 64 位元核心。大多數較新的硬體都使用 64 位元核心。

如果不確定電腦執行的是 32 位元還是 64 位元核心,請使用 Linux 或 macOS 的 uname -a 指令。如果是 Windows,請參閱 Windows 說明文件。

啟動 Cloud SQL Auth Proxy

Cloud SQL Auth Proxy 支援連線至已啟用 Private Service Connect 的執行個體。詳情請參閱「啟動 Cloud SQL Auth Proxy」。

  1. 查看 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。

  2. 複製執行個體連線名稱。
  3. 啟動 Cloud SQL Auth Proxy:

      ./cloud-sql-proxy INSTANCE_CONNECTION_NAME --psc

    將 INSTANCE_CONNECTION_NAME 替換成您在上一個步驟中複製的執行個體連線名稱。

使用 Cloud SQL 語言連接器連線

Cloud SQL 語言連接器是程式庫,可讓您安全存取已啟用 Private Service Connect 的 Cloud SQL 執行個體,不需授權網路或設定 SSL。

使用執行個體的 Private Service Connect DNS 名稱,以及進階容錯移轉叢集的 Private Service Connect 寫入端點 DNS 名稱 (如有啟用),設定 Cloud SQL Auth Proxy。DNS 名稱會識別 DNS 記錄,將 DNS 資源對應至網域名稱。如要進一步瞭解如何為專案啟用 DNS,請參閱「在 Private Service Connect 中設定 DNS」。如要找出執行個體的現有 DNS 名稱,請參閱「找出 DNS 名稱」。

Cloud SQL 語言連接器支援透過各自程式庫中的 PSC IP 類型建立 Private Service Connect 連線。如需各連接器的說明文件,請參閱 GitHub 上的進階災難復原 (DR) 公開說明文件:

從 App Engine 標準、Cloud Run 或 Cloud Run functions 連線

如要連線至已啟用 Private Service Connect 的 Cloud SQL 執行個體,可以使用 App Engine 標準或 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 參數指定要用於建立內部連線的虛擬私有雲網路名稱。

設定 Cloud SQL 執行個體的傳出連線

您可以設定啟用 Private Service Connect 的 Cloud SQL 執行個體,透過 Private Service Connect 介面和網路連結,與網路建立傳出連線。如要進一步瞭解 Private Service Connect 傳出連線的運作方式和限制,請參閱「Private Service Connect 傳出連線總覽」。

如要使用 Cloud SQL 執行個體的輸出連線功能,請完成下列步驟:

  1. 建立或更新網路連結。Cloud SQL 執行個體會使用這個網路連結,連線至網路的 Private Service Connect 介面。

    1. 網路連結必須與 Cloud SQL 執行個體位於相同區域,並設定為自動接受連線,使用 Private Service Connect 介面的清單。

    2. 取得 Cloud SQL 租戶專案 ID。使用 gcloud sql instances describe 指令擷取執行個體的詳細資料。您可以在輸出內容中顯示的服務附件網址中找到房客專案 ID:

        ADMIN_PROJECT=PROJECT_ID
        INSTANCE_NAME=INSTANCE_NAME
      
        TENANT_PROJECT_ID=$(gcloud --project=$ADMIN_PROJECT sql instances describe $INSTANCE_NAME | grep pscServiceAttachmentLink | cut -f 2 -d "/")
      

      更改下列內容:

      • PROJECT_ID:您使用的專案 ID。 Google Cloud
      • INSTANCE_NAME:已啟用 Private Service Connect 的 Cloud SQL 執行個體名稱,您要為這個執行個體設定傳出連線。

      儲存租戶專案 ID 的值,以便稍後加入接受的專案 ID 清單。在 Google Cloud 專案中建立或更新網路連結時,必須提供這項資訊。

  2. 找出要接收 Cloud SQL 傳出連線的網路,並確認該網路具備 Private Service Connect 介面。

  3. 使用網路連結啟用 Cloud SQL 執行個體的傳出連線。

如果不再需要連至執行個體的傳出連線,您也可以隨時停用傳出連線。

如要進一步瞭解 Private Service Connect 傳出連線,請參閱「Private Service Connect 傳出連線」。

為 Cloud SQL 執行個體啟用傳出連線

如要為 Cloud SQL 執行個體啟用輸出連線,請先在 Google Cloud 專案中建立或更新網路附件。

gcloud

執行下列指令,啟用傳出連線:

gcloud beta sql instances patch INSTANCE_NAME \
  --psc-network-attachment-uri=NETWORK_ATTACHMENT_URI \
  --project=PROJECT_ID

更改下列內容:

  • INSTANCE_NAME:已啟用 Private Service Connect 的 Cloud SQL 執行個體名稱,您要為這個執行個體設定傳出連線。
  • NETWORK_ATTACHMENT_URI:您要用來連線至網路 Private Service Connect 介面的 Google Cloud 專案中,網路連結的 URI。
  • PROJECT_ID:您使用的 Google Cloud專案 ID。

如要確認 Private Service Connect 傳出連線功能是否已成功啟用,請執行 gcloud sql instances describe。如果輸出內容中顯示 psc-network-attachment-uri,表示已成功啟用 Private Service Connect 傳出連線。

REST v1

如要啟用輸出連線,請執行下列指令:

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案的 ID。
  • NETWORK_ATTACHMENT_URI:專案中網路連結的 URI。
  • INSTANCE_ID:Cloud SQL 執行個體的名稱。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "settings": {
    "ipConfiguration": {
      "pscConfig: {
        "networkAttachmentUri": "NETWORK_ATTACHMENT_URI"
        "kind": "sql#settings"
      }
    },
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": USER,
  "insertTime": "2025-05-13T20:44:23.064Z",
  "operationType": "UPDATE",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID","
}

REST v1beta4

如要啟用輸出連線,請執行下列指令:

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案的 ID。
  • NETWORK_ATTACHMENT_URI:專案中網路連結的 URI。
  • INSTANCE_ID:Cloud SQL 執行個體的名稱。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "settings": {
    "ipConfiguration": {
      "pscConfig: {
        "networkAttachmentUri": "NETWORK_ATTACHMENT_URI"
      }
    },
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": USER,
  "insertTime": "2025-05-13T20:44:23.064Z",
  "operationType": "UPDATE",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID","
}

如要瞭解 Private Service Connect 傳出連線的疑難排解資訊,請參閱「Private Service Connect 疑難排解」。

為 Cloud SQL 執行個體停用輸出連線

gcloud

如要停用輸出連線,請執行下列指令:

gcloud beta sql instances patch INSTANCE_NAME \
  --clear-psc-network-attachment-uri \
  --project=PROJECT_ID

更改下列內容:

  • INSTANCE_NAME:已啟用 Private Service Connect 的 Cloud SQL 執行個體名稱,您要為該執行個體設定傳出連線。
  • PROJECT_ID:您使用的 Google Cloud專案 ID。

REST v1

如要停用傳出連線,請執行下列指令:

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID。
  • NETWORK_ATTACHMENT_URI:專案中網路連結的 URI。如要停用,請設為 null。
  • INSTANCE_ID:Cloud SQL 執行個體的名稱。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "settings": {
    "ipConfiguration": {
      "pscConfig: {
        "networkAttachmentUri": null,
        "kind": "sql#settings"
      }
    },
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": USER,
  "insertTime": "2025-05-13T20:44:23.064Z",
  "operationType": "UPDATE",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID","
}

REST v1beta4

如要停用傳出連線,請執行下列指令:

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID。
  • NETWORK_ATTACHMENT_URI:專案中網路連結的 URI。如要停用,請設為 null。
  • INSTANCE_ID:Cloud SQL 執行個體的名稱。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "settings": {
    "ipConfiguration": {
      "pscConfig: {
        "networkAttachmentUri": null,
        "kind": "sql#settings"
      }
    },
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": USER,
  "insertTime": "2025-05-13T20:44:23.064Z",
  "operationType": "UPDATE",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID","
}

測試連線能力

如要測試啟用 Private Service Connect 的 Cloud SQL 執行個體連入連線,請將 Private Service Connect 端點的 IP 位址設為目的地 IP 位址。

gcloud

如要為已啟用 Private Service Connect 的 Cloud SQL 執行個體建立 Connectivity Tests,請使用 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 \
--round-trip

請將下列項目改為對應的值:

  • 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 位址所在的虛擬私有雲網路 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 位址所在的虛擬私有雲網路 URI (例如 projects/myproject/global/networks/mynetwork)。
  • DESTINATION_IP_ADDRESS:目的地 Cloud SQL 執行個體的 IP 位址。
  • DESTINATION_PORT:為執行個體保留的通訊埠編號。如果是 SQL Server 適用的 Cloud SQL 執行個體,則連接埠號碼為 1433。
  • DESTINATION_NETWORK:目的地 IP 位址所在的虛擬私有雲網路 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 執行個體服務連結。

    如要從更多虛擬私有雲網路連線,請透過 NCC 使用 Private Service Connect 端點傳播。詳情請參閱「Private Service Connect 端點傳播」。

  • 透過 Private Service Connect 連至 Cloud SQL 執行個體時,最多可有 64,512 個並行連線。

  • 下列旗標會失效或受到影響:

    • --no-assign-ip: 使用這個旗標,因為啟用 Private Service Connect 的執行個體不支援使用其他連線類型,例如外部 IP 連線
    • --authorized-networks:,無法使用這個旗標新增授權網路
    • --network:您無法使用這個旗標,因為它與私人服務連線相關聯
    • --allocated-ip-range-name:不支援允許的 IP 範圍名稱,因此無法使用這個旗標
  • 如果執行個體已啟用 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 建立許可清單。

    • 不支援情境感知存取權強制執行的 IP 許可清單。

    • 如果 Cloud SQL 執行個體已啟用 Private Service Connect,則不支援 Managed Service for Microsoft Active Directory (也稱為 Managed Microsoft AD)。

      疑難排解

      本節包含與啟用 Private Service Connect 的 Cloud SQL 執行個體相關的問題資訊,以及問題的疑難排解步驟。

      問題 疑難排解
      執行個體的服務附件不接受 Private Service Connect 端點。
      1. 檢查端點的狀態。

        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
        }
        
      2. 確認端點狀態為 ACCEPTED。如果狀態為 PENDING,表示執行個體不允許包含端點的 Google Cloud 專案。請確認建立端點的網路專案在允許範圍內。詳情請參閱「編輯已啟用 Private Service Connect 的執行個體」。
      ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: The resource 'projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME' was not found 為 Private Service Connect 端點保留靜態內部 IP 位址時,可能會出現這則錯誤訊息。確認指定的子網路存在於 URI 指定的專案中。如要在服務專案中建立端點,但使用 Shared VPC 網路的子網路,則須透過 URI 指定子網路,並在 URI 中使用主專案的專案 ID。詳情請參閱「手動建立端點」。
      ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: - The resource 'projects/PROJECT_ID/global/networks/NETWORK_NAME' was not found 手動建立 Private Service Connect 端點時,可能會出現這則錯誤訊息。請確認指定的網路存在於 URI 指定的專案中。如要在服務專案中建立端點,但使用 Shared VPC 網路,您需要依 URI 指定網路,並在 URI 中使用主專案的專案 ID。 詳情請參閱「手動建立端點」。
      Invalid consumer network status for PSC auto connection。

      消費者網路設定有誤或未設定,因此沒有可連線的端點。如要連線至端點,請先檢查端點狀態並修正錯誤,再嘗試連線。
      如要查看端點狀態,請參閱「擷取端點」。 端點狀態可以是下列其中一種:

      • CONNECTION_POLICY_MISSING:用戶網路沒有相符的服務連線政策。服務連線政策是依網路和區域設定。如要重新設定網路,請參閱「更新服務連線政策」。
      • CONSUMER_INSTANCE_PROJECT_NOT_ALLOWLISTED:有相符的服務連線政策,但政策中的「Service instance scope」(服務執行個體範圍) 欄位未設為允許連線至這個 Cloud SQL 執行個體。更新政策,將「Service instance scope」(服務執行個體範圍) 欄位 (--producer-instance-location) 的值設為 Cloud SQL 執行個體所在的專案、資料夾或組織。如要重新設定服務連線政策,請參閱「更新服務連線政策」。
      • POLICY_LIMIT_REACHED:服務連線政策已達端點數量上限。如要解決這個問題,請更新服務連線政策,提高端點數量上限。
      No permission to create a service connection policy。

      您沒有必要權限,無法建立服務連線政策。如要建立服務連線政策,您必須具備 Compute Network Admin IAM 角色。詳情請參閱「角色和權限」。

      使用 Private Service Connect 傳出連線功能時,網路連結無法接受來自 Private Service Connect 介面的連線。

      如果外部網路無法接受來自 Private Service Connect 介面的連線,表示網路連結的連線政策可能設定有誤。

      網路連結必須設為自動接受所有連線,或手動設定接受的連線清單。 詳情請參閱「連線政策」。

      使用下列指令,驗證網路連結中接受的連線:

          gcloud compute network-attachments describe default
          --region=REGION_ID
          

      如果 Private Service Connect 介面不在接受清單中,請更新網路連結。詳情請參閱「管理網路連結」。

      後續步驟