應用程式移轉
將資料庫從內部部署移轉至 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_admin
、azure_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 資料庫」中執行的資料庫,並會看到應用程式仍在使用內部部署資料庫所做的所有變更。 如果唯讀應用程式不需要完全 up-to日期數據,您也可以採用相反的策略。
- 根據使用者的工作負載類型移轉使用者。 此策略與上一個策略類似,不同之處在於您可能有用戶只產生報表,而其他人則修改數據。 您可能已設定相同的應用程式,以根據使用者需求連線到適當的資料庫。
- 根據所使用的數據集移轉應用程式。 如果不同的應用程式使用不同的資料子集,您可能能夠獨立移轉這些應用程式。
重新設定應用程式
若要重新設定應用程式,請將它指向新的資料庫。 大部分撰寫良好的應用程式都會隔離連線邏輯,這應該是需要變更之程式代碼的唯一部分。 在許多情況下,連線資訊可能會儲存為組態資訊,您只需要更新該資訊。
您可以在 Azure 入口網站的 [ 連接字串 ] 頁面上,找到 Azure Database for PostgreSQL 服務的連線資訊。 Azure 提供許多常見程式設計語言和架構的資訊。
開啟網路埠
如本課程模組的第 1 課所述,「適用於 PostgreSQL 的 Azure 資料庫」是一種在防火牆後方執行的受保護服務。 除非服務可辨識其IP位址,否則客戶端無法連線。 您必須針對執行需要連線到資料庫之應用程式的用戶端,新增IP位址或位址區塊範圍。
測試及驗證應用程式
將應用程式和使用者切換至新的資料庫之前,請務必確定您已正確設定所有專案。
從「執行中」應用程式開始,並連接每個角色,以確保有正確的功能可供使用。
接下來,執行「浸泡測試」,以模擬一段時間內同時執行代表性工作負載的一般用戶數目。 監視系統,並確認您已將足夠的資源配置給適用於 PostgreSQL 的 Azure 資料庫服務。
此時,您可以開始向使用者推出系統。 實作某種形式的「Canary 測試」可能很有説明,其中一小部分使用者不會察覺到系統。 這可讓您對使用者是否擁有相同、更好或更糟的新資料庫體驗持不偏不倚的觀點。