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

Why Azure Cloud Shell is creating resource group in default subscription?

我在 Azure Cloud Shell 中将当前会话的订阅更改为在 Azure Cloud Shell 的同一会话中使用 Set-AzContext as follows. But when I create a Resource Group using Ansible playbook 的不同订阅,资源组仍默认创建订阅,为什么?

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 示例所示,在用于创建资源组的可靠代码中没有提到订阅。这意味着它应该在订阅中创建资源组,Azure Cloud Shell in 运行 on.

您在这里的误解源于这样一个事实,即 Ansible 没有 知道作为您正在使用的 AzContext 的一部分选择的订阅。您链接的文档证实了这一点:

When working with multiple subscriptions, specify the subscription Ansible uses by exporting the AZURE_SUBSCRIPTION_ID environment variable.

对于云 Shell,有两种方法之一可以根据您的 shell 类型设置 Ansible 使用的订阅:

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

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

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

  • 对于基于bash的云Shells,可以使用export关键字实现相同东西:

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

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