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

.net core 使用dotnet core 2.0和Terraform管理AWS Lambda函数,.net-core,aws-lambda,terraform,.net Core,Aws Lambda,Terraform,设置 VS代码 地形(v0.11) 问题 我很难理解如何在dotnetcore2.0项目中管理Lambda函数 当前的方法(并非仅以我认为可行的方式实施) 在Terraform中创建功能结构 在dotnet核心项目中创建函数代码,如下所述 压缩发布文件夹并上传到S3 根据AWS c#(assembly::namespace.class name::method name)文档,在Terraform函数定义中引用函数的处理程序 地形Lambda功能示例 resource "aws

设置

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

我很难理解如何在dotnetcore2.0项目中管理Lambda函数

当前的方法(并非仅以我认为可行的方式实施)

  • 在Terraform中创建功能结构
  • 在dotnet核心项目中创建函数代码,如下所述
  • 压缩发布文件夹并上传到S3
  • 根据AWS c#(assembly::namespace.class name::method name)文档,在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"
}
这种方法意味着,如果我在一个项目中更改一个函数,我必须将整个代码库上传到S3,这感觉不是一种处理代码更改的干净方法

替代方法

  • 使用dotnet core CLI管理Lambda功能,而不是Terraform
  • 使用dotnet core CLI部署每个函数
    dotnet lambda部署函数
从Lambda代码版本管理的角度来看,这种方法感觉更干净,但这意味着我不再使用Terraform来管理Lambda函数

我以前使用过NodeJs和Go来创建Lambda函数,每个函数似乎都比dotnet方法更轻量级(因为它更容易将每个函数与源代码解耦)

问题


这两种设置是否都是最优的?

我知道这个问题大约在一年前被问到,所以我不知道从那时起一切都发生了多大的变化,但这对我来说是有效的:

我开始使用
dotnet
clilambda工具,就像您建议的那样,它工作得很好。它是开箱即用的,需要最少的配置。我遇到的问题是,我需要设置一些特定的配置来支持云信息。那就是我开始利用Terraform的时候。经过一番挖掘,我决定使用Terraform,因为它很有趣

现在,您提到了使用Terraform的陷阱是您必须将整个代码上传到S3。。。但我发现,
dotnet
CLI工具的功能完全相同。如果您签出执行
dotnet lambda部署函数的输出,您将看到:

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
因此,简而言之,我决定坚持Terraform,只需编写一个自定义的shell脚本,它首先运行
dotnet restore
,然后运行
dotnet build
,最后运行
Terraform apply
。这就是将应用程序部署到AWS所需的全部内容。我发现这是一种比在dotnetcli中使用无服务器的Cloudformation更可定制的方法

我希望这有帮助