使用 Terraform 部署 Azure 资源时如何解决插件错误?

Posted

技术标签:

【中文标题】使用 Terraform 部署 Azure 资源时如何解决插件错误?【英文标题】:How to get round Plugin Errors when deploying Azure resources using Terraform? 【发布时间】:2021-10-28 14:23:58 【问题描述】:

我收到以下错误

│ Error: Plugin error
│
│   with provider["registry.terraform.io/hashicorp/azurerm"],
│   on nsg.tf line 13, in provider "azurerm":
│   13: provider "azurerm" 
│
│ The plugin returned an unexpected error from plugin.(*GRPCProvider).ConfigureProvider: rpc error: code = Internal desc = grpc: error while marshaling: string field
│ contains invalid UTF-8

当我尝试对以下代码执行 Terraform 计划时

# Configure the Microsoft Azure Provider
terraform 
  required_providers 
    azurerm = 
      source  = "hashicorp/azurerm"
      version = "=2.74.0"
    
  


# Configure the Microsoft Azure Provider
provider "azurerm" 
  features 

resource "azurerm_network_security_group" "nsg" 
    name                                = "TestNSG"
    location                            = "East US"
    resource_group_name                 = "TFResourcegroup"


resource "azurerm_network_security_rule" "example1" 
    name                                = "Web80"
    priority                            = 1001
    direction                           = "Inbound"
    access                              = "Allow"
    protocol                            = "Tcp"
    source_port_range                   = "*"
    destination_port_range              = "80"
    source_address_prefix               = "*"
    destination_address_prefix          = "*"
    resource_group_name                 = "TFResourcegroup"
    network_security_group_name         = azurerm_network_security_group.nsg.name          


resource "azurerm_network_security_rule" "example2" 
    name                                = "Web8080"
    priority                            = 1000
    direction                           = "Inbound"
    access                              = "Deny"
    protocol                            = "Tcp"
    source_port_range                   = "*"
    destination_port_range              = "8080"
    source_address_prefix               = "*"
    destination_address_prefix          = "*"
    resource_group_name                 = "TFResourcegroup"
    network_security_group_name         = azurerm_network_security_group.nsg.name 


resource "azurerm_network_security_rule" "example3" 
    name                                = "WebOUT"
    priority                            = 1000
    direction                           = "Outbound"
    access                              = "Deny"
    protocol                            = "Tcp"
    source_port_range                   = "*"
    destination_port_range              = "80"
    source_address_prefix               = "*"
    destination_address_prefix          = "*"
    resource_group_name                 = "TFResourcegroup"
    network_security_group_name         = azurerm_network_security_group.nsg.name 

这些是我的 terraform、provider 和 Azure 版本

PS C:\russ\nsg> terraform --version
Terraform v1.0.4
on windows_amd64
+ provider registry.terraform.io/hashicorp/azurerm v2.74.0
PS C:\russ\nsg> az --version
azure-cli                         2.27.2

我试过的.....

在互联网上进行研究,它说这只发生在 Azure 门户的 Azure CLI 中。我已经在我自己的机器上的 Visual Studio Code 和 Powershell 上尝试过它。但我得到了相同的结果。我甚至尝试将https://registry.terraform.io/providers/hashicorp/azurerm/latest 作为来源而不是通常的“hashicorp/azurerm”,但这也引发了错误

我真的被困住了...任何指导都会很感激... ...

【问题讨论】:

嗨,我有点怀疑了这个..我尝试在 Bash 而不是 Powershell 中运行它,它运行良好...有人知道为什么这可能是案例? 您找到其他解决方案了吗?我也有同样的问题。 【参考方案1】:

这可能是由于您的 Az CLI 会话存在问题,您可能需要使用 az login 再次登录。

您可以通过运行需要与资源交互的 Az CLI 命令(不仅仅是az account show)来确认这是否是问题所在。这就是我发现问题的方式:

$ az vm list -g my-resource-group

AADSTS700082:刷新令牌由于不活动而过期。该令牌于 2021-06-27T00:13:23.1948087Z 发行,并在 90.00:00:00 内处于非活动状态。

【讨论】:

以上是关于使用 Terraform 部署 Azure 资源时如何解决插件错误?的主要内容,如果未能解决你的问题,请参考以下文章

Terraform - 部署到多个 Azure 订阅

使用 Terraform 进行分层部署

Terraform - Azure 作为提供者和受限访问帐户

在 terraform 的 azure 数据资源管理器中使用 eventthub 的默认消费者组

使用 Terraform 导入 Azure 上的现有资源

Terraform - 长时间运行 Azure 部署错误