快速入门:使用适用于 Python 的 Azure 库 (SDK) 创建 Azure Database for PostgreSQL 灵活服务器实例

本快速入门介绍如何使用适用于 Python 的 Azure 库 (SDK) 创建 Azure Database for PostgreSQL 灵活服务器实例。

Azure Database for PostgreSQL 灵活服务器是一项托管服务,用于在云中运行、管理和缩放高度可用的 PostgreSQL 数据库。 可以使用 Python SDK 在服务器上预配 Azure Database for PostgreSQL 灵活服务器实例、多个服务器或多个数据库。

可以使用此库执行以下操作:

  1. 创建 PostgreSQL 灵活服务器
  2. 管理数据库
  3. 配置防火墙规则
  4. 缩放操作
  5. 备份和还原

先决条件

具有活动订阅的 Azure 帐户。 创建一个试用帐户

创建服务器

首先,安装所需的包。

pip install azure-mgmt-resource
pip install azure-identity
pip install azure-mgmt-postgresqlflexibleservers

创建文件 create_postgres_flexible_server.py 并包含以下代码。

from azure.identity import DefaultAzureCredential

from azure.mgmt.postgresqlflexibleservers import PostgreSQLManagementClient

def main():
    client = PostgreSQLManagementClient(
        credential=DefaultAzureCredential(),
        subscription_id="ffffffff-ffff-ffff-ffff-ffffffffffff",
        base_url="https://management.chinacloudapi.cn/",
    )

    response = client.servers.begin_create(
        resource_group_name="testrg",
        server_name="pgtestsvc4",
        parameters={
            "location": "chinanorth3",
            "properties": {
                "administratorLogin": "cloudsa",
                "administratorLoginPassword": "<password>",
                "availabilityZone": "1",
                "backup": {"backupRetentionDays": 7, "geoRedundantBackup": "Disabled"},
                "createMode": "Create",
                "highAvailability": {"mode": "ZoneRedundant"},
                "network": {
                    "delegatedSubnetResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/testrg/providers/Microsoft.Network/virtualNetworks/test-vnet/subnets/test-vnet-subnet",
                    "privateDnsZoneArmResourceId": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourcegroups/testrg/providers/Microsoft.Network/privateDnsZones/test-private-dns-zone.postgres.database.chinacloudapi.cn",
                },
                "storage": {"autoGrow": "Disabled", "storageSizeGB": 512, "tier": "P20"},
                "version": "12",
            },
            "sku": {"name": "Standard_D4s_v3", "tier": "GeneralPurpose"},
            "tags": {"ElasticServer": "1"},
        },
    ).result()
    print(response)

# x-ms-original-file: specification/postgresql/resource-manager/Microsoft.DBforPostgreSQL/preview/2023-12-01-preview/examples/ServerCreate.json
if __name__ == "__main__":
    main()

将以下参数替换为你的数据:

  • subscription_id:自己的订阅 ID
  • resource_group:要使用的资源组的名称。 如果不存在,该脚本将创建新的资源组。
  • server_name:用于标识 Azure Database for PostgreSQL 灵活服务器实例的唯一名称。 域名 postgres.database.chinacloudapi.cn 将追加到所提供的服务器名称后面。 服务器名称必须至少为 3 个字符且最多 63 个字符,并且只能包含小写字母、数字和连字符。
  • 位置:要在其中创建 Azure Database for PostgreSQL 灵活服务器实例的 Azure 区域。 它定义服务器及其数据所在的地理位置。 选择靠近用户的区域,可降低延迟。 位置应指定为 Azure 区域短名称的格式,例如 chinaeast2chinanorth2
  • administrator_login:服务器的主管理员用户名。 可在创建组后添加其他用户。
  • administrator_login_password:服务器主管理员的密码。 该密码必须包含 8 到 128 个字符。 密码必须含以下字符类别中的三类:英文大写字母、英文小写字母、数字(0 到 9)及非字母数字字符(!、$、#、% 等)。

还可以自定义其他参数,例如存储大小、引擎版本等。

注意

DefaultAzureCredential 类将尝试使用各种方法(例如环境变量、托管标识或 Azure CLI)进行身份验证。
确保已设置以下方法之一。 可以在 Azure SDK 文档中查找有关身份验证的详细信息。

查看已部署的资源

可以使用 Python SDK、Azure 门户、Azure CLI、Azure PowerShell 和其他各种工具来验证部署并查看已部署的资源。 下面提供了一些示例。

check_server_created 函数添加到现有脚本,以使用 PostgreSQLManagementClient 实例的服务器属性来检查是否已创建 Azure Database for PostgreSQL 灵活服务器实例:

def check_server_created(subscription_id, resource_group, server_name):
    # Authenticate with your Azure account
    credential = DefaultAzureCredential()

    # Create PostgreSQL management client
    postgres_client = PostgreSQLManagementClient(credential, subscription_id, base_url='https://management.chinacloudapi.cn/')

    try:
        server = postgres_client.servers.get(resource_group, server_name)
        if server:
            print(f"Server '{server_name}' exists in resource group '{resource_group}'.")
            print(f"Server state: {server.state}")
        else:
            print(f"Server '{server_name}' not found in resource group '{resource_group}'.")
    except Exception as e:
        print(f"Error occurred: {e}")
        print(f"Server '{server_name}' not found in resource group '{resource_group}'.")

使用适当的参数调用它。

    check_server_created(subscription_id, resource_group, server_name)

注意

预配服务器后,函数 check_server_created 将立即返回服务器状态。 但服务器可能需要几分钟才能完全可用。 在连接到服务器之前,确保等待服务器处于“就绪”状态。 它将在响应 postgres_client.servers.get 方法时返回 state、ID、name、location 等参数。

使用此示例代码在灵活服务器中创建数据库

from azure.identity import DefaultAzureCredential
from azure.mgmt.postgresqlflexibleservers import PostgreSQLManagementClient

def main():
    client = PostgreSQLManagementClient(
        credential=DefaultAzureCredential(),
        subscription_id="ffffffff-ffff-ffff-ffff-ffffffffffff",
        base_url="https://management.chinacloudapi.cn/",
    )
    #Create database
    response = client.databases.begin_create(
        resource_group_name=<rg-name>,
        server_name=<server-name>,
        database_name=<database-name>,
        parameters={"properties": {"charset": "utf8", "collation": "en_US.utf8"}},
    ).result()
    print(response)

if __name__ == "__main__":
    main()

将以下参数替换为你的数据:

  • subscription_id:自己的订阅 ID
  • resource_group:要使用的资源组的名称。 如果不存在,该脚本将创建新的资源组。
  • sever_name:之前创建的 Azure 数据库灵活服务器实例的名称

还可以删除创建的数据库

from azure.identity import DefaultAzureCredential
from azure.mgmt.postgresqlflexibleservers import PostgreSQLManagementClient

def main():
    client = PostgreSQLManagementClient(
        credential=DefaultAzureCredential(),
        subscription_id="ffffffff-ffff-ffff-ffff-ffffffffffff",
        base_url="https://management.chinacloudapi.cn/",
    )

    client.databases.begin_delete(
        resource_group_name="TestGroup",
        server_name="testserver",
        database_name="db1",
    ).result()

if __name__ == "__main__":
    main()

清理资源

如果不再需要 Azure Database for PostgreSQL 灵活服务器实例,则可以使用以下方法删除它和关联的资源组。

创建“delete_server.py”文件以删除创建的灵活服务器实例。

from azure.identity import DefaultAzureCredential
from azure.mgmt.postgresqlflexibleservers import PostgreSQLManagementClient

def main():
    client = PostgreSQLManagementClient(
        credential=DefaultAzureCredential(),
        subscription_id=<subscription-id>,
        base_url="https://management.chinacloudapi.cn/",
    )

    client.servers.begin_delete(
        resource_group_name=<rg-name>,
        server_name=<server-name>,
    ).result()
if __name__ == "__main__":
    main()