Переменная набора Terraform с условием

Я пытаюсь установить переменную в строку, которая позже будет объединена с другой строкой для политики ведра aws s3. Я пытаюсь сделать это, определяя локальную переменную, но мне также нужно указать условие, в котором я хотел бы использовать это. Я использую terraform 11.

например:

  • если set_bucket_policy имеет значение false, сделать переменную пустой строкой ""
  • в противном случае используйте heredoc для установки строкового значения переменной

пример, не рабочий код:

locals {
  my_bucket_policy = var.set_bucket_policy == "false" ? "" : <<EOF
  {
    "Action": "s3:Get*",
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/myrole"
    },
    "Resource": [
      "arn:aws:s3:::mybucket",
      "arn:aws:s3:::mybucket/*"
    ],
    "Sid": ""
  }
  EOF
}

2 ответа

Думаю, это довольно близко, я создал небольшой образец, показывающий, как использовать условные выражения. Для получения дополнительной информации вы можете проверить условные выражения Terraform.

main.tf

variable "set_bucket_policy" {
    type = bool
}

output "my_bucket_policy" {
    value = var.set_bucket_policy == false ? "is set to false" : "is set to true"
}

Пример вывода

% terraform apply -var 'set_bucket_policy=false' -auto-approve

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

my_bucket_policy = is set to false
% terraform apply -var 'set_bucket_policy=true' -auto-approve

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

my_bucket_policy = is set to true

есть способы сделать это, и каждый делает это по-своему, я сделал это таким образом.

я проверю переменную политики ведра напрямую, например

      bucket_policy_variable = var.bucket_policy == false : "" ? var.bucketpolicy_json 

Я сделал это в своем модуле ec2, чтобы динамически установить подсеть, я установил одну переменную, устанавливающую область сети.

        variable "subnet_boundary" {
  description = "Variable to declare instance network boundary it could be public or private"
  default = "public"
}

Затем в моем фрагменте кода ec2 я проверил переменную subnet_boundary и установил значение на ее основе.

        subnet_id              = var.subnet_boundary == "public" ? var.ec2_public_subnets : var.ec2_private_subnets 

И это работает как шарм

        + source_dest_check                    = true
  + subnet_id                            = "sn-pubxxxxxx"
  + tags                                 = {
      + "Name" = ""
    }
Другие вопросы по тегам