AWS Lambda関数をC#で書いて実行するまで


はじめに

みなさん、AWS Lambda 使っていますか?

私は、始めたばかりです。

自分は C# で書きたいのでネットで情報を集めてみたのですが、ほとんどないですね。

サーバーレスアーキテクチャがまだメジャーになっていないのに、その中でマイナーな C# ですからね。

まあ、予想通り。

なので、AWS Lambda を C# で使う場合に、最初の一歩を踏み出せるようご紹介してみます。

なお、環境は以下の通りです。

  • Windows 10
  • Visual Studio Community 2017
  • AWS Toolkit for Visual Studio
  • .NET Core 2.1

AWS で IAM ユーザーを作成する

Lambda の最初の壁は、AWS の IAM ユーザーを作成しなければいけないところでしょうね。

ちょっとした関数を実行したいだけなのに、インフラに関わる部分に対処しなければいけないので。

まず、AWS へログインして IAM メニューを表示します。

そして、IAM ユーザーとして「lambda_user」を「プログラムによるアクセス」で追加します。

f:id:fnyablog:20181018173329p:plain:w480

ポリシーは既存の「AWSLambdaFullAccess」を設定します。

f:id:fnyablog:20181018173443p:plain:w480

確認後、ユーザーを作成します。

f:id:fnyablog:20181018173606p:plain:w480

「アクセスキー ID」 と「シークレットアクセスキー」を控えます。

このキーは漏洩すると大変なので厳重に管理してください。

f:id:fnyablog:20181018183209p:plain:w480

また、Lambda 関数を実行するためのロールも作成が必要です。

ロールを作成し、ロールを使用するサービスに Lambda を指定します。

f:id:fnyablog:20181018174845p:plain:w480

ポリシーに既存の「CloudWatchFullAccess」を設定します。

f:id:fnyablog:20181018174955p:plain:w480

ロール名とロールの説明を入力後、ロールを作成します。

f:id:fnyablog:20181018175146p:plain:w480

これで AWS の設定は終了です。

AWS Toolkit for Visual Studio のインストール

下記サイトより、AWS Toolkit for Visual Studio をダウンロードしてインストールします。

AWS Toolkit for Visual Studio | AWS

なお、Visual Studio 2017 では .NET Core 2.1 がインストールされているので、.NET Core 2.1 のインストールは不要です。

AWS Toolkit for Visual Studio をインストール後に、Visual Studio を起動すると Lambda の設定画面が表示されるので、「アクセスキー ID」 と「シークレットアクセスキー」を入力して保存します。

f:id:fnyablog:20181018174215p:plain:w480

Lambda 関数の作成

新規プロジェクトの作成で、「AWS Lambda Project (.NET Core)」テンプレートを選択します。

f:id:fnyablog:20181018174417p:plain:w480

Blueprint という Lambda 関数のひな形から「Empty Function」を選択して関数を作成します。

f:id:fnyablog:20181018174505p:plain:w480

今回作成する Lambda 関数は、デフォルトのものにちょっと手を加えてみます。

Cloud Watch Log に値を出力後、値をリターンしています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda1
{
    public class Function
    {
        
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public string FunctionHandler(object input, ILambdaContext context)
        {
            var hello = "Hello, Lambda!!";

            Console.WriteLine(hello);

            return hello;
        }
    }
}

Lamda 関数の実行

Lambda 関数を実行するには、Lambda 関数を AWS にアップロードする必要があります。

Visual Studio でプロジェクトを右クリックして表示される「Publish to AWS Lamba」をクリックします。

f:id:fnyablog:20181018175631p:plain:w320

「Function Name」に適当な内容を入力します。

f:id:fnyablog:20181018175810p:plain:w480

「Role Name」に先ほど作成した「MyLambdaRole」を指定しアップロードします。

f:id:fnyablog:20181018175908p:plain:w480

アップロードが完了すると、Lambda 関数の実行画面が表示されるので、インプットに「test」と入力してテストを実行すると「Hello,Lambda!!」と表示されるので問題ないことが分かります。

f:id:fnyablog:20181018180110p:plain:w480

なお、インプットに JSON の値を入力するとエラーが発生しますが、これについては別記事を作成したのでそちらをご参照ください。

www.aruse.net

また、Cloud Watch Log を確認すると、以下のようにログが出力されていたのでこちらも問題ありませんね。

2018-10-18 16:46:41: START RequestId: f3e0ec8c-d2a9-11e8-bb9a-710aeadbf1ec Version: $LATEST
2018-10-18 16:46:41: Hello, Lambda!!
2018-10-18 16:46:41: END RequestId: f3e0ec8c-d2a9-11e8-bb9a-710aeadbf1ec

おわりに

C# で Lamda 関数を書いて実行するまでをご紹介してみました。

実際の Lamda 関数は、他の AWS サービスと連携することになると思いますが、基本を押さえておくことで習得がしやすくなるのではないかと思います。

参考サイト