Terraform部署AWS Lambda Layer遇Python模块找不到问题求助
AWS Lambda Layer导入Google包失败:No module named 'google'
我通过Terraform为AWS Lambda函数创建并绑定了包含google-cloud-iam的自定义Python Layer,使用命令pip install google-cloud-iam -t /Users/Documents/GitHub/Project/project/step_function/common/googleapis将包安装到指定目录,再通过Terraform打包成Layer,但运行Lambda时提示找不到google模块。
文件夹结构
project-dir |-step_function |-common |-googleapis |-zip |-python |-lambda_function.py |-zip |-lambda_function.zip |-main.tf |-main.tf
Terraform配置代码
# 添加Google API Layer data "archive_file" "googleapis_layer_archive" { type = "zip" source_dir = "${path.module}/common/googleapis" output_path = "${path.module}/common/zip/googleapis.zip" } # Python googleapis layer resource "aws_lambda_layer_version" "googleapis_layer" { filename = "${path.module}/common/zip/googleapis.zip" layer_name = "googleapis" source_code_hash = data.archive_file.snow_gcp_permission_handler_archive.output_base64sha256 compatible_runtimes = ["python3.8"] }
Lambda函数代码(gcp_get_assignment_role_data.py)
import json,os from datetime import date import boto3, requests from google.oauth2 import service_account def lambda_handler(event, context): # TODO implement return "hello-world"
错误信息
{ "errorMessage": "Unable to import module 'gcp_get_assignment_role_data': No module named 'google'", "errorType": "Runtime.ImportModuleError", "stackTrace": [] }
解决方法
修正包安装目录结构
Lambda的Python Layer要求第三方包必须放在python目录下,这样运行时才会自动将该目录加入Python的sys.path。当前直接将包安装在googleapis根目录,打包后zip内没有python层级,导致模块无法被识别。修改安装命令,指定包安装到
googleapis/python目录:pip install google-cloud-iam -t /Users/Documents/GitHub/Project/project/step_function/common/googleapis/python修正Terraform配置错误
- 确保
archive_file的source_dir指向包含python文件夹的googleapis目录,这样打包后的zip根目录会保留python层级。 - 修正
source_code_hash的数据源引用,原配置中错误引用了snow_gcp_permission_handler_archive,应该改为对应数据源googleapis_layer_archive:
resource "aws_lambda_layer_version" "googleapis_layer" { filename = "${path.module}/common/zip/googleapis.zip" layer_name = "googleapis" source_code_hash = data.archive_file.googleapis_layer_archive.output_base64sha256 compatible_runtimes = ["python3.8"] }- 确保
重新部署Layer与Lambda
删除旧的googleapis.zip文件,重新执行Terraform命令完成部署:terraform init terraform plan terraform apply确认Lambda函数已绑定最新版本的Layer。
内容的提问来源于stack exchange,提问作者K P
相关产品推荐
相关产品推荐

