0
0

Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your functionに遭遇した

Last updated at Posted at 2024-02-04

起こったこと

╷
│ Error: putting CloudWatch Logs Subscription Filter (subscription-filter): InvalidParameterException: Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your function.
│ 
│   with aws_cloudwatch_log_subscription_filter.this,
│   on main.tf line 34, in resource "aws_cloudwatch_log_subscription_filter" "this":
│   34: resource "aws_cloudwatch_log_subscription_filter" "this" {

CloudwatchLogsのロググループにサブスクリプションフィルターを通してLambda関数を発火させる構成をTerraformで作成していたところ、上記のエラーが発生した。

# ロググループの作成
resource "aws_cloudwatch_log_group" "this" {
  name = "/test/log_group"
}

# Lambda関数の作成
resource "aws_lambda_function" "this" {
  function_name = "lambda-function"
  handler       = "index.handler"
  runtime       = "nodejs18.x"
  filename      = "./lambda_function.zip"
  role          = "arn:aws:iam::123456789012:role/_lambda_exection_role"
}

# サブスクリプションフィルタの設定
resource "aws_cloudwatch_log_subscription_filter" "this" {
  name            = "subscription-filter"
  log_group_name  = aws_cloudwatch_log_group.this.name
  filter_pattern  = "hoge"
  destination_arn = aws_lambda_function.this.arn
}

原因

CloudwatchLogsがLambda関数を起動するためのポリシーの設定が必要。Lambda関数には他のAWSリソースと同様にリソースベースのポリシーを設定可能だが、AWSマネジメントコンソールで作成するときは自動で設定されるため、うっかり忘れていた。

エラーを回避するには

Lambda関数へCloudwatchLogs用の権限を付与するポリシーを追加する。json形式ではなく、Terraformの引数としてパラメータを記述する。


resource "aws_lambda_permission" "this" {
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.this.function_name
  principal     = "logs.amazonaws.com"
  source_arn    = "${aws_cloudwatch_log_group.this.arn}:*"
}

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

参考にさせていただいたもの

意外と盲点?Lambda関数にトリガーを追加するときはリソースベースポリシーを意識しよう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0