Terraform - 所需字符串列表(AWS 中的 cidr_blocks)

Jon*_*nyD 3 amazon-web-services iaas aws-cloudformation terraform

在 Terraform 中,我在输入将存储在变量中的列表时遇到问题。

在执行时terraform plan,我被要求提供 cidr_blocks (它应该是字符串列表)。

我尝试输入几个可能代表字符串列表的“表单”,但总是出现错误。

例子:

第一次尝试:

$terraform plan
...
var.monitoring_access_ips_mysystem
  Enter a value: "10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

var.monitoring_access_ips_mysystem
  Enter a value: ["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]
Run Code Online (Sandbox Code Playgroud)

第三次尝试:

var.monitoring_access_ips_mysystem
  Enter a value: '["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]'
Run Code Online (Sandbox Code Playgroud)

第四次尝试:

var.monitoring_access_ips_mysystem
  Enter a value: "["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]"
Run Code Online (Sandbox Code Playgroud)

第五次尝试:

var.monitoring_access_ips_mysystem
  Enter a value: "10.180.1.0/24"
Run Code Online (Sandbox Code Playgroud)

对于任何尝试,错误总是相同的:

Error: Incorrect attribute value type

  on ecs/security_group.tf line 10, in resource "aws_security_group" "ecs-cluster-sg":
  10:     cidr_blocks = var.monitoring_access_ips_mysystem

Inappropriate value for attribute "cidr_blocks": list of string required.
Run Code Online (Sandbox Code Playgroud)

ecs/security_group.tf文件如下所示 ecs/security_group.tf:

resource "aws_security_group" "ecs-cluster-sg" {
  name   = "${var.app_name}-cluster-sg"
  vpc_id = var.vpc_id

  ingress {
    description = "Ingress from monitoring VPC on custom port"
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = var.monitoring_access_ips_mysystem
  }
  ...
Run Code Online (Sandbox Code Playgroud)

我可以输入/传递 IP 的有效格式是什么,以便它被接受为“字符串列表”?

yda*_*coR 6

UI 输入(在运行未定义某些变量的 Terraform 命令后收到提示时看到的内容)仅支持字符串值,因此如果您想传递非字符串的内容,则需要以非交互方式传递。这可以是变量文档中列出的任何选项之一。这些都是:

  • 在 Terraform Cloud 工作区中。
  • 单独使用 -var 命令行选项。
  • 在变量定义 (.tfvars) 文件中,在命令行上指定或自动加载。
  • 作为环境变量。

在您的情况下,您可以使用以下命令运行计划:

terraform plan -var='monitoring_access_ips_mysystem=["10.180.1.0/24", "10.180.2.0/25", "10.180.3.0/23"]'
Run Code Online (Sandbox Code Playgroud)

除非这在每次运行 Terraform 时都可能发生变化,否则通常应该将其放入terraform.tfvars如下文件中:

monitoring_access_ips_mysystem = [
  "10.180.1.0/24",
  "10.180.2.0/25",
  "10.180.3.0/23",
]
Run Code Online (Sandbox Code Playgroud)