TerraformでLambdaのCloudWatchイベントトリガを無効にする


Lambda の CloudWatch イベントトリガーを無効にしたい時、コンソールからならここで操作出来ますが、

Terraform からどうやるのかと思ったら aws_lambda_permission.action = "lambda:DisableInvokeFunction" にする必要がありました。 enable/disable みたいなスイッチではないので気づきませんでした。
aws_cloudwatch_event_rule.is_enabled ではないので気をつけましょう。


resource "aws_lambda_permission" "allow_to_invoke_func" {
  statement_id  = "AllowExecutionFromCloudWatch"
  function_name = "${aws_lambda_function.func.function_name}"
  principal     = "events.amazonaws.com"
  source_arn    = "${aws_cloudwatch_event_rule.minutely.arn}"

  /* 無効にする場合は "lambda:DisableInvokeFunction" を指定する */
  /* action        = "lambda:InvokeFunction" */
  action        = "lambda:DisableInvokeFunction"
}

resource "aws_cloudwatch_event_rule" "minutely" {
  name                = "minutely"
  schedule_expression = "rate(1 minute)"
}

resource "aws_cloudwatch_event_target" "invoke_func_minutely" {
  rule      = "${aws_cloudwatch_event_rule.minutely.name}"
  target_id = "invoke-func"
  arn       = "${aws_lambda_function.func.arn}"
}

resource "aws_lambda_function" "func" {
  filename         = "${data.archive_file.function_zip.output_path}"
  function_name    = "${var.app_name}-function"
  role             = "${aws_iam_role.lambda_exec.arn}"
  handler          = "index.handler"
  source_code_hash = "${data.archive_file.function_zip.output_base64sha256}"
  runtime          = "ruby2.5"
}