【问题标题】:Running Azure SDK for Go return an error: MSI not available运行 Azure SDK for Go 返回错误:MSI 不可用
【发布时间】:2022-01-22 19:35:26
【问题描述】:

我正在尝试运行 Golang Azure SDK 代码以获取订阅中的 RG 列表,但出现以下错误:

2022/01/22 20:25:58 MSI 不可用 退出状态 1


import (
    "context"
    "fmt"
    "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2020-10-01/resources"
    "github.com/Azure/go-autorest/autorest/azure/auth"
    "github.com/Azure/go-autorest/autorest/to"
    "log"
    "os"
)

func main() {
    authorize, err := auth.NewAuthorizerFromEnvironment()

    if err != nil {
        log.Fatal(err)
    }

    subscriptionID := os.Getenv("AZURE_SUB_ID")

    //Read resource groups
    resGrpClient := resources.NewGroupsClient(subscriptionID)
    resGrpClient.Authorizer = authorize

    //Read resources within the resource group
    resClient := resources.NewClient(subscriptionID)
    resClient.Authorizer = authorize

    for resGrpPage, err := resGrpClient.List(context.Background(), "", nil); resGrpPage.NotDone(); err = resGrpPage.Next() {

        if err != nil {
            log.Fatal(err)
        }

        for _, resGrp := range resGrpPage.Values() {
            fmt.Println("Resource Group Name: ", to.String(resGrp.Name))
            resList, _ := resClient.ListByResourceGroup(context.Background(), to.String(resGrp.Name), "", "", nil)

            for _, res := range resList.Values() {
                fmt.Println("\t- Resource Name: ", to.String(res.Name), " | Resource Type: ", to.String(res.Type))
            }
        }

    }

}

我正在使用 Goland 并尝试在 WSL Ubuntu 中运行应用程序

【问题讨论】:

  • 我修改了导入,因为它们应该是以下内容:“github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2020-10-01/resources” github.com/Azure/go-autorest/autorest/azure/auth" "github.com/Azure/go-autorest/autorest/to"

标签: go goland azure-sdk


【解决方案1】:

解决方案是使用auth.NewAuthorizerFromCLI(),因为auth.NewAuthorizerFromEnvironment 不使用 Cli,而 MSI 代表托管系统身份。

【讨论】:

  • 这可能不适用于其他一些人,他们的代码在没有可用 Azure CLI 的环境中运行。
【解决方案2】:

请阅读此文档Use environment-based authentication

你有几个选择 他们需要存在特定的环境变量。 就我而言,我使用客户端凭据,因此在运行代码时需要存在这 3 个环境。

  1. AZURE_CLIENT_ID
  2. AZURE_CLIENT_SECRET
  3. AZURE_TENANT_ID

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多