【问题标题】:Terraform - create cloudwatch scheduled expression based on variable - expected expression but found "*"Terraform - 根据变量创建 cloudwatch 计划表达式 - 预期表达式但找到“*”
【发布时间】:2019-06-03 05:00:19
【问题描述】:

我正在尝试通过 terraform 创建 AWS Clouwatch 事件规则

variable "schedule_expression" {
  default = "cron(5 * * * ? *)"
  description = "the aws cloudwatch event rule scheule expression that specifies when the scheduler runs. Default is 5 minuts past the hour. for debugging use 'rate(5 minutes)'. See https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html"
}

我想指定变量而不是 5

variable "AutoStopSchedule" {
   default = "5"
}

variable "schedule_expression" {
  default = "cron(${var.AutoStopSchedule} * * * ? *)"
  description = "the aws cloudwatch event rule scheule expression that specifies when the scheduler runs. Default is 5 minuts past the hour. for debugging use 'rate(5 minutes)'. See https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html"
}

但得到:

Error: variable "schedule_expression": default may not contain interpolations

main.tf

# Cloudwatch event rule
resource "aws_cloudwatch_event_rule" "check-scheduler-event" {
    name = "check-scheduler-event"
    description = "check-scheduler-event"
    schedule_expression = "${var.schedule_expression}"
    depends_on = ["aws_lambda_function.demo_lambda"]
}

我想根据 AutoStopSchedule 变量创建 schedule_expression,怎么做?

尝试以下:

resource "aws_cloudwatch_event_rule" "check-scheduler-event" {
    name = "check-scheduler-event"
    description = "check-scheduler-event"

    #schedule_expression = "cron(15 * * * ? *)"
    schedule_expression = "${var.AutoStopSchedule == "5" ? cron(5 * * * ? *) : cron(15 * * * ? *)}"
    depends_on = ["aws_lambda_function.demo_lambda"]
}

获取expected expression but found "*"

【问题讨论】:

标签: interpolation terraform amazon-cloudwatch


【解决方案1】:

您不需要这样做。您需要做的是使用本地代替,例如:

variable "AutoStopSchedule" {
   default = "5"
}


locals{
schedule_expression= "cron(${var.AutoStopSchedule} * * * ? *)"  
}

output "schedule_expression" {
  value = "${local.schedule_expression}"
}

如果你 terraform apply 你得到:

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

Outputs:

schedule_expression = cron(5 * * * ? *)

使用它 ${local.sschedule_expression} 之前的 ${var.schedule_expression}。

【讨论】:

    【解决方案2】:

    感谢@ydaetskcoR 的链接,这很有帮助!!

    变量.tf:

    variable "schedule_expression" {
      default = "5"
      description = "the aws cloudwatch event rule scheule expression that specifies when the scheduler runs. Default is 5 minuts past the hour. for debugging use 'rate(5 minutes)'. See https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html"
    }
    
    
    
    
    variable "AutoStopSchedule" {
       default = {
        "1" = "cron(30 * * * ? *)"
        "2" = "cron(0 */1 * * ? *)"
        "3" = "cron(0 */1 * * ? *)"
        "4" = "cron(0 */12 * * ? *)"
        "5" = "cron(0 10 * * ? *)"
      } 
    }
    

    main.tf

    # Cloudwatch event rule
    resource "aws_cloudwatch_event_rule" "check-scheduler-event" {
        name = "check-scheduler-event"
        description = "check-scheduler-event"
        schedule_expression = "${lookup(var.AutoStopSchedule, var.schedule_expression)}"
        depends_on = ["aws_lambda_function.demo_lambda"]
    }
    

    附言。在接下来的 2 天内无法接受我自己的答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多