Windows 版の Visual Studio では AWS Toolkit for Visual Studio を使ってサクッと Lambda 関数を作成できます。
ここでは macOS 上で Visual Studio for mac にて Lambda 関数をサクッと作る手順をメモ。とはいえ、とても簡単です。
環境
- macOS Sierra 10.12.6
- Visual Studio for Mac 7.5.1
- dotnet 2.1.403
1. .NET Core ライブラリ ソリューションの作成し、プロジェクトファイルを編集
- .NET Core ライブラリのソリューションを作成します(Ex: DotNetCoreLambda.sln)
- 依存ライブラリを追加
- exec: dotnet add ./DotNetCoreLambda/DotNetCoreLambda.csproj package Amazon.Lambda.Serialization.Json
- exec: dotnet add ./DotNetCoreLambda/DotNetCoreLambda.csproj package Amazon.Lambda.Core
- .csproj(例: 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>
2. Lambda の実装コードを作成
一例として 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();
}
}
}
3. Build & Deploy
以下のような手順にて作成した .zip パッケージファイルをデプロイ
dotnet publish -c Release
zip -j ~/Desktop/output.zip ./DotNetCoreLambda/bin/Release/netcoreapp2.1/publish/*
Lambda 関数のハンドラ名は DotNetCoreLambda::DotNetCoreLambda.Function::FunctionHandler となります
4. 動作検証
$ aws lambda invoke --function-name DotNetCoreLambda --payload '"abcdABCD1234"' /tmp/out && echo $(cat /tmp/out)
{
"StatusCode": 200,
"ExecutedVersion": "$LATEST"
}
"ABCDABCD1234"
リポジトリ
ご自由にどうぞ
Appendix1: C# から外部プロセスを呼び出し、標準出力を得る
以下のような形で実現できる。
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
"
Pinned Articles
About
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです
Tags
JavaScript
PowerShell
kibana
elasticsearch
fluentd
nginx
イベント
五十嵐裕美
村川梨衣
logrotate
IoT
Scala
Java
C言語
iputils
ICMP
WUG
mastodon
Swift
AWS
Clock
Windows
アーキテクチャ
PoEAA
iOS
DeviceFarm
プログラミング言語
OS
StepFunctions
Lambda
Serverless
terraform
ポエム
RHEL
ネットワーク
GraphQL
CloudWatch
Linux
Coreutils
network
nc
telnet
LinuxKernel
fpinscala
ELB
IAM
AppSync
EFS
Gradle
english