

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用 建置和測試無伺服器應用程式 AWS Lambda
<a name="lambda-build-test-severless-app"></a>

您可以使用 AWS Toolkit for Visual Studio 範本建置無伺服器 Lambda 應用程式。Lambda 專案範本包含一個用於**AWS 無伺服器應用程式的**範本，這是[AWS 無伺服器應用程式模型 (AWS SAM)](https://github.com/awslabs/serverless-application-model) 的 AWS Toolkit for Visual Studio 實作。使用此專案類型，您可以開發一組 AWS Lambda 函數，並使用 AWS CloudFormation 來協調部署，並使用任何必要的 AWS 資源將其部署為整個應用程式。

如需設定 的先決條件和資訊 AWS Toolkit for Visual Studio，請參閱 [AWS Toolkit for Visual Studio 中的使用 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 無伺服器應用程式專案使用無伺服器 CloudFormation 範本建立 Lambda 函數。 CloudFormation 範本可讓您定義其他資源，例如資料庫、新增 IAM 角色，以及一次部署多個函數。這與 AWS 專注於開發和部署單一 Lambda 函數的 Lambda 專案不同。

下列程序說明如何建立新的 AWS 無伺服器應用程式專案。

1. 從 Visual Studio 展開**檔案**功能表，展開**新增**，然後選擇**專案**。

1. 在**新增專案**對話方塊中，確保**語言**、**平台**和**專案類型**下拉式方塊設定為「全部...」，然後在**aws lambda****搜尋**欄位中輸入 。

1. 選取 **AWS Serverless Application with Tests (.NET Core - C\$1)** 範本。
**注意**  
**AWS Serverless Application with Tests (.NET Core - C\$1)** 範本可能不會填入結果頂端。

1. 按一下**下一步**以開啟**設定您的新專案**對話方塊。

1. 從**設定您的新專案**對話方塊中，輸入 **ServerlessPowertools** 做為**名稱**，然後根據您的偏好設定完成其餘欄位。選擇**建立**按鈕以繼續至**選取藍圖**對話方塊。

1. 從**選取藍圖**對話方塊中選擇藍圖**的 Powertools 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 函數的宣告，該函數將透過 Amazon API Gateway 公開為 `HTTP *Get*`操作。您可以編輯此範本來自訂現有的函數，或新增應用程式所需的更多函數和其他資源。

以下是 `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\$1SERVICE\$1NAME=ServerlessGreeting
+ POWERTOOLS\$1LOG\$1LEVEL=Info
+ POWERTOOLS\$1LOGGER\$1CASE=PascalCase
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1RESPONSE=true
+ POWERTOOLS\$1TRACER\$1CAPTURE\$1ERROR=true
+ POWERTOOLS\$1METRICS\$1NAMESPACE=ServerlessGreeting

如需環境變數的定義和其他詳細資訊，請參閱[AWS Lambda 參考資料網站的 Powertools](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_tw/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-serverless-03192024.png)

1. 當部署完成時，**堆疊**檢視視窗會在發佈程序期間開啟，**狀態**欄位會顯示：`CREATE_COMPLETE`。  
![\[視覺化工作室中部署堆疊檢視視窗的影像。\]](http://docs.aws.amazon.com/zh_tw/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-stackview-03192024.png)

## 測試無伺服器應用程式
<a name="test-the-serverless-application"></a>

當堆疊建立完成時，您可以使用**AWS 無伺服器 URL** 檢視您的應用程式。如果您已完成本教學課程，但未新增任何其他函數或參數，存取無 AWS 伺服器 URL 會在 Web 瀏覽器中顯示下列片語：`Hello Powertools for AWS Lambda (.NET)`。