チュートリアル: でのサーバーレスアプリケーションの構築およびテストAWS Lambda
AWS Toolkit for Visual Studio テンプレートを使用してサーバーレスアプリケーションを構築することができます。Lambdaプロジェクトテンプレートには、 [AWS Serverless Application] 用のテンプレートが含まれます。これは、[AWS Toolkit for Visual Studio Serverless Application Model (AWS SAM)]
AWS Toolkit for Visual Studio のセットアップの詳細と前提条件については、「AWS Toolkit for Visual Studio で AWS Lambda テンプレートを使用する」を参照してください。
新しい AWS サーバーレスアプリケーションプロジェクトを作成します
AWS サーバーレスアプリケーションプロジェクトは、サーバーレス CloudFormation テンプレートを使用して Lambda 関数を作成します。CloudFormation テンプレートを使用すると、データベースなどの追加リソースを定義したり、IAM ロールを追加したり、複数の関数を一度にデプロイしたりできます。これは、単一の Lambda 関数の開発とデプロイに焦点を当てた AWS Lambda プロジェクトとは異なります。
次の手順では、新しい AWS サーバーレスアプリケーションプロジェクトを作成する方法について説明します。
-
Visual Studio の [ファイル] メニューを展開し、[新規] を展開し、[プロジェクト] を選択します。
-
[新しいプロジェクト] ダイアログボックスで、[言語]、[プラットフォーム]、および [プロジェクトタイプ] のドロップダウンボックスが [すべて...] に設定されていることを確認して、[検索] フィールドに
aws lambdaを入力します。 -
AWS Serverless Application with Tests (.NET Core - C#) テンプレートを選択します。
注記
AWS Serverless Application with Tests (.NET Core - C#) テンプレートが結果の上部に入力されない可能性があります。
-
[次へ] をクリックして、[新しいプロジェクトを設定] ダイアログを開きます。
-
[新しいプロジェクトを設定] ダイアログで、[名前] に
ServerlessPowertoolsと入力し、残りのフィールドを必要に応じて入力します。[作成] ボタンを選択して、[ブループリントを選択] ダイアログに進みます。 -
[ブループリントを選択] ページで、[Powertools for AWS Lambda] ブループリントを選択し、[完了] を選択して Visual Studio プロジェクトを作成します。
サーバーレスアプリケーションファイルの確認
以下のセクションでは、プロジェクト用に作成された 3 つのサーバーレスアプリケーションファイルについて詳しく説明します。
-
serverless.template
-
Functions.cs
-
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": "" }
サーバーレスアプリケーションのデプロイ
サーバーアプリケーションから以下のステップを実行します。
-
[Solution Explorer] で、プロジェクトのコンテキストメニュー (右クリック)を開き、[AWS Lambda に発行] を選択して[AWS サーバーレスアプリケーションの公開] ダイアログを開きます。
-
[AWS サーバーレスアプリケーションの公開] ダイアログの [スタック名] フィールドに、CloudFormation スタックコンテナの名前を入力します。
-
[S3 バケット] フィールドで、アプリケーションバンドルがアップロードする Amazon S3 バケットを選択するか、[新規...] ボタンを選択して、新しい Amazon S3 バケットの名前を入力します。次に、[公開] を選択してアプリケーションを公開し、デプロイします。
注記
CloudFormation スタックと Amazon S3 バケットは同じ AWS リージョンに存在する必要があります。プロジェクトの残りの設定は、
serverless.templateファイルで定義されます。
-
公開プロセス中に [スタック] ビューウィンドウが開き、デプロイが完了すると、[ステータス] フィールドに
CREATE_COMPLETEと表示されます。
サーバーレスアプリケーションのテスト
スタックの作成が完了したら、AWS サーバーレス URL を使用してアプリケーションを表示できます。関数やパラメータを追加せずにこのチュートリアルを完了した場合、AWS サーバーレス URL にアクセスすると、ウェブブラウザに「Hello Powertools for AWS Lambda (.NET)」というフレーズが表示されます。