लैम्ब्डा फ़ंक्शन को ट्रिगर करने के लिए बकेट नोटिफिकेशन बनाते समय मुझे कोई समस्या हो रही है। त्रुटि:

Error putting S3 notification configuration: InvalidArgument: Unable to validate the following destination configurations
    status code: 400

मैंने पढ़ा है कि इसी तरह की समस्याएं उस क्रम के कारण हो सकती हैं जिसमें संसाधन बनाए गए हैं या लैम्ब्डा अनुमतियां गायब हैं। हालांकि, मैंने अपने कोड में depends_on शामिल करने के साथ-साथ टेम्पलेट को दो बार लागू करने और बीच में प्रतीक्षा करने का प्रयास किया। मैं कम से कम प्रतिबंधात्मक लैम्ब्डा नीति का उपयोग कर रहा हूँ। मैंने टेराफॉर्म दस्तावेज़ों, लेकिन यह मुझे एक पूरी तरह से अलग त्रुटि देता है।

कंसोल में बनाए जाने पर ठीक वही सेटअप ठीक काम करता है।

मेरे कोड का समस्याग्रस्त हिस्सा यहां दिया गया है:

resource "aws_lambda_function" "writeUsersToDB" {
  filename      = "writeUsersToDB.zip"
  function_name = "writeUsersToDB"
  role          = "arn:aws:iam::0000000:role/AWSLambdaFullAccess"
  handler       = "main.lambda_handler"
  memory_size = 256
  timeout = 900
  source_code_hash = filebase64sha256("writeUsersToDB.zip")
  runtime = "python3.8"
  environment {variables = local.parameters}
  layers = [ "arn:aws:lambda:eu-west-2:0000000:layer:pandas-pandas-schema-numpy:1" ]
}



resource "aws_s3_bucket_notification" "event" {
  bucket = aws_s3_bucket.user_data.id

  lambda_function {
    lambda_function_arn = aws_lambda_function.writeUsersToDB.arn
    events              = ["s3:ObjectCreated:*"]
    filter_suffix       = ".csv"
  }
  depends_on = [aws_lambda_function.writeUsersToDB]
}


resource "aws_s3_bucket" "user_data" {
  bucket = "nameofthebucket"
}
2
madej 20 जिंदा 2021, 10:43

1 उत्तर

सबसे बढ़िया उत्तर

आप aws_lambda_permission को मिस कर रहे हैं:

resource "aws_lambda_permission" "example" {
  statement_id  = "AllowExecutionFromS3Bucket"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.writeUsersToDB.function_name
  principal     = "s3.amazonaws.com"
  source_arn    = aws_s3_bucket.user_data.arn
}


2
Marcin 20 जिंदा 2021, 11:09
1
बहुत बहुत धन्यवाद, यह काम किया! मैं इस पर 3 दिनों से बैठा हूं। लेकिन अब मैं उलझन में हूं कि लैम्ब्डा की भूमिका पर्याप्त क्यों नहीं थी?
 – 
madej
20 जिंदा 2021, 11:39
1
लैम्ब्डा फ़ंक्शन में दो प्रकार की अनुमतियाँ होती हैं: निष्पादन भूमिका और संसाधन-आधारित अनुमतियाँ। आप जो लिखते हैं वह पहला प्रकार है। लेकिन यहां हमें दूसरे प्रकार को निर्दिष्ट करने की आवश्यकता है, अर्थात्, फ़ंक्शन को क्या लागू कर सकता है। इस मामले में, हम S3 को इसे लागू करने की अनुमति देते हैं।
 – 
Marcin
20 जिंदा 2021, 13:42