Aws lambda 用于为Lambda函数配置Cloudwatch事件的Terraform示例(热回调处理程序)
作为使用terraform部署Lambda函数的一部分,我需要为热回调事件创建一个云监视事件 我可以很容易地从前端创建它,但我很难从后端创建它,因为需要输入变压器配置Aws lambda 用于为Lambda函数配置Cloudwatch事件的Terraform示例(热回调处理程序),aws-lambda,terraform,Aws Lambda,Terraform,作为使用terraform部署Lambda函数的一部分,我需要为热回调事件创建一个云监视事件 我可以很容易地从前端创建它,但我很难从后端创建它,因为需要输入变压器配置 有这样的例子吗?下面是我用来创建cloudwatch事件的配置,用于使用input\u transformer进行热回拨 resource "aws_cloudwatch_event_rule" "flask-apis-cloudwatch-terraform" { name = "warm_call_back_flask
有这样的例子吗?下面是我用来创建cloudwatch事件的配置,用于使用input\u transformer进行热回拨
resource "aws_cloudwatch_event_rule" "flask-apis-cloudwatch-terraform" {
name = "warm_call_back_flask_apis"
description = "Keep Warm Callback function for flask-apis"
schedule_expression = "rate(4 minutes)"
role_arn = "${aws_iam_role.lambda_exec_flask.arn}"
}
resource "aws_cloudwatch_event_target" "flask-apis-cloudwatch-terraform-target" {
rule = "${aws_cloudwatch_event_rule.flask-apis-cloudwatch-terraform.name}"
target_id = "${aws_lambda_function.flask-apis.function_name}"
arn = "${aws_lambda_function.flask-apis.arn}"
input_transformer = {
input_paths = {"detail-type"="$.detail-type","resources"="$.resources","detail"="$.detail","id"="$.id","source"="$.source","time"="$.time","region"="$.region","version"="$.version","account"="$.account"}
input_template = <<INPUT_TEMPLATE_EOF
{
"time":<time>,
"detail-type": <detail-type>,
"source": <source>,
"account": <account>,
"region": <region>,
"detail": <detail>,
"version": <version>,
"resources": <resources>,
"id": <id>,
"kwargs": {}
}
INPUT_TEMPLATE_EOF
}
}
resource "aws_lambda_permission" "allow_cloudwatch_to_call_flask-apis" {
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.flask-apis.arn}"
principal = "events.amazonaws.com"
source_arn = "${aws_cloudwatch_event_rule.flask-apis-cloudwatch-terraform.arn}"
}
资源“aws\u cloudwatch\u事件\u规则”“flask API cloudwatch terraform”{
name=“预热\u回拨\u烧瓶\u API”
description=“保温瓶API回调函数”
附表_expression=“速率(4分钟)”
role_arn=“${aws_iam_role.lambda_exec_flask.arn}”
}
资源“aws_cloudwatch_事件_目标”“云观察地形目标”{
rule=“${aws\u cloudwatch\u event\u rule.cloudwatch terraform.name}”
target_id=“${aws_lambda_function.flask api.function_name}”
arn=“${aws\u lambda\u function.flask api.arn}”
输入变压器={
输入路径={“详细信息类型”=“$.detail类型”,“资源”=“$.resources”,“详细信息”=“$.detail”,“id”=“$.id”,“源”=“$.source”,“时间”=“$.time”,“区域”=“$.region”,“版本”=“$.version”,“帐户”=“$.account”}
input_template=我们可以使用普通字符串引号。请注意,在AWS控制台中,您也必须在字符串周围包含引号(请参阅此)
资源“aws\u cloudwatch\u事件\u目标”“主”{
rule=aws\u cloudwatch\u event\u rule.main.name
target_id=“SNS警报”
arn=module.sns\u notification.topic\u arn
输入变压器{
输入路径{
原因=“$.detail.stoppedReason”
stopCode=“$.detail.stopCode”
clusterARN=“$.detail.clusterARN”
}
input\u template=“\”您的ECS群集由于“”而意外停止。停止代码为。\“”
}
}
也可以使用tostring()函数
input_transformer {
input_paths = {
aws_region = "$.detail.awsRegion",
aws_account = "$.detail.awsAccountId",
resource_id = "$.detail.resourceId",
event = "$.detail.newEvaluationResult.complianceType"
}
input_template = tostring("\"the Resource <resource_type> <resource_id> in AWS account <aws_account>\"")
输入变压器{
输入路径={
aws_region=“$.detail.awsRegion”,
aws_账户=“$.detail.awsAccountId”,
resource_id=“$.detail.resourceId”,
event=“$.detail.newEvaluationResult.complianceType”
}
输入\u template=tostring(“\”AWS帐户中的资源\”)
}资源“aws\u cloudwatch\u事件目标”“repo\u事件目标”{
rule=aws\u cloudwatch\u event\u rule.repo\u event\u rule.name
target_id=“sns”
arn=module.sns\u email\u topic.arn
输入变压器{
输入路径={
帐户\u id=“$.account”,
time=“$.time”,
region=“$.region”,
notificationBody=“$.detail.notificationBody”
}
在发生以下情况时,在区域“”中的AWS帐户“”中输入\u template=“\”:
}
}
这是可行的,但有人知道我如何使用Terraform进行换行吗?\n不起作用,多行字符串也不起作用。我从HashiCorp的github repo中了解到换行是\\n
input_transformer {
input_paths = {
aws_region = "$.detail.awsRegion",
aws_account = "$.detail.awsAccountId",
resource_id = "$.detail.resourceId",
event = "$.detail.newEvaluationResult.complianceType"
}
input_template = tostring("\"the Resource <resource_type> <resource_id> in AWS account <aws_account>\"")
resource "aws_cloudwatch_event_target" "repo_event_target" {
rule = aws_cloudwatch_event_rule.repo_event_rule.name
target_id = "sns"
arn = module.sns_email_topic.arn
input_transformer {
input_paths = {
account_id = "$.account",
time = "$.time",
region = "$.region",
notificationBody = "$.detail.notificationBody"
}
input_template = "\"In your AWS Account '<account_id>' in the region '<region>' at the time '<time>' the following took place: <notificationBody>\""
}
}