使用 dotnet core 2.0 和 Terraform 管理 AWS Lambda 函数

Gre*_*uff 5 .net-core aws-lambda terraform

设置

  • VS代码
  • 地形 (v0.11)

问题

我很难理解如何在 dotnet core 2.0 项目中管理 Lambda 函数

当前方法(没有按照我认为的方式实施)

  • 在 Terraform 中创建函数结构
  • 创建一个DOTNET核心项目的功能代码,描述在这里
  • 压缩发布文件夹并上传到 S3
  • 按照 AWS 文档的 c# (assembly::namespace.class-name::method-name) 在 Terraform 函数定义中引用函数的处理程序

Terraform Lambda 函数示例

resource "aws_lambda_function" "this" {
  function_name = "test_function"
  role          = "lambda_exec_role"
  s3_bucket     = "my_bucket"
  s3_key        = "object_key/package.zip"

  handler = "MyApp::Example.Hello::MyHandler"
  runtime = "dotnetcore2.0"
}
Run Code Online (Sandbox Code Playgroud)

这种方法意味着,如果我更改项目中的单个函数,我必须将整个代码库上传到 S3,这不是处理代码更改的干净方式。

替代方法

  • 使用 dotnet 核心 CLI 来管理 Lambda 函数而不是 Terraform
  • 使用 dotnet core CLI 部署每个函数 dotnet lambda deploy-function

从 Lambda 代码版本管理的角度来看,这种方法感觉更清晰,但这意味着我不再使用 Terraform 来管理我的 Lambda 函数。

我以前使用 NodeJs 和 Go 创建 Lambda 函数,每个函数似乎比 dotnet 方法更轻量级(因为它更容易分离每个函数源代码)。

这些设置中的任何一个看起来是最佳的吗?

Jav*_*ano 2

我知道这个问题是大约一年前从这个回复中提出的,所以我不知道从那时起一切都发生了多少变化,但这对我有用:

我开始使用dotnetCLI Lambda 工具,就像您建议的那样,它运行得很好。它开箱即用,并且需要最少的配置。我遇到的问题是我需要设置一些 Cloudformation不允许的特定配置。从那时起我开始利用 Terraform。经过一番挖掘后,我决定使用 Terraform,因为它解决了这个问题

现在,您提到使用 Terraform 的陷阱是您必须将整个代码上传到 S3...但我发现dotnetCLI 工具的作用完全相同。如果您检查执行的输出,dotnet lambda deploy-function您将看到:

Zipping publish folder
... zipping: some.dll
... zipping: another.dll
Created publish archive (---)
Uploading to S3. (Bucket: ---)
... Progress: 11%
... Progress: 55%
... Progress: 100%
Creating new Lambda function some_lambda
Run Code Online (Sandbox Code Playgroud)

因此,简而言之,我决定坚持使用 Terraform 并简单地详细阐述一个自定义 shell 脚本,该脚本首先运行dotnet restore,然后运行dotnet build,最后运行terraform apply。这就是我将应用程序部署到 AWS 所需的全部内容。我发现与使用 Cloudformation 的无服务器和 dotnet CLI 相比,这是一种更可定制的方法。

我希望这有帮助!