

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: を使用してサーバーレスアプリケーションを構築およびテストする AWS Lambda
<a name="lambda-build-test-severless-app"></a>

 AWS Toolkit for Visual Studio テンプレートを使用してサーバーレス Lambda アプリケーションを構築できます。Lambda プロジェクトテンプレートには、**AWS サーバーレスアプリケーション** (SAM) の AWS Toolkit for Visual Studio 実装であるサーバーレスアプリケーション用のテンプレートが含まれています。 [AWSAWS](https://github.com/awslabs/serverless-application-model)このプロジェクトタイプを使用すると、 を使用してデプロイをオーケストレーションし、 AWS Lambda 関数のコレクションを開発し、アプリケーション全体で必要な AWS リソース AWS CloudFormation でデプロイできます。

の設定に関する前提条件と情報については 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 for AWS Lambda]** ブループリントを選択し、**[完了]** を選択して Visual Studio プロジェクトを作成します。

## サーバーレスアプリケーションファイルの確認
<a name="examine-the-files-in-the-serverless-application"></a>

以下のセクションでは、プロジェクト用に作成された 3 つのサーバーレスアプリケーションファイルについて詳しく説明します。

1. serverless.template

1. Functions.cs

1. aws-lambda-tools-defaults.json

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

`serverless.template` ファイルは、サーバーレス関数やその他の AWS リソースを宣言するための AWS CloudFormation テンプレートです。このプロジェクトに含まれるファイルには、Amazon API Gateway を通じて `HTTP *Get*` オペレーションとして公開される単一の Lambda 関数の宣言が含まれています。このテンプレートを編集して、既存の関数をカスタマイズしたり、アプリケーションに必要な関数やその他のリソースを追加したりできます。

次は、`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

環境変数の定義と詳細については、[「Powertools for AWS Lambda references](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. **Solution Explorer** から、プロジェクトのコンテキストメニューを開き (右クリック）、** AWS Lambda に発行**を選択して** AWS サーバーレスアプリケーションの発行**ダイアログを開きます。

1. ** AWS サーバーレスアプリケーションの発行**ダイアログで、 CloudFormation スタック名フィールドに**スタック**コンテナの名前を入力します。

1. **[S3 バケット]** フィールドで、アプリケーションバンドルがアップロードする Amazon S3 バケットを選択するか、**[新規...]** ボタンを選択して、新しい Amazon S3 バケットの名前を入力します。次に、**[公開]** を選択してアプリケーションを公開し、デプロイします。
**注記**  
 CloudFormation スタックと Amazon S3 バケットは同じ AWS リージョンに存在する必要があります。プロジェクトの残りの設定は、`serverless.template` ファイルで定義されます。  
![\[Publish AWS Serverless Application ダイアログの画像。\]](http://docs.aws.amazon.com/ja_jp/toolkit-for-visual-studio/latest/user-guide/images/lambda-upload-serverless-03192024.png)

1. 公開プロセス中に **[スタック]** ビューウィンドウが開き、デプロイが完了すると、**[ステータス]** フィールドに `CREATE_COMPLETE` と表示されます。  
![\[Visual Studio のデプロイメントスタックビュー ウィンドウの画像。\]](http://docs.aws.amazon.com/ja_jp/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)`。