Aws lambda 用于为Lambda函数配置Cloudwatch事件的Terraform示例(热回调处理程序)

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

作为使用terraform部署Lambda函数的一部分,我需要为热回调事件创建一个云监视事件

我可以很容易地从前端创建它,但我很难从后端创建它,因为需要输入变压器配置


有这样的例子吗?

下面是我用来创建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>\""
  }
}