サーチ…


前書き

Serverlessの動きの一環として、AWSは最近、AWS Lambda関数のC#サポートを発表しました。この記事では、Visual Studio 2015を使用して簡単なC#AWSラムダ関数を開発、インストール、呼び出しする方法を説明します。

この例を開始する前に、まず本書の「備考」に進み、必要なコンポーネントがすべてインストールされていることを確認してください。

備考

必要なコンポーネントをインストールする

この執筆時点(2017年1月)に、次のコンポーネントをこの順番でマシンにインストールする必要があります。私が使ったマシンにはWindows 10 Homeがインストールされていました。

  1. Visual Studio 2015アップデート3
  2. AWS Toolkit for Visual Studio 2015 - バージョン1.11.2.0
  3. Microsoft .NETコアツール(プレビュー2) - バージョン14.1.21111.0

これらの各コンポーネントは積極的に開発され、リリースされているため、必要に応じてリンクとバージョンを再確認し、このドキュメントを更新してください。

これらそれぞれインストール時間がかかることがありますので、間違いを最小限に抑えるために一度に1つずつ行ってください。

最後に、開発を開始する前にWindowsを再起動するのは悲しいことですが、Windowsボックスに主要な開発ツールをインストールした後は、常に良いアイデアです。

手順1. Visual Studioで新しいソリューションを作成する

  1. Visual Studioを開き、ファイルを選択 - >新規プロジェクト
  2. テストを含むAWSラムダプロジェクト(.NET Core)を選択ここに画像の説明を入力
  3. 次に、 青写真選択画面が表示されます。 「 空の関数」を選択し、「完了」ボタンをクリックします。 ここに画像の説明を入力
  4. 「ツール」 - >「NuGetパッケージマネージャー」 - >「パッケージマネージャーコンソール」を選択します。
  5. コンソールウィンドウで、「 Install-Package Amazon.Lambda.Core」と入力します。
  6. ソリューションエクスプローラでプロジェクトを右クリックし、[パッケージの復元]を選択します。これはコード作成を開始する前の最終的な準備段階です。

ここに画像の説明を入力

ステップ2.プロジェクトのコードを追加して変更する

  1. 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;
  1. SimpleSerializer.csという名前のプロジェクトにファイルを追加する
  2. そのファイルに次のコードを挿入します。
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;
        }

    }
}
}
  1. テストプロジェクトで、 FunctionTest.cs 23行目を次のように変更します。

            var upperCase = function.FunctionHandler(null);
    
  2. ソリューションをビルドします。ビルドエラーは発生しません。

ステップ3 - ラムダ関数をAWSにインストールする

  1. プロジェクトを右クリックし、[ AWS Lambdaに公開...]を選択します

  2. [AWS Lambdaにアップロード]画面が表示されます。正しい領域が選択されていることを確認してください。すべてのデフォルトを維持する。その後、関数名AWSLambdaFunctionAgeInYearsを入力して、次へをクリックします。 ここに画像の説明を入力

  3. 次のページで、[Role Name]フィールドに「AWSLambdaRole」を選択します。アップロードをクリックすると、関数はエラーなしでアップロードされます。 ここに画像の説明を入力

ステップ4. Visual Studio内からAWS Lambda関数を呼び出します。

  1. 上記の手順3の後、Visual Studioは関数がロードされたView Functionウィンドウを開きます。
  2. この画面の左下に、 サンプル入力ボックスに次のjsonを入力します。
{
"month": "10",
"day": "28",
"year": "1979"
}

ここに画像の説明を入力

  1. 最後のステップ:緑の呼び出しボタンをクリックします。この機能はAWS上で実行され、応答は右下のResponseウィンドウに表示されます。


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow