aws-lambda
ローカルマシン上でaws-lambda(C#)を開発する方法
サーチ…
前書き
Serverlessの動きの一環として、AWSは最近、AWS Lambda関数のC#サポートを発表しました。この記事では、Visual Studio 2015を使用して簡単なC#AWSラムダ関数を開発、インストール、呼び出しする方法を説明します。
この例を開始する前に、まず本書の「備考」に進み、必要なコンポーネントがすべてインストールされていることを確認してください。
備考
必要なコンポーネントをインストールする
この執筆時点(2017年1月)に、次のコンポーネントをこの順番でマシンにインストールする必要があります。私が使ったマシンにはWindows 10 Homeがインストールされていました。
- Visual Studio 2015アップデート3
- AWS Toolkit for Visual Studio 2015 - バージョン1.11.2.0
- Microsoft .NETコアツール(プレビュー2) - バージョン14.1.21111.0
これらの各コンポーネントは積極的に開発され、リリースされているため、必要に応じてリンクとバージョンを再確認し、このドキュメントを更新してください。
これらはそれぞれインストールに時間がかかることがありますので、間違いを最小限に抑えるために一度に1つずつ行ってください。
最後に、開発を開始する前にWindowsを再起動するのは悲しいことですが、Windowsボックスに主要な開発ツールをインストールした後は、常に良いアイデアです。
手順1. Visual Studioで新しいソリューションを作成する
- Visual Studioを開き、ファイルを選択 - >新規プロジェクト
- テストを含むAWSラムダプロジェクト(.NET Core)を選択
- 次に、 青写真の選択画面が表示されます。 「 空の関数」を選択し、「完了」ボタンをクリックします。
- 「ツール」 - >「NuGetパッケージマネージャー」 - >「パッケージマネージャーコンソール」を選択します。
- コンソールウィンドウで、「 Install-Package Amazon.Lambda.Core」と入力します。
- ソリューションエクスプローラでプロジェクトを右クリックし、[パッケージの復元]を選択します。これはコード作成を開始する前の最終的な準備段階です。
ステップ2.プロジェクトのコードを追加して変更する
Function.cs
を開き、クラスコードを次のように置き換えます。public class Function { /// <summary> /// A simple function that takes a birth date and returns Age in years /// </summary> /// <param name="input"></param> /// <returns>Age is years</returns> /// [LambdaSerializer(typeof(SimpleSerializer))] public string FunctionHandler(Dictionary<string, int> input) { var defaultMessage = "Age could not be determined."; var birthDate = new DateTime(input["year"], input["month"], input["day"]); var ageInYears = DateTime.Today.Year - birthDate.Year; if (birthDate.DayOfYear > DateTime.Today.DayOfYear) ageInYears--; defaultMessage = $"Age in years: {ageInYears}"; return defaultMessage; } }
一番上の近くに次のusingステートメントを追加する必要があります。
using System.Collections.Generic;
using Amazon.Lambda.Core;
-
SimpleSerializer.cs
という名前のプロジェクトにファイルを追加する - そのファイルに次のコードを挿入します。
using System;
using System.IO;
using Amazon.Lambda.Core;
using Newtonsoft.Json;
namespace AWSLambdaFunctionAgeInYears
{
public class SimpleSerializer : ILambdaSerializer
{
public T Deserialize<T>(Stream requestStream)
{
string text;
using (var reader = new StreamReader(requestStream))
text = reader.ReadToEnd();
try
{
return JsonConvert.DeserializeObject<T>(text);
}
catch (Exception ex)
{
if (typeof(T) == typeof(System.String))
return (T)Convert.ChangeType(text, typeof(T));
throw ex;
}
}
public void Serialize<T>(T response, Stream responseStream)
{
StreamWriter streamWriter = new StreamWriter(responseStream);
try
{
string text = JsonConvert.SerializeObject(response);
streamWriter.Write(text);
streamWriter.Flush();
}
catch (Exception ex)
{
if (typeof(T) == typeof(System.String))
{
streamWriter.Write(response);
streamWriter.Flush();
return;
}
throw ex;
}
}
}
}
テストプロジェクトで、
FunctionTest.cs
23行目を次のように変更します。var upperCase = function.FunctionHandler(null);
ソリューションをビルドします。ビルドエラーは発生しません。
ステップ3 - ラムダ関数をAWSにインストールする
プロジェクトを右クリックし、[ AWS Lambdaに公開...]を選択します。
[AWS Lambdaにアップロード]画面が表示されます。正しい領域が選択されていることを確認してください。すべてのデフォルトを維持する。その後、関数名AWSLambdaFunctionAgeInYearsを入力して、次へをクリックします。
次のページで、[Role Name]フィールドに「AWSLambdaRole」を選択します。アップロードをクリックすると、関数はエラーなしでアップロードされます。
ステップ4. Visual Studio内からAWS Lambda関数を呼び出します。
- 上記の手順3の後、Visual Studioは関数がロードされた
View Function
ウィンドウを開きます。 - この画面の左下に、 サンプル入力ボックスに次のjsonを入力します。
{
"month": "10",
"day": "28",
"year": "1979"
}
- 最後のステップ:緑の呼び出しボタンをクリックします。この機能はAWS上で実行され、応答は右下のResponseウィンドウに表示されます。