チュートリアル: でのサーバーレスアプリケーションの構築およびテストAWS Lambda - AWS Toolkit with Amazon Q

チュートリアル: でのサーバーレスアプリケーションの構築およびテストAWS Lambda

AWS Toolkit for Visual Studio テンプレートを使用してサーバーレスアプリケーションを構築することができます。Lambdaプロジェクトテンプレートには、 [AWS Serverless Application] 用のテンプレートが含まれます。これは、[AWS Toolkit for Visual Studio Serverless Application Model (AWS SAM)] の AWS 実装です。このプロジェクトタイプを使用することで、一連の AWS Lambda 機能を開発し、AWS CloudFormation を使用して必要な AWS リソースとともにそれらを全体を 1 つのアプリケーションとして、デプロイのオーケストレーションが可能になります。

AWS Toolkit for Visual Studio のセットアップの詳細と前提条件については、「AWS Toolkit for Visual Studio で AWS Lambda テンプレートを使用する」を参照してください。

新しい AWS サーバーレスアプリケーションプロジェクトを作成します

AWS サーバーレスアプリケーションプロジェクトは、サーバーレス CloudFormation テンプレートを使用して Lambda 関数を作成します。CloudFormation テンプレートを使用すると、データベースなどの追加リソースを定義したり、IAM ロールを追加したり、複数の関数を一度にデプロイしたりできます。これは、単一の Lambda 関数の開発とデプロイに焦点を当てた AWS Lambda プロジェクトとは異なります。

次の手順では、新しい AWS サーバーレスアプリケーションプロジェクトを作成する方法について説明します。

  1. Visual Studio の [ファイル] メニューを展開し、[新規] を展開し、[プロジェクト] を選択します。

  2. [新しいプロジェクト] ダイアログボックスで、[言語][プラットフォーム]、および [プロジェクトタイプ] のドロップダウンボックスが [すべて...] に設定されていることを確認して、[検索] フィールドに aws lambda を入力します。

  3. AWS Serverless Application with Tests (.NET Core - C#) テンプレートを選択します。

    注記

    AWS Serverless Application with Tests (.NET Core - C#) テンプレートが結果の上部に入力されない可能性があります。

  4. [次へ] をクリックして、[新しいプロジェクトを設定] ダイアログを開きます。

  5. [新しいプロジェクトを設定] ダイアログで、[名前]ServerlessPowertools と入力し、残りのフィールドを必要に応じて入力します。[作成] ボタンを選択して、[ブループリントを選択] ダイアログに進みます。

  6. [ブループリントを選択] ページで、[Powertools for AWS Lambda] ブループリントを選択し、[完了] を選択して Visual Studio プロジェクトを作成します。

サーバーレスアプリケーションファイルの確認

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

  1. serverless.template

  2. Functions.cs

  3. aws-lambda-tools-defaults.json

1. serverless.template

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_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 AWS Lambda references」ウェブサイトを参照してください。

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 内の 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": "" }

サーバーレスアプリケーションのデプロイ

サーバーアプリケーションから以下のステップを実行します。

  1. [Solution Explorer] で、プロジェクトのコンテキストメニュー (右クリック)を開き、[AWS Lambda に発行] を選択して[AWS サーバーレスアプリケーションの公開] ダイアログを開きます。

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

  3. [S3 バケット] フィールドで、アプリケーションバンドルがアップロードする Amazon S3 バケットを選択するか、[新規...] ボタンを選択して、新しい Amazon S3 バケットの名前を入力します。次に、[公開] を選択してアプリケーションを公開し、デプロイします。

    注記

    CloudFormation スタックと Amazon S3 バケットは同じ AWS リージョンに存在する必要があります。プロジェクトの残りの設定は、serverless.template ファイルで定義されます。

    [AWS サーバーレスアプリケーションの公開] ダイアログの画像。
  4. 公開プロセス中に [スタック] ビューウィンドウが開き、デプロイが完了すると、[ステータス] フィールドに CREATE_COMPLETE と表示されます。

    Visual Studio のデプロイメントスタックビュー ウィンドウの画像。

サーバーレスアプリケーションのテスト

スタックの作成が完了したら、AWS サーバーレス URL を使用してアプリケーションを表示できます。関数やパラメータを追加せずにこのチュートリアルを完了した場合、AWS サーバーレス URL にアクセスすると、ウェブブラウザに「Hello Powertools for AWS Lambda (.NET)」というフレーズが表示されます。