應用程式移轉

已完成

將資料庫從內部部署環境移轉到 Azure 之後,您必須更新現有的應用程式,以便其在新的位置上存取 PostgreSQL。

原始內部部署伺服器和資料庫將包含定義與使用者相關聯權限的角色,以及其可執行的作業和執行作業的物件。 適用於 PostgreSQL 的 Azure 資料庫使用與內部部署所執行 PostgreSQL 相同的驗證與授權機制。

在此單元中,您將探索需要對應用程式進行的更新,以連線到新移轉適用於 PostgreSQL 的 Azure 資料庫。

手動建立使用者角色

當使用 Azure 資料庫移轉服務將 PostgreSQL 資料庫移轉到適用於 PostgreSQL 的 Azure 資料庫時,不會複製角色和角色指派。 您必須為目標資料庫中的資料表系統管理員和使用者,手動重新建立必要角色和使用者帳戶。 您可以使用 psql 或 pgAdmin 公用程式執行這些工作。 執行 CREATE ROLE 命令。 您可以使用 GRANT 命令將必要權限指派給角色。 例如:

CREATE ROLE myuseraccount WITH LOGIN NOSUPERUSER CREATEDB PASSWORD 'mY!P@ss0rd';
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuseraccount;

注意

您也可以從 Bash 提示字元,使用 createuser 命令建立 PostgreSQL 角色。

若要檢視內部部署資料庫中的現有角色,請執行下列 SQL 陳述式:

SELECT rolname
FROM pg_roles;

您可以在 psql 公用程式中,使用 \du 命令顯示指派給角色的權限。

                              List of roles
   Role name   |               Attributes                                   | Member of
---------------+------------------------------------------------------------+-----------
 azureuser     | Superuser, Create DB                                       | {}
 myuseraccount | Create DB                                                  | {}
 postgres      | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

注意

請注意,適用於 PostgreSQL 的 Azure 資料庫會新增自己的一些角色。 這些角色包括 azure_pg_adminazure_superuser,以及您在建立服務時指定的系統管理員使用者。 您會使用系統管理帳戶登入,但其他兩個角色則保留供 Azure 使用,您不應該嘗試使用這些角色。

重新設定應用程式

重新設定應用程式以連線到適用於 PostgreSQL 的 Azure 資料庫是很簡單的程序。 不過,更重要的是決定用於移轉應用程式的策略。

重新設定 PostgreSQL 應用程式時需考慮的事項

在公司環境中,您可能擁有許多針對相同 PostgreSQL 資料庫執行的應用程式。 可能有大量的使用者執行這些應用程式。 您想要確認從現有系統切換至適用於 PostgreSQL 的 Azure 資料庫時,系統仍可運作、使用者可以持續執行工作,而且您的業務關鍵作業仍維持運作。 第 1 課程模組、第 2 單元:移轉考慮事項討論了許多一般層面的問題。 當將 PostgreSQL 資料庫移轉到 Azure 時,有一些需要注意的細節:

  • 如果您執行的是離線移轉,而且舊資料庫仍在使用中,則原始 PostgreSQL 資料庫中的資料與 Azure 上所執行新資料庫中的資料之間,可能很快就會發生分歧。 如果您會暫時全面停止系統運作,然後將所有應用程式切換至新的系統,再重新啟動系統,則適合使用離線移轉。 業務關鍵系統可能無法使用這種方法。 如果您要移轉到在 Azure 虛擬機器上執行的 PostgreSQL,請設定在內部部署系統與 Azure 中所執行系統之間進行 PostgreSQL 複寫。 原生 PostgreSQL 複寫只會單向運作,但可以使用支援在 PostgreSQL 伺服器之間進行雙向複寫的協力廠商解決方案 (這些解決方案無法搭配適用於 PostgreSQL 的 Azure 資料庫運作)。
  • 如果您正在執行線上移轉,則適用於 PostgreSQL 的 Azure 資料庫服務會設定從內部部署資料庫複寫至在 Azure 中執行的資料庫。 初始資料傳輸後,複寫能確保在內部部署資料庫中所做的變更,會複製到 Azure 中的資料庫,但無法反向複寫。

在這兩種情況下,您應確保沒有在意外覆寫過程中遺失即時資料。 例如,在線上案例中,若有一個應用程式連線到在適用於 PostgreSQL 之 Azure 資料庫中執行的資料庫,其變更可能會遭到仍在使用內部部署資料庫的應用程式盲目覆寫。 因此,您應考慮採取下列方法:

  • 根據應用程式的工作負載類型來移轉應用程式。 存取資料進行唯讀的應用程式可安全移至在適用於 PostgreSQL 之 Azure 資料庫中執行的資料庫,並將看到仍在使用內部部署資料庫之應用程式所做的所有變更。 如果唯讀應用程式不需要完整的最新資料,您可以採用反向策略。
  • 根據使用者的工作負載類型來移轉使用者。 此策略類似於上述策略,但您可以讓使用者只在其他人修改資料時才產生報告。 您可以根據使用者的需求,設定該應用程式連線至適當的資料庫。
  • 根據所使用的資料集來移轉應用程式。 如果不同的應用程式利用不同資料子集,您可以獨立移轉這些應用程式。

重新設定應用程式

若要重新設定應用程式,您需要在資料庫中為其指向。 大部分妥善撰寫的應用程式會將連線邏輯隔離出來,而且應該只需要變更這部分的程式碼。 在許多情況下,連線資訊可能儲存為設定資訊,您僅需更新該資訊。

您將在 Azure 入口網站中適用於 PostgreSQL 之 Azure 資料庫服務的 [連接字串] 頁面上,找到該服務的連線資訊。 Azure 提供許多常見程式設計語言和架構的資訊。

Image showing the Connection strings page for Azure Database for PostgreSQL item in the Azure portal

開啟網路連接埠

如本課程模組的第 1 單元所述,適用於 PostgreSQL 的 Azure 資料庫是在防火牆後方執行的受保護服務。 除非服務可辨識其 IP 位址,否則用戶端無法連線。 若用戶端執行的應用程式需要連線至您的資料庫,您必須為其新增 IP 位址或位址區塊範圍。

測試和驗證應用程式

在將應用程式和使用者切換至新的資料庫之前,請務必確認您已正確設定所有項目。

從「測試版」應用程式開始,使用每個角色進行連線,以確保正確功能可供使用。

接下來,執行「浸泡試驗」以模擬一段時間內同時執行代表性工作負載的一般使用者數目。 監視系統,並確認您已為適用於 PostgreSQL 的 Azure 資料庫服務配置足夠資源。

此時,您可以開始將系統推出給使用者。 實作某種形式的「Canary 測試」可能會有所助益,其中一小部分的使用者會在不知情的情況下移轉到該系統。 這將提供您無偏差的意見,讓您更了解使用者是否在新的資料庫中有相同、更好或更糟的體驗。