Help us understand the problem. What is going on with this article?

macOS から .NET Core 2.1 の AWS Lambda 関数を作成する

More than 1 year has passed since last update.

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 ライブラリ ソリューションの作成し、プロジェクトファイルを編集

  1. .NET Core ライブラリのソリューションを作成します(Ex: DotNetCoreLambda.sln
  2. 依存ライブラリを追加
    • exec: dotnet add ./DotNetCoreLambda/DotNetCoreLambda.csproj package Amazon.Lambda.Serialization.Json
    • exec: dotnet add ./DotNetCoreLambda/DotNetCoreLambda.csproj package Amazon.Lambda.Core
  3. .csproj(例: DotNetCoreLambda/DotNetCoreLambda.csproj) ファイルの PropertyGroupGenerateRuntimeConfigurationFiles を追加します
    • ついでに AWSProjectTypeLambda にしておくと 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/*

4. 動作検証

$ 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away