使用 CLI 建立和管理 適用於 PostgreSQL 的 Azure 資料庫 的私人連結 - 單一伺服器

適用於:適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器

重要

適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器位於淘汰路徑上。 強烈建議您升級至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器。 如需移轉至 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器的詳細資訊,請參閱單一伺服器 適用於 PostgreSQL 的 Azure 資料庫 發生什麼事?

私人端點是 Azure 中私人連結的基本建置組塊。 它可讓 Azure 資源,例如 虛擬機器(VM),私下與私人鏈接資源通訊。 在本文中,您將瞭解如何使用 Azure CLI 在 Azure 虛擬網絡 和具有 Azure 私人端點的 適用於 PostgreSQL 的 Azure 資料庫 單一伺服器中建立 VM。

注意

私人連結功能僅適用於一般用途或記憶體優化定價層中的 適用於 PostgreSQL 的 Azure 資料庫 伺服器。 請確定資料庫伺服器位於下列其中一個定價層中。

必要條件

若要逐步執行本作法指南,您需要︰

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Azure Cloud Shell 的「試試看」範例螢幕擷取畫面。
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 啟動 Azure Cloud Shell 的按鈕。
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 顯示 Azure 入口網站中 Cloud Shell 按鈕的螢幕擷取畫面

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

如果您決定改為在本機安裝和使用 Azure CLI,本快速入門會要求您使用 Azure CLI 2.0.28 版或更新版本。 若要尋找已安裝的版本,請執行 az --version。 如需安裝或升級資訊,請參閱 安裝 Azure CLI

建立資源群組

您必須先建立資源群組來裝載 虛擬網絡,才能建立任何資源。 使用 az group create 來建立資源群組。 下列範例會在 westeurope 位置建立名為 myResourceGroup 的資源群組:

az group create --name myResourceGroup --location westeurope

建立虛擬網路

使用 az network vnet create 建立虛擬網路。 此範例會建立一個名為 myVirtualNetwork 的預設虛擬網路,其中含有一個名為 mySubnet 的子網路:

az network vnet create \
--name myVirtualNetwork \
--resource-group myResourceGroup \
--subnet-name mySubnet

停用子網路的私人端點原則

Azure 會將資源部署到虛擬網路內的子網路,因此您必須建立或更新子網路,以停用私人端點網路原則。 使用 az network vnet subnet update 來更新名為 mySubnet 的子網路設定:

az network vnet subnet update \
--name mySubnet \
--resource-group myResourceGroup \
--vnet-name myVirtualNetwork \
--disable-private-endpoint-network-policies true

建立 VM

使用 az vm create 建立 VM。 出現提示時,請提供密碼以作為 VM 的登入認證。 此範例會建立名為 myVm 的 VM:

az vm create \
  --resource-group myResourceGroup \
  --name myVm \
  --image Win2019Datacenter

記下 VM 的公用 IP 位址。 在下一個步驟中,您將使用此位址從因特網連線到 VM。

建立 適用於 PostgreSQL 的 Azure 資料庫 - 單一伺服器

使用 az postgres server create 命令建立 適用於 PostgreSQL 的 Azure 資料庫。 請記住,您的 PostgreSQL 伺服器名稱在整個 Azure 中必須是唯一的,因此請將佔位元值取代為您上述使用的唯一值:

# Create a server in the resource group

[!INCLUDE [applies-to-postgresql-single-server](../includes/applies-to-postgresql-single-server.md)]

[!INCLUDE [azure-database-for-postgresql-single-server-deprecation](../includes/azure-database-for-postgresql-single-server-deprecation.md)]


az postgres server create \
--name mydemoserver \
--resource-group myresourcegroup \
--location westeurope \
--admin-user mylogin \
--admin-password <server_admin_password> \
--sku-name GP_Gen5_2

建立私人端點

在 虛擬網絡 中建立 PostgreSQL 伺服器的私人端點:

az network private-endpoint create \  
    --name myPrivateEndpoint \  
    --resource-group myResourceGroup \  
    --vnet-name myVirtualNetwork  \  
    --subnet mySubnet \  
    --private-connection-resource-id $(az resource show -g myResourcegroup -n mydemoserver --resource-type "Microsoft.DBforPostgreSQL/servers" --query "id" -o tsv) \    
    --group-id postgresqlServer \  
    --connection-name myConnection  

設定私人 DNS 區域

建立適用於 PostgreSQL 伺服器網域的 私用 DNS 區域,並與 虛擬網絡 建立關聯連結。

az network private-dns zone create --resource-group myResourceGroup \ 
   --name  "privatelink.postgres.database.azure.com" 
az network private-dns link vnet create --resource-group myResourceGroup \ 
   --zone-name  "privatelink.postgres.database.azure.com"\ 
   --name MyDNSLink \ 
   --virtual-network myVirtualNetwork \ 
   --registration-enabled false

#Query for the network interface ID  

networkInterfaceId=$(az network private-endpoint show --name myPrivateEndpoint --resource-group myResourceGroup --query 'networkInterfaces[0].id' -o tsv)


az resource show --ids $networkInterfaceId --api-version 2019-04-01 -o json
# Copy the content for privateIPAddress and FQDN matching the Azure database for PostgreSQL name

[!INCLUDE [applies-to-postgresql-single-server](../includes/applies-to-postgresql-single-server.md)]

[!INCLUDE [azure-database-for-postgresql-single-server-deprecation](../includes/azure-database-for-postgresql-single-server-deprecation.md)]


#Create DNS records 

az network private-dns record-set a create --name myserver --zone-name privatelink.postgres.database.azure.com --resource-group myResourceGroup  
az network private-dns record-set a add-record --record-set-name myserver --zone-name privatelink.postgres.database.azure.com --resource-group myResourceGroup -a <Private IP Address>

注意

客戶 DNS 設定中的 FQDN 不會解析為已設定的私人 IP。 您必須為設定的 FQDN 設定 DNS 區域,如下所示

注意

在某些情況下,適用於 PostgreSQL 的 Azure 資料庫 和 VNet 子網位於不同的訂用帳戶中。 在這些情況下,您必須確定下列設定:

  • 請確定這兩個訂用帳戶都 已註冊 Microsoft.DBforPostgreSQL 資源提供者。 如需詳細資訊,請參閱 資源提供者

從網際網路連線至 VM

從網際網路連線至 VM:myVm,如下所示:

  1. 在入口網站的搜尋列中,輸入 myVm

  2. 選取 [連線] 按鈕。 選取 [連線] 按鈕之後,隨即會開啟 [連線至虛擬機器]

  3. 選取 [下載 RDP 檔案]。 Azure 會建立一個「遠端桌面通訊協定」(.rdp) 檔案,並下載至您的電腦。

  4. 開啟 downloaded.rdp 檔案。

    1. 如果出現提示,請選取 [連接]

    2. 輸入在建立 VM 時所指定的使用者名稱與密碼。

      注意

      您可能需要選取 [更多選擇>使用其他帳戶],以指定您在建立 VM 時輸入的認證。

  5. 選取 [確定]。

  6. 您可能會在登入程序期間收到憑證警告。 如果您收到憑證警告,請選取 [是] 或 [繼續]

  7. 當 VM 桌面出現之後,將它最小化以回到您的本機桌面。

從 VM 私下存取 PostgreSQL 伺服器

  1. 在 myVm 的遠端桌面中,開啟 PowerShell。

  2. 輸入 nslookup mydemopostgresserver.privatelink.postgres.database.azure.com

    您將收到如下訊息:

    Server:  UnKnown
    Address:  168.63.129.16
    Non-authoritative answer:
    Name:    mydemopostgresserver.privatelink.postgres.database.azure.com
    Address:  10.1.3.4
    
  3. 使用任何可用的客戶端測試 PostgreSQL 伺服器的私人連結連線。 下列範例會使用 Azure Data Studio 來執行作業。

  4. 在 [新增連線] 中,輸入或選取這項資訊:

    設定
    伺服器類型 選取 [PostgreSQL]。
    伺服器名稱 選取 mydemopostgresserver.privatelink.postgres.database.azure.com
    使用者名稱 輸入使用者名稱作為 postgreSQL 伺服器建立期間所提供的username@servername。
    密碼 輸入 PostgreSQL 伺服器建立期間提供的密碼。
    SSL 選取必要
  5. 選取 Connect。

  6. 瀏覽左側功能表中的資料庫。

  7. (選擇性)從 postgreSQL 伺服器建立或查詢資訊。

  8. 關閉對 myVm 的遠端桌面連線。

清除資源

不再需要時,您可以使用 az group delete 來移除資源群組及其擁有的所有資源:

az group delete --name myResourceGroup --yes 

下一步