为什么Azure Cloud Shell在默认订阅中创建资源组?

问题描述

我使用Set-AzContextAzure Cloud Shell中当前会话的订阅更改为其他订阅,如下所示。但是,当我在Azure Cloud Shell的同一会话中使用Ansible playbook创建Resource Group时,为什么仍在订阅中创建资源组,为什么?

Set-AzContext -SubscriptionId "myOtherSubscription"

以上命令成功将预订从认更改为myOtherSubscription,并显示了如下结果:

Name                                     Account                         SubscriptionName                Environment                     TenantId
----                                     -------                         ----------------                -----------                     --------
Visual Studio Enterprise – MPN (a86c7y8… MSI@51342                       Visual Studio Enterprise – MPN  AzureCloud                      86eafd5a-8ce3-4d0c-981c-8dac1…

然后,我运行ansible命令ansible-playbook myplaybook_to_create_rg.yml,该命令成功创建了资源组,但仍位于订阅中,而不是位于myOtherSubscription内部。如Microsoft团队的this示例所示,ansible代码中没有提及用于创建资源组的订阅。这意味着它应该在运行Azure Cloud Shell的订阅中创建资源组。

解决方法

您在此处的误解根源是Ansible 不知道您正在使用的AzContext中选择的订阅。您链接的文档证实了这一点:

使用多个订阅时,请通过导出AZURE_SUBSCRIPTION_ID环境变量来指定订阅Ansible用途。

对于Cloud Shell,有两种方法可根据您的Shell类型来设置Ansible使用哪种订阅:

  • 对于基于 PowerShell 的Cloud Shell实例,通过运行以下命令在本地范围内设置AZURE_SUBSCRIPTION_ID环境变量:

    $env:AZURE_SUBSCRIPTION_ID="<your-subscription-id>"
    

    ...将<your-subscription-id>占位符替换为目标Azure订阅ID。

  • 对于基于 bash 的Cloud Shell,您可以使用export关键字来实现同一目的:

    export AZURE_SUBSCRIPTION_ID="<your-subscription-id>"`
    

    ...将<your-subscription-id>占位符替换为目标Azure订阅ID。