Переменная набора 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" = ""
}