本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 Amazon Lambda 构建和测试无服务器应用程序
您可以使用 Amazon Toolkit for Visual Studio 模板构建无服务器 Lambda 应用程序。Lambda 项目模板中有一个适用于 Amazon 无服务器应用程序的模板,是 Amazon 无服务器应用程序模型(Amazon SAM)
有关设置 Amazon Toolkit for Visual Studio 的先决条件和信息,请参阅在 Amazon Toolkit for Visual Studio 中使用 Amazon Lambda 模板。
创建一个新的 Amazon 无服务器应用程序项目
Amazon 无服务器应用程序项目使用无服务器 Amazon CloudFormation 模板创建 Lambda 函数。借助 Amazon CloudFormation 模板,您能够定义额外资源(如数据库)、添加 IAM 角色和一次部署多个函数。这与 Amazon Lambda 项目不同,后者侧重于开发和部署单个 Lambda 函数。
以下过程介绍了如何创建新的 Amazon 无服务器应用程序项目。
-
在 Visual Studio 中,展开文件菜单,展开新建,然后选择项目。
-
在新建项目对话框中,确保将语言、平台和项目类型下拉框都设置为“全部...”,然后在搜索字段中键入
aws lambda。 -
选择带测试的 Amazon 无服务器应用程序(.NET Core - C#)模板。
注意
带测试的 Amazon 无服务器应用程序(.NET Core - C#)模板可能不会填充到结果的顶部。
-
单击下一步打开配置您的新项目对话框。
-
在配置您的新项目对话框中,为名称输入
ServerlessPowertools,然后根据您的偏好填写其余字段。选择创建按钮进入选择蓝图对话框。 -
在选择蓝图对话框中,选择 Powertools for Amazon Lambda 蓝图,然后选择完成以创建 Visual Studio 项目。
查看无服务器应用程序文件
以下各节详细介绍为您的项目创建的三个无服务器应用程序文件:
-
serverless.template
-
Functions.cs
-
aws-lambda-tools-defaults.json
1. serverless.template
serverless.template 文件是用于声明您的无服务器函数和其他 Amazon 资源的 Amazon CloudFormation 模板。此项目附带的该文件中包含单个 Lambda 函数的声明,该函数将作为一项 HTTP *Get* 操作通过 Amazon API Gateway 公开。您可以编辑此模板以自定义现有函数或添加应用程序所需的更多函数和其他资源。
以下是 serverless.template 文件的示例:
{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::Serverless-2016-10-31", "Description": "An AWS Serverless Application.", "Resources": { "Get": { "Type": "AWS::Serverless::Function", "Properties": { "Architectures": [ "x86_64" ], "Handler": "ServerlessPowertools::ServerlessPowertools.Functions::Get", "Runtime": "dotnet8", "CodeUri": "", "MemorySize": 512, "Timeout": 30, "Role": null, "Policies": [ "AWSLambdaBasicExecutionRole" ], "Environment": { "Variables": { "POWERTOOLS_SERVICE_NAME": "ServerlessGreeting", "POWERTOOLS_LOG_LEVEL": "Info", "POWERTOOLS_LOGGER_CASE": "PascalCase", "POWERTOOLS_TRACER_CAPTURE_RESPONSE": true, "POWERTOOLS_TRACER_CAPTURE_ERROR": true, "POWERTOOLS_METRICS_NAMESPACE": "ServerlessGreeting" } }, "Events": { "RootGet": { "Type": "Api", "Properties": { "Path": "/", "Method": "GET" } } } } } }, "Outputs": { "ApiURL": { "Description": "API endpoint URL for Prod environment", "Value": { "Fn::Sub": "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" } } } }
请注意,许多 ...AWS:: Serverless::Function... 声明字段都与 Lambda 项目部署的字段类似。Powertools 日志、指标和跟踪是通过以下环境变量配置的:
POWERTOOLS_SERVICE_NAME=ServerlessGreeting
POWERTOOLS_LOG_LEVEL=Info
POWERTOOLS_LOGGER_CASE=PascalCase
POWERTOOLS_TRACER_CAPTURE_RESPONSE=true
POWERTOOLS_TRACER_CAPTURE_ERROR=true
POWERTOOLS_METRICS_NAMESPACE=ServerlessGreeting
有关环境变量的定义和其他详细信息,请参阅 Powertools for Amazon Lambda 参考
2. Functions.cs
Functions.cs 是一个包含 C# 方法的类文件,该方法映射到模板文件中声明的单个函数。该 Lambda 函数响应来自 API Gateway 的 HTTP Get 方法。以下是 Functions.cs 文件的示例:
public class Functions { [Logging(LogEvent = true, CorrelationIdPath = CorrelationIdPaths.ApiGatewayRest)] [Metrics(CaptureColdStart = true)] [Tracing(CaptureMode = TracingCaptureMode.ResponseAndError)] public APIGatewayProxyResponse Get(APIGatewayProxyRequest request, ILambdaContext context) { Logger.LogInformation("Get Request"); var greeting = GetGreeting(); var response = new APIGatewayProxyResponse { StatusCode = (int)HttpStatusCode.OK, Body = greeting, Headers = new Dictionary (string, string) { { "Content-Type", "text/plain" } } }; return response; } [Tracing(SegmentName = "GetGreeting Method")] private static string GetGreeting() { Metrics.AddMetric("GetGreeting_Invocations", 1, MetricUnit.Count); return "Hello Powertools for AWS Lambda (.NET)"; } }
3. aws-lambda-tools-defaults.json
aws-lambda-tools-defaults.json 提供 Visual Studio 内部 Amazon 部署向导的默认值以及添加到 .NET Core CLI 中的 Amazon Lambda 命令。以下是本项目附带的 aws-lambda-tools-defaults.json 文件的示例:
{ "profile": "Default", "region": "us-east-1", "configuration": "Release", "s3-prefix": "ServerlessPowertools/", "template": "serverless.template", "template-parameters": "" }
部署无服务器应用程序
要部署无服务器应用程序,请完成以下步骤:
-
在解决方案浏览器中,(右键单击)打开项目的上下文菜单,选择发布到 Amazon Lambda 以打开发布 Amazon 无服务器应用程序对话框。
-
从发布 Amazon 无服务器应用程序对话框中,在堆栈名称字段中,为 Amazon CloudFormation 堆栈容器输入一个名称。
-
在 S3 存储桶字段中,选择您的应用程序捆绑包将上传到的 Amazon S3 存储桶,或者选择新建...按钮,输入新 Amazon S3 存储桶的名称。然后选择发布以进行发布,来部署您的应用程序。
注意
您的 Amazon CloudFormation 堆栈和 Amazon S3 存储桶必须位于同一个 Amazon 区域。您的项目的其余设置在
serverless.template文件中定义。
-
在发布过程中,堆栈视图窗口会打开,当部署完成后,状态字段将显示:
CREATE_COMPLETE。
测试无服务器应用程序
堆栈创建完成后,您可以使用 Amazon 无服务器 URL 查看您的应用程序。如果您在完成本教程时未添加任何其他函数或参数,则访问您的 Amazon 无服务器 URL 会在您的网络浏览器中显示以下短语:Hello Powertools for AWS Lambda (.NET)。