我已經定義了一個帶有 terraform 的 lambda 函式,如下所示:
resource "aws_lambda_function" "this" {
filename = "${path.module}/src/existing-files-lambda.zip"
function_name = "ingest-existing-files-lambda"
role = aws_iam_role.lambda.arn
runtime = "python3.9"
timeout = 900
environment {
variables = {
source_bucket_arn = var.source_bucket_arn
destination_bucket_arn = var.destination_bucket_arn
}
}
}
resource "aws_iam_role" "lambda" {
name = "${var.prefix}-lambda-ingest"
path = "/service-role/"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "lambda.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
我的python檔案就是這樣的:
import os
def lambda_handler(event, context):
print('Hello world from Terraform')
return {
'statusCode': 200,
}
但是,我目前收到一個錯誤:
│ Error: handler and runtime must be set when PackageType is Zip
│
│ with module.ingest_lambda.aws_lambda_function.this,
│ on ingest_lambda/main.tf line 8, in resource "aws_lambda_function" "this":
│ 8: resource "aws_lambda_function" "this" {
我在handler這里放什么?我已經有了運行時。
uj5u.com熱心網友回復:
我認為你需要在這里添加一個處理程式:
resource "aws_lambda_function" "this" {
filename = "${path.module}/src/existing-files-lambda.zip"
function_name = "ingest-existing-files-lambda"
handler = "ingest-existing-files-lambda.lambda_handler"
role = aws_iam_role.lambda.arn
runtime = "python3.9"
timeout = 900
environment {
variables = {
source_bucket_arn = var.source_bucket_arn
destination_bucket_arn = var.destination_bucket_arn
}
}
}
在您的 AWS 控制臺中,在 lambda 服務中檢查上述陳述句執行后處理程式是否正確設定。
uj5u.com熱心網友回復:
您已經定義了 Lambda 函式運行時,但您沒有提到函式的入口點在哪里。
這就是handler引數指定的內容 -它是您的函式代碼中處理事件的方法。
它的格式應該類似于:
def handler_name(event, context):
...
return some_value
處理程式引數的值由以下內容組成,以點分隔:
- Lambda 處理程式函式所在的檔案的名稱
- Python 處理程式函式的名稱。
例如
ingest-existing-files-lambda.lambda_handler呼叫中lambda_handler定義的函式ingest-existing-files-lambda.py。
如果您的 Lambda 處理程式方法被呼叫lambda_handler& 在 inside ingest-existing-files-lambda.py,這應該可以作業:
resource "aws_lambda_function" "this" {
filename = "${path.module}/src/existing-files-lambda.zip"
function_name = "ingest-existing-files-lambda"
handler = "ingest-existing-files-lambda.lambda_handler"
role = aws_iam_role.lambda.arn
runtime = "python3.9"
timeout = 900
environment {
variables = {
source_bucket_arn = var.source_bucket_arn
destination_bucket_arn = var.destination_bucket_arn
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/338551.html
標籤:Python 亚马逊网络服务 aws-lambda 地形 terraform-provider-aws
