チュートリアル: でのサーバーレスアプリケーションの構築とテスト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検索フィールド。

    選択可能なプロジェクトには 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 オブジェクトを返します。

Amazon API Gateway を使用して、これらの Lambda 関数を HTTP API としてエクスポーズします。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 の設定は以上です。このセクションでは、他の種類のイベントソースもセットアップします。


            イベントソースの追加

を使用するメリットの 1 つAWS CloudFormationデプロイメントを管理するには、他のものを追加して構成することもできます。AWSテンプレート内のアプリケーションが必要とするリソース。そして、DynamoDB がリソースの作成や削除を DynamoDB で行えることです。


            リソースの追加

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

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


            プロジェクトの公開

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

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

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

これらは同じに存在する必要があります。AWSリージョン。


            公開の詳細の入力

サーバーレステンプレートにはパラメータが設定できるため、パラメータの値を指定できる別ページがウィザードに表示されます。BlogTableName プロパティを空白のままにすることで、CloudFormation が自動的に、テーブルに一意の名前を付けることができます。設定する必要がありますShouldCreateTabletrueDynamoDB がテーブルを作成するようにします。既存のテーブルを使用するには、テーブル名を入力して 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 テンプレート内のサーバーレスアプリケーションを宣言できます。