首页 > 解决方案 > 如何使用 Terraform 启用单个 Lambda 函数的部署?

问题描述

我正在使用 Terraform 自动部署 Lambda 函数。目标是能够部署单个 Lambda 函数或存储库中的所有函数。我能够从如下结构部署许多功能:

├── README.md
├── js
│   ├── README.md
│   ├── jsFunction1/
│   │   └── main.tf
│   └── jsFunction2/
│       └── main.tf
├── py
│   ├── README.md
│   ├── pyFunction1/
│   │   └── main.tf
│   └── pyFunction2/
│       └── main.tf
└── terraform
    ├── README.md
    ├── common/
    ├── global/
    ├── main.tf
    ├── modules/
    ├── prod/
    └── stage/

目标是能够js/jsFunction1独立部署(无需为任何其他函数构建包),同时还terraform/main.tf能够在存储库中部署所有 lambda 函数(在构建之后)。这样开发人员就可以通过对单个功能的更改来更新阶段部署,而不必担心他们可能拥有开发人员未处理的功能的不正确版本。

我希望做的是为每个 Lambda 函数创建一个后端,以便开发人员可以terraform apply从源文件夹中使用。我看不到如何导入从terraform/模块部署的 Lambda 函数的状态。您能告诉我导入资源的状态是一种合理的方法还是推荐一种更好的方法来实现部署许多 Lambda 函数之一的能力?

这是main.tfjs/jsFunction1

module "jsFunction1" {
  source                        = "../../terraform/modules/lambda"
  source_path                   = "${path.module}/dist"
  lambda_function_name          = "jsFunction1"
  lambda_handler                = "lambdaAdapter.handler"
}

在和main.tf下的每个文件夹中都有类似的内容。这是来自文件夹jspymain.tfterraform

module "jsFunction1" {
    source = "./../js/jsFunction1"
}

module "jsFunction2" {
    source = "./../js/jsFunction2"
}

module "pyFunction1" {
    source = "./../py/pyFunction1"
}

module "pyFunction2" {
    source = "./../py/pyFunction2"
}

标签: aws-lambdaterraform

解决方案


您可以使用lambda 包模块为特定 lambda 压缩单独的包并部署它们。

只有在相应文件夹中发生更改时,包模块才能构建包。

所以你可以有一个 main.tf 并引用包模块的输出值。


推荐阅读