Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >运行terraform init、terraform计划或应用时出现的无效字符错误

运行terraform init、terraform计划或应用时出现的无效字符错误
EN

Stack Overflow用户
提问于 2020-04-25 03:49:00
回答 5查看 9.3K关注 0票数 1

我使用VScode编辑器运行Terraform,该编辑器使用PowerShell作为默认的shell,并在尝试验证terraform /plan/apply通过VScode、外部PowerShell或CMD运行terraform/plan/apply时获得相同的错误。

在我添加虚拟机创建代码之前,代码一直在运行,没有任何问题。我在下面列出了variables.tf、terraform.tfvars和主要的Terraform代码。

terraform.tfvars

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
web_server_location       = "West US 2"
resource_prefix           = "web-server"
web_server_address_space  = "1.0.0.0/22"
web_server_address_prefix = "1.0.1.0/24"
Environment               = "Test"

variables.tf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
variable "web_server_location" {
  type = string
}

variable "resource_prefix" {
  type = string
}

variable "web_server_address_space" {
  type = string
}

#variable for network range

variable "web_server_address_prefix" {
  type = string
}

#variable for Environment
variable "Environment" {
  type = string
}

terraform_example.tf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Configure the Azure Provider
provider "azurerm" {
  # whilst the `version` attribute is optional, we recommend pinning to a given version of the Provider
  version = "=2.0.0"
  features {}
}

# Create a resource group
resource "azurerm_resource_group" "example_rg" {
  name     = "${var.resource_prefix}-RG"
  location = var.web_server_location
}

# Create a virtual network within the resource group
resource "azurerm_virtual_network" "example_vnet" {
  name                = "${var.resource_prefix}-vnet"
  resource_group_name = azurerm_resource_group.example_rg.name
  location            = var.web_server_location
  address_space       = [var.web_server_address_space]
}

# Create a subnet within the virtual network
resource "azurerm_subnet" "example_subnet" {
  name                  = "${var.resource_prefix}-subnet"
  resource_group_name   = azurerm_resource_group.example_rg.name
  virtual_network_name  = azurerm_virtual_network.example_vnet.name
  address_prefix        = var.web_server_address_prefix
}

# Create a Network Interface
resource "azurerm_network_interface" "example_nic" {
  name                = "${var.resource_prefix}-NIC"
  location            = azurerm_resource_group.example_rg.location
  resource_group_name = azurerm_resource_group.example_rg.name

  ip_configuration {
    name                          = "internal"
    subnet_id                     = azurerm_subnet.example_subnet.id
    private_ip_address_allocation = "Dynamic"
    public_ip_address_id          = azurerm_public_ip.example_public_ip.id
  }  
}

# Create a Public IP 
resource "azurerm_public_ip" "example_public_ip" {
  name = "${var.resource_prefix}-PublicIP"
  location = azurerm_resource_group.example_rg.location
  resource_group_name = azurerm_resource_group.example_rg.name
  allocation_method = var.Environment == "Test" ? "Static" : "Dynamic"

  tags = {
    environment = "Test"
  }
}

# Creating resource NSG
resource "azurerm_network_security_group" "example_nsg" {
  name = "${var.resource_prefix}-NSG"
  location = azurerm_resource_group.example_rg.location
  resource_group_name = azurerm_resource_group.example_rg.name

  # Security rule can also be defined with resource azurerm_network_security_rule, here just defining it inline. 
  security_rule {
    name       = "RDPInbound"
    priority   = 100
    direction  = "Inbound"
    access     = "Allow"
    protocol   = "Tcp"
    source_port_range = "*"
    destination_port_range = "3389"
    source_address_prefix  = "*"
    destination_address_prefix = "*"
  }
  tags = {
    environment = "Test"
  }
}

# NIC and NSG association 
resource "azurerm_network_interface_security_group_association" "example_nsg_association" {
   network_interface_id      = azurerm_network_interface.example_nic.id
   network_security_group_id = azurerm_network_security_group.example_nsg.id

}

# Creating Windows Virtual Machine
resource "azurerm_virtual_machine" "example_windows_vm" {
  name  = "${var.resource_prefix}-VM"
  location = azurerm_resource_group.example_rg.location
  resource_group_name = azurerm_resource_group.example_rg.name
  network_interface_ids = [azurerm_network_interface.example_nic.id]
  vm_size = "Standard_B1s"
  delete_os_disk_on_termination = true

  storage_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServerSemiAnnual"
    sku       = "Datacenter-Core-1709-smalldisk"
    version   = "latest"  
  }

  storage_os_disk  {
    name                 = "myosdisk1"
    caching              = "ReadWrite"
    create_option        = "FromImage"
    storage_account_type = "Standard_LRS"
  }

  os_profile {
    computer_name  = "hostname"
    admin_username = "adminuser"
    admin_password = "Password1234!"
  }

  os_profile_windows_config {
    disable_password_authentication = false
  }

  tags = {
    environment = "Test"
  }
}

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PS C:\Users\e5605266\Documents\MyFiles\Devops\Terraform> terraform init

There are some problems with the configuration, described below.

The Terraform configuration must be valid before initialization so that
Terraform can determine which modules and providers need to be installed.

Error: Invalid character

  on terraform_example.tf line 89, in resource "azurerm_virtual_machine" "example_windows_vm":
  89:   location                      = azurerm_resource_group.example_rg.location

This character is not used within the language.


Error: Invalid expression

  on terraform_example.tf line 89, in resource "azurerm_virtual_machine" "example_windows_vm":
  89:   location                      = azurerm_resource_group.example_rg.location

Expected the start of an expression, but found an invalid expression token.


Error: Argument or block definition required

  on terraform_example.tf line 90, in resource "azurerm_virtual_machine" "example_windows_vm":
  90:   resource_group_name           = azurerm_resource_group.example_rg.name

An argument or block definition is required here. To set an argument, use the
equals sign "=" to introduce the argument value.


Error: Invalid character

  on terraform_example.tf line 90, in resource "azurerm_virtual_machine" "example_windows_vm":
  90:   resource_group_name           = azurerm_resource_group.example_rg.name

This character is not used within the language.
*
EN

回答 5

Stack Overflow用户

发布于 2020-04-26 03:24:57

我自己在几个不同的环境中遇到过这个问题,它确实有一个共同的解决方案,这一点都不好玩:手动输入代码返回.

这个资源块似乎是它遇到问题的地方:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resource "azurerm_virtual_machine" "example_windows_vm" {
  name  = "${var.resource_prefix}-VM"
  location = azurerm_resource_group.example_rg.location
  resource_group_name = azurerm_resource_group.example_rg.name
  network_interface_ids = [azurerm_network_interface.example_nic.id]
  vm_size = "Standard_B1s"
  delete_os_disk_on_termination = true

  storage_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServerSemiAnnual"
    sku       = "Datacenter-Core-1709-smalldisk"
    version   = "latest"  
  }

  storage_os_disk  {
    name                 = "myosdisk1"
    caching              = "ReadWrite"
    create_option        = "FromImage"
    storage_account_type = "Standard_LRS"
  }

  os_profile {
    computer_name  = "hostname"
    admin_username = "adminuser"
    admin_password = "Password1234!"
  }

  os_profile_windows_config {
    disable_password_authentication = false
  }

  tags = {
    environment = "Test"
  }
}

试着按原样将其复制回编辑器。我在其中看不到任何有问题的字符,具有讽刺意味的是,StackOverflow可能为您提供了一个坚实的、过滤掉的字符。从字面上看,将其复制/粘贴到现有块上可能会纠正这种情况。

我在网上看到过Terraform的例子,很多次都有时髦的双引号(这不是ASCII双引号,也不会起作用)。这可能就是你所看到的。

除此之外,您还需要将代码推送到GitHub或类似的位置,这样我就可以自己看到原始字节了。

票数 5
EN

Stack Overflow用户

发布于 2021-02-21 06:52:12

在偶然的情况下,这会帮助那些在Google上遇到这个错误的人,我只是想我会发布我的情况和我是如何修正它的。

我有一个旧的演示Terraform基础设施,几个月后我重新访问了它,长话短说,我在两天前发布了这个命令,并忘记了它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
terraform plan -out=plan.tf

这将创建计划的压缩存档。两天后回来,运行了一个terraform init,我的终端滚动垃圾,“这个字符没有在语言中使用”。大约7秒。由于.tf的扩展,terraform正在查看压缩数据并迅速拉裤子。

通过将单个tf文件移动到临时目录并使用terraform init检查它们的有效性,我找到了罪魁祸首,删除了它,并恢复了功能。

各位,在导出计划文件时要小心!

票数 4
EN

Stack Overflow用户

发布于 2022-01-12 08:43:44

我遇到了同样的问题,发现了这一页。

我解决了这个问题,决定在这里发邮件。我在Notepad++中打开了我的计划文件,并选择了View所有符号.我删除了所有TAB字符,并用空格替换它们。就我而言,这个问题已经完全解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61425148

复制
相关文章
Terraform 系列-Terraform 简介
最近在使用 Terraform 来置备 OCI 的 Always Free Tier, 发现它非常好用。总结学习下:Terraform 的基础知识。
东风微鸣
2023/09/15
4700
Terraform 系列-Terraform 简介
Terraform 入门
为了使Terraform能够对你的AWS账户进行直接操作,需要将环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
yeedomliu
2021/12/10
2.7K0
Terraform 入门
Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?
最近在使用 Terraform Cloud 来置备 OCI 的 Always Free Tier, 发现它非常好用,相比 Terraform OSS, 用起来省心多了。
东风微鸣
2023/09/15
2180
Terraform 系列-Terraform Cloud 比 Terraform OSS 有哪些增强?
Terraform 入门
简介 Terraform 的特点: Infrastructure as Code Execution Plans Resource Graph Change Automation Terraform 工具处在什么位置: [image] [image] 指引 核心工作流 Write - Author infrastructure as code. Plan - Preview changes before applying. Apply - Provision reproducible infrastruct
王磊-字节跳动
2020/02/01
3.6K0
Crossplane vs Terraform
Crossplane经常被比作HashiCorp的Terraform。对于企业平台团队来说,当Terraform满足不了需求并寻找替代方案时,他们通常会找到Crossplane,所以这两个开源项目之间存在着相似之处:
CNCF
2021/03/15
3.8K0
Crossplane vs Terraform
[译]Crossplane vs Terraform
最近在 Operator 还是 Provider 的问题上掉了不少头发,感谢 pigletfly 推荐本文,解答了我很多疑惑。
崔秀龙
2022/08/30
1.8K0
Terraform资源定义梳理
资源是Terraform体系中最重要的组成元素, 每个资源块用来定义一个或多个基础产品实例, 它或者定义一个VPC,或者定义一个CVM或者一条DNS记录.
乔碧萝殿下
2019/12/27
6.7K1
terraform初体验
Terraform 的大名我知道很久了,但是一直没有机会体验。刚好最近正在研究关于 PyVmomi 和 LibCloud,顺便也对 Terraform 进行了简单体验,特此分享给大家。
Python研究所
2022/06/17
1.8K0
terraform初体验
Terraform语法入门
HCL是Terraform的配置语言,它是HashiCorp发明的一种声明式语言,能够以更加简短和人性化的方式来描述资源。本文主要介绍HCL配置语言的基本语法及使用,语法采用当前最新版本0.12。
oliverpei
2020/03/17
8.5K2
Terraform与Kubernetes的体验
Terraform体验了腾讯云的CVM的基本操作。正常流程要去体验一下其他基础组件的整合比如数据库redis等基础组件,还有现有资源的导入。配置文件的合理配置等等等....先插播一下kubernetes的体验吧......毕竟我主要的工作环境是Kubernetes!也有tke。其实也可以体验下tke的整合?现在先单独体验下原生的kubernetes吧!
对你无可奈何
2022/04/08
2.4K3
云原生 | Terraform 初体验
Terraform 是一种安全有效地构建、更改和版本控制基础设施的工具(基础架构自动化的编排工具)。
TeamsSix
2022/09/20
1.9K0
云原生 | Terraform 初体验
使用Terraform创建QCS角色
在一些规模较大的企业,特别是外企,喜欢使用terraform来批量管理云产品的资源,腾讯云对Terraform的支持也是比较完善的
蚂蚁上树
2023/01/28
1K0
terraform-远程状态存储
默认情况下,terraform在运行完后,会在当前目录下生成state状态文件,里面存储的是上一次执行成功后的资源状态。
保持热爱奔赴山海
2022/01/11
1.9K0
terraform-远程状态存储
Terraform的几个关键概念
Terraform是由HashiCorp公司在2014年左右推出的开源工具, 目前几乎所有的主流云服务商都支持Terraform,包括腾讯云、AWS、Azure和GCP等。腾讯云在2017年即开始支持terraform进行资源编排,截止目前共有10余款基础产品完美支持terraform,涉及计算、存储、网络、数据库等类别。经过两年的多实践,包括Roit、EF和Unity等在内的众多大客户都在腾讯云上基于terraform构建自己的基础架构。
刘宇雷
2019/07/26
8.3K2
Terraform的几个关键概念
使用Terraform配置Linode环境
基础架构代码(IaC)是一种软件,使开发人员能够使用高级配置语法构建,管理和配置计算环境。一些好处包括能够实施DevOps最佳实践,流程自动化以及使用版本控制系统在团队中实现更高可见性和协作的机会。
GongAo啊_
2018/09/10
3.7K0
使用Terraform配置Linode环境
Terraform 最佳实践:典型文件布局
•global:用于运行各种环境下都要共享的资源(如:Terraform backend - S3、IAM)
东风微鸣
2022/04/22
2.9K0
Terraform Cloud免费开放
为了方便广大开源客户,Hashicorp在2019年5月决定将Terraform Cloud的远程状态管理功能免费开放给开源版用户。而上周在西雅图的Hashiconf上,为了满足中小企业的需求,Hashicorp正式推出了Terraform Cloud,这个版本也同时开放了更多的免费功能给不超过5人的团队使用。Terraform Cloud的功能分成免费版、团队版以及集中控制功能,本文主要对免费版功能进行介绍。
刘宇雷
2019/09/14
4.5K8
Terraform Cloud免费开放
Output sensitive data with Terraform
Use the nonsensitive function in the output
轻量级云原生架构实验室
2022/11/29
6060
腾讯云Terraform应用指南(三)
本文将衔接《腾讯云Terraform应用指南(二)》,继续对Terraform中的指令给出详细的使用指南,让用户全面了解Terraform的每一个可用操作,助力腾讯云Terraform应用。
生态产品团队
2019/08/07
5.4K0
腾讯云Terraform应用指南(一)
《腾讯云Terraform应用指南》系列文章旨在帮助腾讯云用户借助Terraform,轻松使用简单模板语言来定义、预览和部署云基础结构,让用户通过IaC,基于腾讯云的OpenAPI一键创建或销毁多路资源。利用Terraform这把利器,帮助用户节约资源开销,提高从部署到运维的自动化生产力。
生态产品团队
2019/07/26
19.6K5

相似问题

terraform在terraform init & terraform计划成功运行后用S3报告后端配置错误

30

错误:收集实例设置错误:运行terraform应用时的空结果(terraform计划工作良好)

127

Terraform错误:运行terraform init时模块的外部标签

110

terraform:重复值:“步骤-init”。可能丢失或无效的任务默认/terraform-cli错误

16

Terraform错误:运行terraform计划时条件类型不正确

232
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文