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

时间:2018-06-23 20:25:12

标签: .net-core aws-lambda terraform

设置

  • VS代码
  • Terraform(v0.11)

问题

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

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

  • 在Terraform中创建功能结构
  • 按照here
  • 在dotnet核心项目中创建功能代码。
  • 压缩发布文件夹并上传到S3
  • 根据c#的AWS文档(程序集:: namespace.class-name :: method-name),在Terraform Function定义中引用该函数的处理程序

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核心CLI而不是Terraform来管理Lambda函数
  • 使用dotnet核心CLI dotnet lambda deploy-function
  • 部署每个功能

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

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

问题

这两个设置中的哪一个看起来都是最佳的吗?

1 个答案:

答案 0 :(得分:0)

我知道这个答复是一年多以前提出的,所以我不知道从那以后发生了什么变化,但这对我有用:

就像您建议的那样,我开始使用dotnet CLI Lambda工具,并且它工作正常。它开箱即用,需要最少的配置。我遇到的问题是我需要设置Cloudformation didn't allow的一些特定配置。那就是我开始利用Terraform的时候。经过一番挖掘之后,我决定使用Terraform,因为它fixed this issue

现在,您提到了使用Terraform的陷阱是必须将整个代码上传到S3。。。但是我发现dotnet CLI工具的作用完全相同。如果您检出执行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

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

希望对您有所帮助!