我正在尝试使用 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 发送,但无法将其格式化为字符串。我显然需要一个字符串,但不知道如何格式化它。
如果有关于如何格式化输入的提示,我将不胜感激。
事实证明错误消息是正确的。正确的形式是
input = jsonencode({
"ResourceArn": "...",
"SecretArn": "...",
"Sql": "..."
})
显然 terraform 区分大小写。