You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置错误

    1. 确保archive_file的source_dir指向包含python文件夹的googleapis目录,这样打包后的zip根目录会保留python层级。
    2. 修正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:00:27