Aws lambda 如何使用Terraform启用单个Lambda函数的部署?
我正在使用Terraform自动化Lambda函数的部署。目标是能够部署单个Lambda函数或repo中的所有函数。我能够从如下结构中部署许多功能: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/ │ │
├── 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
的构建可能落后于部署的最后一个版本,但它将被部署(覆盖较新的版本),因为它相对于后端的状态发生了更改。至少这似乎是正在发生的事情。