【问题标题】:How can I enable deployment of individual Lambda functions using Terraform?如何使用 Terraform 启用单个 Lambda 函数的部署?
【发布时间】:2021-04-08 15:16:13
【问题描述】:

我正在使用 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 函数之一的能力?

这是来自js/jsFunction1main.tf

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

jspy 下的每个文件夹中都有一个类似的main.tf。这是terraform 文件夹中的main.tf

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

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

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

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

【问题讨论】:

    标签: aws-lambda terraform


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的。这就是terraform/main.tf 的用途。挑战在于开发人员在处理特定功能时,比如jsFunction1jsFunction2 的构建可能落后于上次部署的版本,但它会被部署(覆盖较新的版本),因为它相对于后端的状态发生了变化。至少这似乎是正在发生的事情。
    猜你喜欢
    • 2019-04-12
    • 2023-02-21
    • 2023-02-11
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2022-01-04
    • 2021-04-18
    相关资源
    最近更新 更多