为什么地形会因"An argument named " flow_log_destination_type " is not expected here"而失败?



当我使用terraform创建s3 bucket的vpc流日志模块时,它的抛出错误如下:

An argument named "flow_log_destination_type" is not expected here.
An argument named "flow_log_destination_arn" is not expected here.

在Terraform文档中,我可以看到要填充的详细信息,如log_destination_type & log_destination_arn,我在GitHub上发现了一些文档,上面写着完全相同的代码,但在尝试时,它对我不起作用

产生以下错误:

Error: Unsupported argument
on main.tf line 52, in module "vpc_with_flow_logs_s3_bucket":
52:   flow_log_destination_type = "s3"
An argument named "flow_log_destination_type" is not expected here.

Error: Unsupported argument
on main.tf line 53, in module "vpc_with_flow_logs_s3_bucket":
53:   flow_log_destination_arn  = "${aws_s3_bucket.terra-test2-lifecycle.arn}"
An argument named "flow_log_destination_arn" is not expected here.

Error: Unsupported argument
on main.tf line 55, in module "vpc_with_flow_logs_s3_bucket":
55:   vpc_flow_log_tags = {
An argument named "vpc_flow_log_tags" is not expected here.

我哪里做错了?

module "vpc" {
source  = "terraform-aws-modules/vpc/aws"
version = "2.33.0"
# Interpolated from the workspace
name = "${terraform.workspace}"
cidr = var.vpc_cidr
azs             = var.vpc_azs
private_subnets = var.vpc_private_subnets
public_subnets  = var.vpc_public_subnets
enable_nat_gateway = var.vpc_enable_nat_gw
single_nat_gateway = var.vpc_single_nat_gw
public_subnet_tags = {
Name = "${terraform.workspace}-public"
}
private_subnet_tags = {
Name = "${terraform.workspace}-private"
}
tags = {
Name = "${terraform.workspace}"
}
vpc_tags = {
owner       = "PEDevOps"
environment = "${terraform.workspace}"
version     = "0.0.1"
managedby   = "Terraform"
}
}
module "vpc_with_flow_logs_s3_bucket" {
source = "../../"
log_destination_type = "s3"
log_destination_arn  = "${aws_s3_bucket.terra-test2-lifecycle.arn}"
vpc_flow_log_tags = {
Name = "vpc-flow-logs-s3-bucket"
}

}
resource "aws_s3_bucket" "terra-test-lifecycle" {
bucket = "terra-test-lifecycle"
acl    = "private"
lifecycle_rule {
id      = "log"
enabled = true
prefix = "log/"
tags = {
"rule"      = "log"
"autoclean" = "true"
}
transition {
days          = 30
storage_class = "STANDARD_IA" # or "ONEZONE_IA"
}
expiration {
days = 60
}
}
lifecycle_rule {
id      = "tmp"
prefix  = "tmp/"
enabled = true
expiration {
date = "2020-06-06"
}
}
}

为什么地形在An argument named "flow_log_destination_type" is not expected here中失败?

位于"../../"的模块没有声明任何log_destination_typelog_destination_arnvpc_flow_log_tag变量,Terraform认为在模块块中分配未声明的变量是错误的,如下所示:

module "vpc_with_flow_logs_s3_bucket" {
source = "../../"
log_destination_type = "s3"
log_destination_arn  = "${flow_log_destination_arn}"
vpc_flow_log_tags = {
Name = "vpc-flow-logs-s3-bucket"
}
}

"../../"很可能是vpc_with_flow_log_s3_bucket模块的错误源路径,您应该修复它。如果您在声明该模块块的模块的源路径中,并且运行了cd ../../,那么您最终会在带有vpc_with_flow_logs_3_bucketTerraform代码的目录中吗?如果没有,则设置不正确,您需要修复它。

如果"../../"是正确的路径,则应添加缺少的变量声明。

variable "log_destination_type" {
type = string
}
variable "log_destination_arb" {
type = string
}
variable "vpc_flow_log_tags" {
type = map(string)
}

如果您传递的变量不是模块所期望的,就会发生此错误。

例如

module "vpc_with_flow_logs_s3_bucket" {
source = "../../"
log_destination_type = "s3"
log_destination_arn  = "${flow_log_destination_arn}"
vpc_flow_log_tags = {
Name = "vpc-flow-logs-s3-bucket"
}
}

如果指定此项,则如果变量flow_log_destination_arn在main.tf中定义,并且不在变量中,则会引发错误。tf

来源:..//vpc_with_flow_log_s3_bucket/main.tf

resource "aws_flow_log" "example" {
iam_role_arn    = "${aws_iam_role.example.arn}"
log_destination = "${aws_cloudwatch_log_group.example.arn}"
traffic_type    = "ALL"
vpc_id          = "${aws_vpc.example.id}"
}

我将分享这个错误的另一个可能原因。

像这样写入配置块:

scaling_config = {
desired_size = 2
max_size     = 2
min_size     = 2
}

代替(注意=等号(:

scaling_config {
desired_size = 2
max_size     = 2
min_size     = 2
}

将给出An argument named "scaling_config" is not expected here的错误。


(*(请注意,更改后,如果块类型确实不受支持,则错误标题将从更改

Error: Unsupported argument

收件人:

Error: Unsupported block type

错误信息为:

Blocks of type "scaling_config" are not expected here.

相关内容

最新更新