使用 Terraform 创建 AWS-OPSWORK-STACK 时出错

Posted

技术标签:

【中文标题】使用 Terraform 创建 AWS-OPSWORK-STACK 时出错【英文标题】:Getting error while creating AWS-OPSWORK-STACK using Terraform 【发布时间】:2019-09-20 02:22:22 【问题描述】:

在使用 terraform 及以下代码创建堆栈时遇到此错误

错误:加载 /root/terraform-stack-creation/main.tf 时出错:位置 2:10:资源必须紧跟两个字符串,一个类型和一个名称

resource "aws_opsworks_stack" "stack" 
  name = "$var.name"
  region = "$var.region"
  service_role_arn = "$var.service_role_arn"
  default_instance_profile_arn = "$var.instance_profile_arn"
  default_os = "Amazon Linux 2018.03"
  configuration_manager_version = "11.10"
  manage_berkshelf = false
  default_root_device_type = "ebs"
  use_opsworks_security_groups = false
  vpc_id = "vpc-******************"
  default_subnet_id = "subnet-*****************"
  custom_json = ""


variable "name" 
    type = "string"
    description = "Name (Your required stack name)"
    
variable "region" 
    type = list(string)
    default = ["us-west-1a"]
    description = "us-east-1,ap-south-1,ap-southeast-2,eu-central-1 (Give your region)"
    
variable "service_role_arn" 
    type = list(string)
    default = ["*********************"]
    description = "Default IAM role"
    
variable "default_instance_profile_arn"
    type = list(string)
    default = ["*************************"]
    description = "Default IAM instance profile"
    
variable "default_availability_zone" 
    type = "string"
    description = "Give your availabity zone"
    

【问题讨论】:

当你定义一个没有类型和名称的资源时会发生错误(如错误所暗示的),在它之后用双引号括起来,例如resource "type" "name"。但是,您提供的代码没有这个问题。你确定那个代码有那个确切的错误吗? aws_opsworks_stack 资源在 main.tf 文件的第 2 行吗? 【参考方案1】:

变量name 未设置任何值。

您需要:

a) 为name 设置默认值

b) 通过environment variables、the command line、TF_INPUT=false or -input=false等方法设置name变量

【讨论】:

根本不是这种情况,因为如果未设置变量并且您使用的是-input=false,则会出现完全不同的错误。如果您没有使用-input=false,那么您只会收到输入变量值的提示。 @ydaetskcoR 我认为这已包含在“其他方法”中,但我也会包含指向该链接的链接 @StephenG 已通过在主文件本身中添加服务角色 arn 和实例配置文件 arn 来修复错误。 @VaithiyanathanS 解决它的另一种好方法!

以上是关于使用 Terraform 创建 AWS-OPSWORK-STACK 时出错的主要内容,如果未能解决你的问题,请参考以下文章

terraform如何创建数据盘

如何使用 Terraform 为 Azure 资源创建警报

Terraform-如何避免使用单一状态文件进行破坏和创建

我可以使用 Terraform 创建 GCP API 密钥吗?

使用 terraform 创建多个 GCP 存储桶

我可以使用 terraform 数据创建 instanceid: valueOfNameTag 的地图吗?