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

如何通过Terraform基于参数创建多个独立AWS Lambda函数?

解决Terraform部署Lambda时旧函数被销毁的问题

问题核心在于:你当前用单个Terraform状态文件管理资源,当var.RUNNER_NAME变化时,Terraform会判定需要替换现有的aws_lambda_function.executable资源(Lambda的function_name属于不可变更属性),因此会销毁旧函数再创建新的。要保留多个独立函数,需要让每次部署的状态彼此隔离,以下是两种可行方案:

方案一:使用Terraform工作区(Workspaces)

每个Lambda函数对应一个独立工作区,工作区名称与RUNNER_NAME一致,每个工作区拥有独立的状态文件,互相不干扰。

流水线脚本修改示例

在GitLab流水线的Terraform执行步骤中,先切换/创建对应工作区:

# 切换到指定工作区,不存在则创建
terraform workspace select ${RUNNER_NAME} || terraform workspace new ${RUNNER_NAME}
# 初始化并部署
terraform init
terraform apply -var "RUNNER_NAME=${RUNNER_NAME}" -var "DOCKER_PATH=${DOCKER_PATH}" -auto-approve

你的原有aws_lambda_function配置无需修改,每个工作区会独立管理自己的Lambda资源。

方案二:使用带动态路径的远程状态存储

如果用S3存储Terraform状态,可以将状态文件的路径包含RUNNER_NAME,让每个函数对应独立的状态文件。

修改Terraform后端配置

terraform {
  backend "s3" {
    bucket = "你的状态存储S3桶名称"
    key    = "lambda-functions/${var.RUNNER_NAME}/terraform.tfstate"
    region = "你的AWS区域"
  }
}

每次部署不同的RUNNER_NAME时,Terraform会加载对应路径的状态文件,管理独立的Lambda资源,不会影响之前部署的函数。

补充说明

Lambda的function_name是不可修改属性,这也是Terraform会销毁旧资源的直接原因。通过隔离状态的方式,让每个部署操作都针对全新的资源实例,就能实现多次触发后保留多个独立Lambda函数的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:15:32