Terraform 中 RDS 数据执行语句的有效负载应该是什么样的?

问题描述 投票:0回答:1

我正在尝试使用 RDS 数据执行语句 API 设置针对通用目标的 AWS EventBridge Scheduler。这个 cron 作业应该每天运行并执行一个小的 SQL 脚本。这是 terraform 中脚本的最小版本:

resource "aws_scheduler_schedule" "some_sql_script" {
  name = "..."
  description = "..."
  schedule_expression = "cron(30 0 * * ? *)"
  schedule_expression_timezone = "Europe/Berlin"
  state = "ENABLED"
  flexible_time_window {
    mode = "OFF"
  }
  target {
    arn = "arn:aws:scheduler:::aws-sdk:rdsdata:executeStatement"
    role_arn =  ...
    input = jsonencode({
        "resourceArn": "...",
        "secretArn": "...",
        "sql": "..."
  })
  }
}

尝试应用此方法时,我收到以下错误消息:

creating Amazon EventBridge Scheduler Schedule (...): operation error Scheduler: CreateSchedule, https response error StatusCode: 400, RequestID: ..., ValidationException: Invalid RequestJson provided. Reason Request payload is missing the following field(s): ResourceArn, SecretArn, Sql.

此错误消息和文档使我们相信输入不需要任何进一步的 JSON 编码,因为它只接受 JSON 输入。

新输入如下所示:

input = {
        "resourceArn": "...",
        "secretArn": "...",
        "sql": "..."
  }

这产生了一个新错误:

Inappropriate value for attribute "input": string required.

我尝试将输入作为编码的 JSON、原始 JSON 发送,但无法将其格式化为字符串。我显然需要一个字符串,但不知道如何格式化它。

如果有关于如何格式化输入的提示,我将不胜感激。

terraform amazon-rds terraform-provider-aws
1个回答
0
投票

事实证明错误消息是正确的。正确的形式是

input = jsonencode({
        "ResourceArn": "...",
        "SecretArn": "...",
        "Sql": "..."
  })

显然 terraform 区分大小写。

© www.soinside.com 2019 - 2024. All rights reserved.