Aws lambda 如何使用Terraform启用单个Lambda函数的部署?

Aws lambda 如何使用Terraform启用单个Lambda函数的部署?,aws-lambda,terraform,Aws Lambda,Terraform,我正在使用Terraform自动化Lambda函数的部署。目标是能够部署单个Lambda函数或repo中的所有函数。我能够从如下结构中部署许多功能: ├── README.md ├── js │   ├── README.md │   ├── jsFunction1/ │ │ └── main.tf │ └── jsFunction2/ │ └── main.tf ├── py │   ├── README.md │   ├── pyFunction1/ │ │

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

├── 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函数创建一个后端,以便开发人员可以从源文件夹中使用
terraformapply
。我不知道如何导入从
terraform/
模块部署的Lambda函数的状态。您能否告诉我导入资源状态是一种合理的方法,还是推荐一种更好的方法来实现部署许多Lambda函数之一的能力

下面是来自
js/jsFunction1

module "jsFunction1" {
  source                        = "../../terraform/modules/lambda"
  source_path                   = "${path.module}/dist"
  lambda_function_name          = "jsFunction1"
  lambda_handler                = "lambdaAdapter.handler"
}
js
py
下的每个文件夹中都有一个类似的
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"
}
您可以使用为特定的lambda压缩单独的包并部署它们

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


因此,您可以使用一个main.tf和来自package模块的参考输出值。

Yes。这就是terraform/main.tf的作用。挑战在于开发人员在处理特定函数时,比如说
jsFunction1
jsFunction2
的构建可能落后于部署的最后一个版本,但它将被部署(覆盖较新的版本),因为它相对于后端的状态发生了更改。至少这似乎是正在发生的事情。