Windows 版の Visual Studio では AWS Toolkit for Visual Studio を使ってサクッと Lambda 関数を作成できます。
ここでは macOS 上で Visual Studio for mac にて Lambda 関数をサクッと作る手順をメモ。とはいえ、とても簡単です。
DotNetCoreLambda.sln
)dotnet add ./DotNetCoreLambda/DotNetCoreLambda.csproj package Amazon.Lambda.Serialization.Json
dotnet add ./DotNetCoreLambda/DotNetCoreLambda.csproj package Amazon.Lambda.Core
DotNetCoreLambda/DotNetCoreLambda.csproj
) ファイルの PropertyGroup
に GenerateRuntimeConfigurationFiles
を追加しますAWSProjectType
も Lambda
にしておくと Windows の Visual Studio で開くときに良い<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="1.0.0" /> <PackageReference Include="Amazon.Lambda.Serialization.Json" Version="1.4.0" /> </ItemGroup> </Project>
一例として string を受け取り、Upper Case にして返す素敵な Lambad 関数を作ります。これを例えば Function.cs
という名前で作成。
using Amazon.Lambda.Core; [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] namespace DotNetCoreLambda { public class Function { public string FunctionHandler(string input, ILambdaContext context) { return input?.ToUpper(); } } }
以下のような手順にて作成した .zip パッケージファイルをデプロイ
dotnet publish -c Release zip -j ~/Desktop/output.zip ./DotNetCoreLambda/bin/Release/netcoreapp2.1/publish/*
Lambda 関数のハンドラ名は DotNetCoreLambda::DotNetCoreLambda.Function::FunctionHandler
となります
$ aws lambda invoke --function-name DotNetCoreLambda --payload '"abcdABCD1234"' /tmp/out && echo $(cat /tmp/out) { "StatusCode": 200, "ExecutedVersion": "$LATEST" } "ABCDABCD1234"
ご自由にどうぞ
https://github.com/53ningen/DotNetCoreLambda.git
以下のような形で実現できる。
using System.Diagnostics; using Amazon.Lambda.Core; [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] namespace DotNetCoreLambda { public class Function { public string FunctionHandler(string input, ILambdaContext context) { var app = new ProcessStartInfo { FileName = "echo", Arguments = "hoge fuga", UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardInput = false, CreateNoWindow = false, }; var process = Process.Start(app); string results = process.StandardOutput.ReadToEnd(); return results; } } }
この Lambda 関数をデプロイして実行すると以下のような戻り値が得られる
"hoge fuga\n"