

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：使用以下方法构建和测试无服务器应用程序 AWS Lambda
<a name="lambda-build-test-severless-app"></a>

您可以使用模板构建无服务器 Lambda 应用程序。 AWS Toolkit for Visual Studio Lambda 项目模板包括一个用于**AWS 无服务器应用程序**的模板，即[AWS 无服务器应用程序模型 (S](https://github.com/awslabs/serverless-application-model) AM) 的 AWS Toolkit for Visual Studio 实现。AWS 使用此项目类型，您可以开发一组 AWS Lambda 函数，并使用任何必要的 AWS 资源将它们作为整个应用程序进行部署， AWS CloudFormation 用于协调部署。

有关设置的先决条件和信息 AWS Toolkit for Visual Studio，请参阅[使用 Visual Stu AWS dio AWS 工具包中的 Lambda 模板](lambda-index.md)。

**Topics**
+ [创建新的 AWS 无服务器应用程序项目](#create-a-new-aws-serverless-application-project)
+ [查看无服务器应用程序文件](#examine-the-files-in-the-serverless-application)
+ [部署无服务器应用程序](#deploy-the-serverless-application)
+ [测试无服务器应用程序](#test-the-serverless-application)

## 创建新的 AWS 无服务器应用程序项目
<a name="create-a-new-aws-serverless-application-project"></a>

AWS 无服务器应用程序项目使用无服务器模板创建 Lambda 函数。 CloudFormation CloudFormation 模板使您能够定义其他资源，例如数据库、添加 IAM 角色和一次部署多个函数。这与 AWS Lambda 项目不同，后者侧重于开发和部署单个 Lambda 函数。

以下过程介绍了如何创建新的 AWS 无服务器应用程序项目。

1. 在 Visual Studio 中，展开**文件**菜单，展开**新建**，然后选择**项目**。

1. 在**新建项目**对话框中，确保将**语言**、**平台**和**项目类型**下拉框都设置为“全部...”，然后在**搜索**字段中键入 **aws lambda**。

1. 选择**带测试的AWS 无服务器应用程序（.NET Core - C\$1）**模板。
**注意**  
**带测试的AWS 无服务器应用程序（.NET Core - C＃）**模板可能不会填充到结果的顶部。

1. 单击**下一步**打开**配置您的新项目**对话框。

1. 在**配置您的新项目**对话框中，为**名称**输入 **ServerlessPowertools**，然后根据您的偏好填写其余字段。选择**创建**按钮进入**选择蓝图**对话框。

1. 在**选择蓝图**对话框中，选择 **Powertools for AWS Lambda** 蓝图，然后选择**完成**以创建 Visual Studio 项目。

## 查看无服务器应用程序文件
<a name="examine-the-files-in-the-serverless-application"></a>

以下各节详细介绍为您的项目创建的三个无服务器应用程序文件：

1. serverless.template 

1. Functions.cs

1. aws-lambda-tools-defaults.json

### 1. serverless.template
<a name="blogcs"></a>

`serverless.template`文件是用于声明您的无服务器函数和其他 AWS 资源的 AWS 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 服务名称= ServerlessGreeting
+ POWERTOOLS\$1LOG\$1LEVEL=Info
+ POWERTOOLS\$1LOGGER\$1C PascalCase
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1RESPONSE=true
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1ERROR=true
+ POWERTOOLS\$1METRICS\$1NAMESPAC ServerlessGreeting

有关环境变量的定义和其他详细信息，请参阅 [Powertools 供 AWS Lambda 参考](https://awslabs.github.io/aws-lambda-powertools-dotnet/references/)网站。

### 2. Functions.cs
<a name="functionscs"></a>

`Functions.cs` 是一个包含 C\$1 方法的类文件，该方法映射到模板文件中声明的单个函数。该 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
<a name="functionscs"></a>

`aws-lambda-tools-defaults.json`提供了 Visual Studio 内部 AWS 部署向导的默认值以及添加到.NET Core CLI 中的 AWS Lambda 命令。以下是本项目附带的 `aws-lambda-tools-defaults.json` 文件的示例：

```
{
  "profile": "Default",
  "region": "us-east-1",
  "configuration": "Release",
  "s3-prefix": "ServerlessPowertools/",
  "template": "serverless.template",
  "template-parameters": ""
}
```

## 部署无服务器应用程序
<a name="deploy-the-serverless-application"></a>

要部署无服务器应用程序，请完成以下步骤：

1. 在**解决方案资源管理器**中，打开项目的快捷菜单（右键单击），然后选择 “**发布到 AWS Lambda” 以**打开 “**发布 AWS 无服务器**应用程序” 对话框。

1. 在 “**发布 AWS 无服务器应用程序**” 对话框中，在 CloudFormation 堆栈名称字段中输入堆**栈容器的名称**。

1. 在 **S3 存储桶**字段中，选择您的应用程序捆绑包将上传到的 Amazon S3 存储桶，或者选择**新建...**按钮，输入新 Amazon S3 存储桶的名称。然后选择**发布**以进行发布，来部署您的应用程序。
**注意**  
您的 CloudFormation 堆栈和 Amazon S3 存储桶必须位于同一 AWS 区域。您的项目的其余设置在 `serverless.template` 文件中定义。  
![\[“发布 AWS 无服务器应用程序” 对话框的图像。\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-serverless-03192024.png)

1. 在发布过程中，**堆栈**视图窗口会打开，当部署完成后，**状态**字段将显示：`CREATE_COMPLETE`。  
![\[Visual Studio 中部署堆栈视图窗口的图像。\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-stackview-03192024.png)

## 测试无服务器应用程序
<a name="test-the-serverless-application"></a>

堆栈创建完成后，您可以使用 **AWS 无服务器 URL** 查看您的应用程序。如果您在完成本教程时未添加任何其他函数或参数，则访问您的 AWS 无服务器 URL 会在您的网络浏览器中显示以下短语：`Hello Powertools for AWS Lambda (.NET)`。