チュートリアル: でのサーバーレスアプリケーションの構築とテストAWS Lambda - AWS Toolkit for Visual Studio

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

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

サーバーレス Lambda アプリケーションを構築するには、AWS Toolkit for Visual Studioテンプレートテンプレート Lambda プロジェクトテンプレートには、AWSサーバーレスアプリケーションであるAWS Toolkit for Visual Studioの実装AWSサーバーレスアプリケーションモデル (AWSSAM)。このプロジェクトタイプを使用すると、AWS Lambda関数をに発行し、必要なAWSリソースを、アプリケーション全体としてAWS CloudFormationを使用してデプロイメントをオーケストレーションします。

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

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

  1. Visual Studio を開き、[File (ファイル)] メニューで [New (新規)] を選択し、[Project (プロジェクト)] を選択します。

  2. Visual Studio 2017 の場合:

    新しいプロジェクトダイアログボックスでインストール済みを拡張します。Visual C#[] を選択してから、AWSLambda

    Visual Studio 2019 の場合:

    新しいプロジェクト] ダイアログボックスで、[言語,プラットフォーム, およびプロジェクトタイプドロップダウンボックスが [すべて...] に設定され、aws lambda()検索field.

    選択可能なプロジェクトには 2 つのタイプがあります。

    • AWS Lambdaプロジェクトは、個々の Lambda 関数を開発およびデプロイするためのプロジェクトです。

    • AWSサーバーレスアプリケーションプロジェクトは、サーバーレスで Lambda 関数を作成するためのプロジェクトです。AWS CloudFormationテンプレートテンプレートAWSサーバーレスアプリケーションでは、関数以上のものを定義できます。たとえば、データベースの作成や IAM ロールの追加などを、サーバーレスデプロイと同時に追加できます。AWSサーバーレスアプリケーションでは、一度に複数の関数をデプロイすることもできます。

  3. [] を選択します。AWSテスト付きサーバーレスアプリケーション (.NET Core-C#)テンプレートテンプレート

  4. Visual Studio 2017 の場合:

    [名前] に「Blogger」と入力し、目的の [場所] などを入力して、[OK] をクリックします。

    Visual Studio 2019 の場合:

    [Next] をクリックします。次のダイアログで、[名前] に「Blogger」と入力し、目的の [場所] などを入力して、[作成] をクリックします。

  5. -ブループリントの設定ページには Lambda 関数テンプレートがいくつか表示されます。

    
                  の設計図AWSLambda サーバーレスプロジェクト
  6. [Blog API using DynamoDB blueprint] を選択し、[Finish (完了)] を選択して Visual Studio プロジェクトを作成します。

サーバーレスアプリケーション内のファイルの詳細

Blog.cs

Blog.csは Amazon DynamoDB に保存されたブログアイテムを表すための単純なクラスです。

Functions.cs

Functions.csは C# 関数を Lambda 関数としてエクスポーズできるように定義します。ブログプラットフォームを管理するために定義された関数が 4 つあります。

  • GetBlogsAsync はブログの一覧を取得するための関数です。

  • GetBlogAsync は、クエリパラメータ ID または URL リソースパスに追加された ID をもとに、ブログを 1 つ取得するための関数です。

  • AddBlogAsyncは DynamoDB テーブルにブログを追加するための関数です。

  • RemoveBlogAsyncは DynamoDB テーブルからブログを削除するための関数です。

これらの各関数は APIGatewayProxyRequest オブジェクトを受け取り、APIGatewayProxyResponse オブジェクトを返します。

これらの Lambda 関数を HTTP API としてエクスポーズするには、Amazon API Gateway を使用します。APIGatewayProxyRequest には HTTP リクエストのすべての情報が含まれます。GetBlogAsync タスクはリソースパスまたはクエリ文字列に含まれるブログ ID を検出します。

public async Task GetBlogAsync(APIGatewayProxyRequest request, ILambdaContext context) { string blogId = null; if (request.PathParameters != null && request.PathParameters.ContainsKey(ID_QUERY_STRING_NAME)) blogId = request.PathParameters[ID_QUERY_STRING_NAME]; else if (request.QueryStringParameters != null && request.QueryStringParameters.ContainsKey(ID_QUERY_STRING_NAME)) blogId = request?.QueryStringParameters[ID_QUERY_STRING_NAME]; ... }

このクラスのデフォルトのコンストラクタは、ブログを環境変数として格納する DynamoDB テーブルの名前を渡します。この環境変数は Lambda が関数をデプロイするときに設定されます。

public Functions() { // Check if a table name was passed in through environment variables and, if so, // add the table mapping var tableName = System.Environment.GetEnvironmentVariable(TABLENAME_ENVIRONMENT_VARIABLE_LOOKUP); if(!string.IsNullOrEmpty(tableName)) { AWSConfigsDynamoDB.Context.TypeMappings[typeof(Blog)] = new Amazon.Util.TypeMapping(typeof(Blog), tableName); } var config = new DynamoDBContextConfig { Conversion = DynamoDBEntryConversion.V2 }; this.DDBContext = new DynamoDBContext(new AmazonDynamoDBClient(), config); }

serverless.template

serverless.template は前述の 4 つの関数をデプロイするために使用される AWS CloudFormation テンプレートです。テンプレートのパラメータを使用して、DynamoDB テーブルの名前を設定したり、DynamoDB のテーブルを作成するか、テーブルがすでに作成されていると仮定するかを選択することができます。

テンプレートは AWS::Serverless::Function 型の 4 つのリソースを定義します。これは、の一部として定義される特別なメタリソースです。AWSSAM の仕様図 仕様とは、DynamoDB デプロイの一部としてテンプレートに適用される変換です。この変換の結果、メタリソースタイプが展開され、AWS::Lambda::FunctionAWS::IAM::Role のような、より具体的なリソースに変換されます。変換は次のように、テンプレートファイルの上部に記述されます。

{ "AWSTemplateFormatVersion" : "2010-09-09", "Transform" : "AWS::Serverless-2016-10-31", ... }

GetBlogs の宣言は関数宣言に似ています。

"GetBlogs" : { "Type" : "AWS::Serverless::Function", "Properties": { "Handler": "Blogger::Blogger.Functions::GetBlogsAsync", "Runtime": "dotnetcore1.0", "CodeUri": "", "Description": "Function to get a list of blogs", "MemorySize": 256, "Timeout": 30, "Role": null, "Policies": [ "AWSLambdaFullAccess" ], "Environment" : { "Variables" : { "BlogTable" : { "Fn::If" : ["CreateBlogTable", {"Ref":"BlogTable"}, { "Ref" : "BlogTableName" } ] } } }, "Events": { "PutResource": { "Type": "Api", "Properties": { "Path": "/", "Method": "GET" } } } } }

フィールドの多くは Lambda プロジェクトのデプロイのフィールドに類似しています。左Environmentプロパティでは、DynamoDB テーブルの名前が環境変数として渡されます。-CodeUriプロパティを通して、アプリケーションバンドルが Amazon S3 のどこに格納されているかが DynamoDB に伝えられます。このプロパティは空白のままにします。デプロイの際、アプリケーションバンドルを S3 にアップロード後に、ツールキットにより自動的に補完されます (ディスク上のテンプレートファイルは変更されません)。-Eventsセクションは Lambda 関数の HTTP バインドが定義されます。関数に必要な API Gateway のセットアップは以上です。このセクションでは、他の種類のイベントソースもセットアップします。


            イベントソースの追加

を使用するメリットには以下のようなものがあります。AWS CloudFormationを使用してデプロイメントを管理するには、他のAWSリソースをテンプレートに追加し、リソースの作成や削除を DynamoDB で行えるようにします。


            リソースの追加

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

サーバーレスアプリケーションをデプロイするには、プロジェクトを右クリックし、[への発行AWSLambda


            プロジェクトの公開

この結果デプロイウィザードが起動します。そして、ですべての Lambda 設定が完了したことにより、serverless.templateファイルで、供給する必要があるのは以下だけです。

  • テンプレートで宣言されているすべてのリソースのコンテナである CloudFormation スタックの名前。

  • アプリケーションバンドルをアップロードする S3 バケット。

これらは同じAWSリージョン。


            公開の詳細の入力

サーバーレステンプレートにはパラメータが設定できるため、パラメータの値を指定できる別ページがウィザードに表示されます。BlogTableName プロパティを空白のままにすることで、CloudFormation が自動的に、テーブルに一意の名前を付けることができます。設定する必要がありますShouldCreateTabletrueに設定して、DynamoDB がテーブルを作成します。既存のテーブルを使用するには、テーブル名を入力して ShouldCreateTable パラメータの値を false に設定します。その他のフィールドはデフォルト値のままにして、[Publish (パブリッシュ)] を選択します。


            テンプレートパラメータの編集

公開ステップが完了すると、CloudFormation スタックビューがAWSExplorer. ビューには、サーバーレステンプレートで宣言されているすべてのリソースの、作成の進行状況が表示されます。


            CloudFormation スタックビュー

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

スタックの作成が完了すると、API Gateway のルート URL がページに表示されます。このリンクをクリックすると、テーブルにブログを追加していないため、空の JSON 配列が返されます。テーブルにブログを追加するには、この URL に対して HTTP PUT メソッドを作成して、ブログを表す JSON ドキュメントを渡します。この操作はコードを書くことでも、任意のツールで行うこともできます。この例では Postman ツールと呼ばれる、Chrome ブラウザの拡張機能で行いますが、任意のツールを使用することができます。このツールで、URL を設定し、メソッドを PUT に変更します。[Body] タブでサンプルコンテンツを配置します。HTTP コールを行うとブログ ID が返されます。


            ブログの投稿

リンク先のブラウザに戻り、AWSサーバーレスURLを使用すると、先ほど投稿したブログが返されています。


            ブログの取得

の使用AWSサーバーレスアプリケーションテンプレートでは、Lambda 関数のコレクションとアプリケーションの他のAWSリソースの使用料金を見積もることができます。また、AWSSAM の仕様により、簡素化された構文を使用して、DynamoDB テンプレート内のサーバーレスアプリケーションを宣言できます。