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

如何在无源码包的情况下通过Terragrunt部署AWS Lambda函数?

无Zip包通过Terragrunt部署AWS Lambda的问题解决

我尝试在不附加Zip包的前提下,通过Terragrunt部署AWS Lambda函数,目标是创建仅包含基础配置的函数并由Terragrunt直接管理。

第一次尝试设置create_package: false时,Terragrunt抛出错误:Could not locate source_path "null";之后我尝试使用 dummy 包,配置local_existing_package: "./dummy.zip"和ignore_source_code_hash: true,但错误依然存在。

两次尝试的配置如下:

第一次尝试配置

- function_name: test-function
  create_package: false
  description: "test-function"
  handler: "lambda_handler"

第二次尝试配置

- function_name: test-function
  create_package: false
  local_existing_package: "./dummy.zip"
  ignore_source_code_hash: true
  description: "test-function"
  handler: "lambda_handler"

解决方法

问题核心是:即使禁用自动打包(create_package: false),Terraform/Terragrunt的Lambda模块依然需要明确的代码来源配置,不能完全空缺。以下是可行的解决方案:

1. 用空文件作为代码占位符

创建一个空的对应运行时的文件(比如empty.py对应Python运行时),然后配置固定的源码哈希值,同时明确指定运行时:

- function_name: test-function
  create_package: false
  filename: "./empty.py" # 确保本地存在该空文件
  source_code_hash: "${base64sha256(\" \")}" # 固定空内容的哈希值
  description: "test-function"
  handler: "lambda_handler"
  runtime: "python3.11" # 必须指定运行时,匹配handler的语言

这样既满足了模块对代码来源的要求,又不需要实际的业务代码包。

2. 直接使用原生AWS Lambda资源定义

如果使用的第三方Lambda模块限制过多,可绕开模块,直接用Terraform原生aws_lambda_function资源配置:

resource "aws_lambda_function" "test_function" {
  filename      = "./empty.py"
  function_name = "test-function"
  role          = aws_iam_role.lambda_exec_role.arn # 提前创建好Lambda执行角色
  handler       = "lambda_handler"
  runtime       = "python3.11"
  source_code_hash = base64sha256(file("./empty.py"))
}

这种方式完全自主控制配置,无需依赖模块的打包逻辑,适合仅需基础配置的场景。

3. 检查Lambda模块的必填参数

如果你使用的是特定的Terragrunt/Lambda模块,务必查看模块文档,确认create_package: false时是否需要额外参数跳过代码包检查。部分模块要求禁用自动打包时,必须显式指定source_path或其他替代参数,不能留空。


内容的提问来源于stack exchange,提问作者Hakuna matata

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:40:06