如何使用 Terraform 在 Azure Flexible Server 啟用 PostgreSQL 擴充功能
簡介
Azure Database for PostgreSQL Flexible Server 提供了一個靈活的託管資料庫解決方案,可以根據需求調整效能和規模。然而,某些擴充功能(例如 pg_stat_statements
、pgcrypto
和 pgstattuple
)預設未啟用。如果你直接嘗試使用 Terraform 創建這些擴充功能,可能會遇到權限錯誤,顯示 azure_pg_admin
用戶無法啟用這些功能。
好消息是,Microsoft 目前提供了一個 允許清單機制,可以手動啟用特定的擴充功能,這讓我們能夠透過 Terraform 或 CLI 來啟用這些功能,避免權限問題。
Azure 的限制與解決方案
在 Azure Database for PostgreSQL Flexible Server 中,azure_pg_admin
角色 不具備完整的 superuser 權限,因此某些擴充功能預設為不可用,這導致在 Terraform 配置時可能會出現權限錯誤。
目前,Azure 允許透過 azure.extensions
參數來啟用特定的擴充功能,這解決了開發人員無法自行安裝常見擴充功能的問題。我們可以使用 Terraform 或 Azure CLI 來修改這個設定。
透過 Terraform 啟用 PostgreSQL 擴充功能
要允許這些擴充功能,我們需要在 Terraform 配置 azure.extensions
,以下是具體步驟:
步驟 1:更新 Terraform 配置
在 Terraform 腳本中加入以下設定,允許指定的 PostgreSQL 擴充功能:
resource "azurerm_postgresql_flexible_server_configuration" "extensions" {
name = "azure.extensions"
server_id = azurerm_postgresql_flexible_server.demo.id
value = "pgcrypto,pg_stat_statements,pgstattuple"
}
這將通知 Azure 允許 這些擴充功能。
步驟 2:套用 Terraform 配置
執行以下命令來初始化與部署 Terraform 配置:
terraform init
terraform apply
疑難排解與建議
如果 Terraform 無法成功套用,請參考以下方法來診斷與解決問題。
1. 確保 PostgreSQL 版本支援這些擴充功能
不同的 Azure PostgreSQL 版本與服務等級可能有不同的限制。在啟用擴充功能之前,請先檢查你的 Azure PostgreSQL 版本是否支援這些擴充功能:
SHOW azure.extensions;
如果這個查詢沒有顯示你需要的擴充功能,可能需要聯繫 Azure 技術支援,或考慮升級你的 PostgreSQL 服務等級。
2. 使用 Azure CLI 手動啟用擴充功能
如果 Terraform 遇到權限錯誤,你可以使用 Azure CLI 來手動啟用擴充功能:
az postgres flexible-server parameter set \
--resource-group <your-resource-group> \
--server-name <your-server-name> \
--name azure.extensions \
--value "pgcrypto,pg_stat_statements,pgstattuple"
執行後,請重新啟動伺服器並再次驗證擴充功能是否已成功啟用。
3. 了解 Allow-List 擴充功能的限制
雖然 Azure 提供了允許清單機制,但部分擴充功能仍可能受到限制,或者僅適用於特定的 Azure Database for PostgreSQL 版本。在計畫使用特定擴充功能前,請查閱官方文件,確保這些功能適用於你的環境。
結論
過去,在 Azure PostgreSQL Flexible Server 中啟用某些擴充功能是一個令人頭痛的問題,因為 azure_pg_admin
角色的權限受限。然而,透過 azure.extensions
參數,我們現在可以透過 Terraform 或 CLI 來啟用這些功能,解決權限問題並提升資料庫的功能性。
留言
張貼留言