首页 > 解决方案 > 为什么在使用 Terraform 部署 Lambda 函数时出现“错误:必须在 PackageType 为 Zip 时设置处理程序和运行时”?

问题描述

我用 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这里放什么?

我已经runtime指定了。

标签: pythonamazon-web-servicesaws-lambdaterraformterraform-provider-aws

解决方案


我认为您需要在这里添加一个处理程序:

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 服务中,一旦执行上述语句,处理程序就已正确设置。


推荐阅读