メニュー
AWS Lambda
開発者ガイド

.NET Core CLI

.NET Core CLI では、クロスプラットフォームで .NET ベースの Lambda アプリケーションを作成することができます。

開始する前に

このセクションでは、以下が実行済みであることを前提としています。

  • .NET Core CLI のインストールインストールしていない場合は、ここで行います。

.NET プロジェクトを作成する

.NET Core CLI を使用してアプリケーションを作成するには、コマンドプロンプトを開いて .NET Core ランタイムをインストールしたフォルダに移動し、以下の手順に従います。

  1. 次のコマンドを使用して、プロジェクトの作成先となるディレクトリを作成します。mkdir

  2. 次のコマンドを使用して、そのディレクトリに移動します。 cd

  3. 次のコマンドを入力します。dotnet new console

    これにより、ディレクトリに 2 つのファイルが作成されます。

    • Program.cs で、Lambda 関数のコードを作成します。

    • project.json は、Nuget の依存関係 (またはローカルプロジェクトへの依存関係) を宣言するファイルです。NuGet は .NET プラットフォーム用のパッケージマネージャです。詳細については、Nuget.org を参照してください。

    注記

    Lambda メソッドでは、.NET でデフォルトで提供される Main() エントリポイントを使用しないので、project.json ファイルを開き、「buildOptions」プロパティを削除します。その後、project.json は次のように表示されます (NetCore CLI をいつインストールしたかによって実際の表示は異なる場合があります)。

    Copy
    { "version": "1.0.0-*", "dependencies": {}, "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.1.0" } }, "imports": "dnxcore50" } } }
  4. Microsoft Visual Studio などのエディタを使用して Program.cs ファイルを開きます。

    • 提供されているデフォルトのコードを Lambda 関数ハンドラーコードに置き換えます。

      この時点で、.cs ファイルの構造は以下のようになります。

      Copy
      using System; using System.IO; namespace CSharpLambdaFunction { public class LambdaHandler { public Stream myHandler(Stream inputStream) { //function logic } } }

Lambda 関数ハンドラ署名の形式は、Assembly::Namespace.ClassName::MethodName であることが必要です。詳細については、「ハンドラー署名」を参照してください。

シリアライザーの使用

Stream オブジェクト以外の入出力タイプを使用するすべての Lambda 関数には、アプリケーションにシリアル化ライブラリを追加する必要があります。これは以下の方法でできます。

  • Json.NET を使用します。Lambda は JSON.NET を NuGet パッケージとして使用する JSON シリアライザーの実装を提供します。

  • ILambdaSerializer インターフェイスの実装によって独自のシリアル化ライブラリを作成します。これは、Amazon.Lambda.Core ライブラリの一部として入手できます。インターフェイスは 2 つのメソッドを定義します。

    • T Deserialize<T>(Stream requestStream);

      このメソッドを実装して、Invoke API から Lambda 関数ハンドラーに渡されるオブジェクトにリクエストのペイロードを逆シリアル化することができます。

    • T Serialize<T>(T response, Stream responseStream);

      このメソッドを実装して、Lambda 関数ハンドラーから返される結果を Invoke API から返されたレスポンスペイロードにシリアル化することができます。

任意のシリアライザーを使用するため、project.json ファイルに依存関係として追加します。

Copy
{ "version": "1.0.0-*", "buildOptions": { }, "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" }, "Newtonsoft.Json": "9.0.1", "Amazon.Lambda.Core": "1.0.0*", "Amazon.Lambda.Serialization.Json": "1.0.0", "Amazon.Lambda.Tools" : { "type" :"build", "version":"0.9.0-preview1" } }, "tools": { "Amazon.Lambda.Tools" : "0.9.0-preview1" }, "frameworks": { "netcoreapp1.0": { "imports": "dnxcore50" } } }

次に、それを AssemblyInfo.cs ファイルに追加します。たとえば、デフォルトの Json.NET シリアライザーを使用している場合は、以下を追加します。

Copy
[assembly:LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

注記

メソッドレベルでカスタムシリアル化属性を定義することができます。それにより、アセンブリレベルで指定されたデフォルトのシリアライザーが上書きされます。詳細については、「標準のデータ型の処理」を参照してください。

デプロイパッケージの作成

デプロイパッケージを作成するには、コマンドプロンプトを開いて、project.json ファイルを含むフォルダに移動し、次のコマンドを実行します。

  • dotnet restore は、開発プロセス中に変更された可能性があるプロジェクトの依存性への参照を復元します。

  • dotnet publish は、アプリケーションをコンパイルし、ソースコードと任意の依存関係をフォルダにパッケージングします。コマンドウィンドウの出力は、フォルダが作成された場所を示します。(例:

    Copy
    publish: Published to C:\Users\yourname\project-folder\bin\debug\netcoreapp1.1\publish

    このフォルダの内容はアプリケーションを表し、少なくとも次のようになります。

    application-name.deps.json

    application-name.dll

    application-name.pdb

    application-name.runtimeconfig.json

フォルダーそのものではなく、フォルダーの内容を zip 圧縮します。これがデプロイパッケージです。