示例:使用 Azure 库列出资源组和资源

此示例演示如何在 Python 脚本中使用 Azure SDK 管理库来执行下面两项任务:

  • 列出 Azure 订阅中的所有资源组。
  • 列出特定资源组中的资源。

除非另行说明,否则本文中的所有资源在 Linux/macOS bash 和 Windows 命令行界面上的工作方式相同。

本文稍后将列出等效的 Azure CLI 命令

1:设置本地开发环境

如果尚未设置,则请设置一个可在其中运行此代码的环境。 提供以下选择:

2:安装 Azure 库包

创建一个具有以下内容的名为 requirements.txt 的文件:

azure-mgmt-resource
azure-identity

在激活了虚拟环境的终端或命令提示符下,安装下列要求:

pip install -r requirements.txt

3:编写代码以使用资源组

3a. 列出订阅中的资源组

创建名为 list_groups.py 的 Python 文件,其中包含以下代码。 注释对详细信息进行了说明:

# Import the needed credential and management objects from the libraries.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
import os

# Acquire a credential object.
credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Obtain the management object for resources.
resource_client = ResourceManagementClient(credential, subscription_id)

# Retrieve the list of resource groups
group_list = resource_client.resource_groups.list()

# Show the groups in formatted output
column_width = 40

print("Resource Group".ljust(column_width) + "Location")
print("-" * (column_width * 2))

for group in list(group_list):
    print(f"{group.name:<{column_width}}{group.location}")

3b. 列出特定资源组中的资源

创建名为 list_resources.py 的 Python 文件,其中包含以下代码。 注释提供了详细信息。

默认情况下,代码会在“myResourceGroup”中列出资源。 若要使用其他资源组,请将 RESOURCE_GROUP_NAME 环境变量设置为所需的组名。

# Import the needed credential and management objects from the libraries.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
import os

# Acquire a credential object.
credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Retrieve the resource group to use, defaulting to "myResourceGroup".
resource_group = os.getenv("RESOURCE_GROUP_NAME", "myResourceGroup")

# Obtain the management object for resources.
resource_client = ResourceManagementClient(credential, subscription_id)

# Retrieve the list of resources in "myResourceGroup" (change to any name desired).
# The expand argument includes additional properties in the output.
resource_list = resource_client.resources.list_by_resource_group(
    resource_group, expand = "createdTime,changedTime")

# Show the groups in formatted output
column_width = 36

print("Resource".ljust(column_width) + "Type".ljust(column_width)
    + "Create date".ljust(column_width) + "Change date".ljust(column_width))
print("-" * (column_width * 4))

for resource in list(resource_list):
    print(f"{resource.name:<{column_width}}{resource.type:<{column_width}}"
       f"{str(resource.created_time):<{column_width}}{str(resource.changed_time):<{column_width}}")

代码中的身份验证

在本文后续阶段,你会使用 Azure CLI 登录到 Azure,以便运行示例代码。 如果帐户有权在 Azure 订阅中创建和列出资源组,此代码则会成功运行。

若要在生产脚本中使用此类代码,则可将环境变量设为使用基于服务主体的方法来进行身份验证。 若要了解详细信息,请参阅如何使用 Azure 服务对 Python 应用进行身份验证。 需确保服务主体有足够权限在订阅中创建和列出资源组,具体方法则是在 Azure 中为其分配适当的角色;例如,订阅的参与者角色。

4:运行脚本

  1. 如果尚未登录,则请使用 Azure CLI 登录到 Azure:

    az login
    
  2. AZURE_SUBSCRIPTION_ID 环境变量设为订阅 ID。 (可运行 az account show 命令,然后从输出中的 id 属性获取订阅 ID):

    set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
    
  3. 列出订阅中的所有资源组:

    python list_groups.py
    
  4. 列出资源组中的所有资源:

    python list_resources.py
    

    默认情况下,代码会在“myResourceGroup”中列出资源。 若要使用其他资源组,请将 RESOURCE_GROUP_NAME 环境变量设置为所需的组名。

有关参考:等效 Azure CLI 命令

以下 Azure CLI 命令将列出订阅中的资源组:

az group list

以下命令将列出 centralus 区域中“myResourceGroup”内的资源(必须使用 location 参数方可标识特定数据中心):

az resource list --resource-group myResourceGroup --location centralus

另请参阅