Пример Terraform для настройки событий Cloudwatch для лямбда-функции (Warm Callback Handler) - PullRequest
0 голосов
/ 24 сентября 2018

В рамках развертывания лямбда-функции с использованием terraform мне нужно создать событие наблюдения за облаком для события горячего обратного вызова.

Я могу легко создать его из внешнего интерфейса, но мне сложно создать его из внутреннего конца, так как необходима конфигурация input_transformer.

Какой-нибудь пример?

Ответы [ 3 ]

0 голосов
/ 22 апреля 2019

Можно также использовать jsonencode

resource "aws_cloudwatch_event_target" "main" {
  rule      = "${aws_cloudwatch_event_rule.main.name}"
  target_id = "SNS-alert"
  arn       = "${module.sns_notification.topic_arn}"

  input_transformer {
    input_paths {
      reason     = "$.detail.stoppedReason"
      stopCode   = "$.detail.stopCode"
      clusterARN = "$.detail.clusterArn"
    }

    input_template = "${jsonencode("Your ECS cluster '<clusterARN>' was stopped unexpectedly due to '<reason>'. StopCode is '<stopCode>'.")}"
  }
}
0 голосов
/ 08 августа 2019

Также можно использовать функцию 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>\"")

}

0 голосов
/ 24 сентября 2018

Ниже приведена конфигурация, которую я использовал для создания события cloudwatch для горячего обратного вызова с input_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}"
}
...