Developer's Blog

C# で AWS Lambda function を作る!

 

こんにちは。

ウェブ共同開発部 辻本です。

昨年末に AWS Lambda が C# に対応しました。

Windows 環境だと簡単に Lambda function が作れるということなので、使ってみました。

はじめに

まず、今回作業を行う環境は下記のとおりです。

  • Windows 10
  • Visual Studio community 2015

Visual Studio community について、 現在最新のバージョンとして 2017 が公開されていますが、AWS Toolkit for Visual Studio がまだ 2017 に対応していないため、 2015 を使用します。

また、事前に使用する IAM ユーザのアクセスキーを準備しておく必要があります。

では、始めて行きましょう。

1. AWS Toolkit for Visual Studio インストール

Visual Studio で AWS を使うのであれば、必要になる Toolkit です。

AWS からインストーラをダウンロードして、インストールします。

URL : https://aws.amazon.com/jp/visualstudio/

2. .NET Core SDK インストール

Lambda function を作るうえで、必要になる .NET Core SDK を Microsoft のページからインストーラをダウンロードし、インストールします。

尚、「NET Core tools Preview 2 for Visual Studio 2015」も必要になるのであわせてインストールします。

URL : https://www.microsoft.com/net/download/core

3. AWS Lambda Project を作成

事前準備完了!

Visual Studio のメニューから新しいプロジェクトを作成します。

画面左メニューに表示されている 「AWS Lambda」 を選択し、一覧から「AWS Lambda Project (.NET Core)」を作成します。

※ 名前、場所、ソリューション名には好きな値を入力します。

次に表示された画面で、「Empty Function」を選択し、 「Finish」ボタンを押下します。

4. コーディング

プロジェクト作成直後だと、そのままでも動作する Lambda function のサンプルコードが用意されています。

ですが、それだと少し味気ないので、Weather Hacks (http://weather.livedoor.com/weather_hacks/) の REST API からデータを取得し、今日の大阪の天気を表示する Lambda function を作成しようと思います。

コーディング前に、JSON をパースする Newtonsoft をインストールします。

ソリューションエクスプローラで右クリックメニューから 「NuGetパッケージの管理」を選択します。

表示された画面で「参照」タブで、「Newtonsoft.Json」を選択し、インストールします。

準備ができたのでコーディングします。

【Function.cs】

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using System.Net.Http;
using Newtonsoft.Json.Linq;

using Amazon.Lambda.Core;
using Amazon.Lambda.Serialization;

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

namespace AWSLambdaCSWeather
{
    public class Function
    {
        
        /// <summary>
        /// 今日の大阪の天気を取得
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public string FunctionHandler(ILambdaContext context)
        {
            string url = "http://weather.livedoor.com/forecast/webservice/json/v1?city=270000";

            string json = new HttpClient().GetStringAsync(url).Result;
            JObject jobj = JObject.Parse(json);

            string todayWeather = (string)((jobj["forecasts"][0]["telop"] as JValue).Value);
            return todayWeather;
        }
    }
}

 

5. AWS Lambda へアップロードする

コーディングができたら、AWS Lambda へアップロードします。

ソリューションエクスプローラ上でプロジェクトを右クリックし、「Publich to AWS Lambda…」を選択します。

AWS へ Lambda function をアップロードする際に認証情報が必要になります。

「Account profile to use」横にあるアイコンを選択し、表示された入力フォームで事前に準備していたアクセスキー(Access Key ID と Secret Access Key)を入力します。

あとはリージョンと好きなファンクション名を入力します。

次にLambda function の詳細設定画面が表示されます。

ここでは Lambda 用の IAM Role の設定ができます。

事前に準備している場合はその IAM Role を設定しても問題ありませんが、準備していない場合はこの画面から IAM Role の作成が可能です。

新たにスタンダードな設定である「New role based on AWS managed policy: AWSLambdaRole」を作成します。

他項目はデフォルト値のまま進みます。

6. Amazon API Gateway を作成する

AWS へアップロード後、動作確認することができますが、今回は Amazon API Gateway を利用し、作成した Lambda function を実行する API を作成しました。

動作確認のため、ウェブブラウザから呼び出してみます。

無事に表示されました。

もちろん、 curl コマンドでも呼び出すことができます。

 

$ curl https://slcv6cd4e2.execute-api.ap-northeast-1.amazonaws.com/Weather
 "雨のち曇"

 

まとめ

という感じで、簡単に Lambda function を作成することができました。

今回は Windows で行いましたが、macOS については現在 AWS Toolkit for Visual Studio がありませんので、ここまで簡単に、とまではいきません(一応頑張れば、macOS でも作れるらしい)。

AWS Lambda は既に Java など様々な言語に対応している中で、今回新たに C# が追加されました。

今後もどんどん対応言語が増えていくと思いますので、皆さんが得意な言語が AWS Lambda で使えるようになった際、一度試してみてはいかがでしょうか。

 

 

 

フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!

フェンリルの Facebook ページでは、最新トピックをお知らせしています。よろしければいいね!してください!

Copyright © 2019 Fenrir Inc. All rights reserved.