C#で AWS Lambda ～ 一番基礎的な使い方


#はじめに
※トライアンドエラーで見つけたやり方なので、信じるか信じないかは(ry
####やること
- [x] 1. Visual StudioからAWSツールを使ってLambdaにソースを入れる
- [ ] 2. Lambdaにソースを入れる前に、ローカルでデバッグする（次回）

#準備
###VisualStudioのバージョンについて
VS2015はフレームワークが.NET Core2.0対応していないし、Nugetからパッケージを利用するときにバージョンがどうしたとか、何かと面倒だったのでやめた。
VS2017でやる。Community Editionでも問題なし
###AWSSDKをインストールする
[AWSSDK for .NET](https://aws.amazon.com/jp/sdk-for-net/)を入れて、IAMで作成された認証を設定しておく
IAMはLambda系の権限を追加しておく

#とりあえずVSで作ってLambdaで動く事を確認する
##ソリューションを作っておく
理由はよくわからないが、先にソリューションファイルを作っておいて、そこにプロジェクトを追加する感じで進める
（Nugetがらみの何かでエラーが出る感じなので）
![00Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/18fd13c8-5303-ca8f-02d1-6bb94115c950.png)
##Lambdaプロジェクトを新規追加
ソリューションから新規プロジェクトを追加
*AWS Lambda Project*を選ぶます
![01Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/2c9ca99e-e3de-2124-a948-6fec13fcc2fb.png)
なにやらウィザードが出てくるので*Empty Function*を選ぶます
![02Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/426f4131-7eed-f63f-0b79-a1654cc397ba.png)
できあがり
![04Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/4ce082eb-017d-4d82-b36d-9cfb1bdaf733.png)
勝手にこんなコードで作られてます。↓

```csharp:Function.cs
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(string input, ILambdaContext context)
        {
            return input?.ToUpper();
        }
    }
}
```
入力パラメータ*input*を大文字変換して返す感じのソースですな
で
##LambdaにPublish
プロジェクトを右クリして、*Publish to AWS Lambda*を選択
![05Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/61d6abd1-b1a8-d47e-f3b0-32e88b2fd7c3.png)
Function 適当なNameを入れて、次の画面へ
![06Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/92974641-b748-8314-a914-80e3970b26e1.png)
*Account profile to use:*にLambdaにPublishするための適切な権限がなければ
何やらエラーが出て進みません。→IAMで適切なロールをつけるナリ
*Role Name:*にはAWS管理コンソール等で登録されている**Lambdaソースの権限**を選択する
IAMは２種類使うことになります。
・VS側に設定する権限：ソースをPublishするまでの権限です
・Lambdaが実行される時に使う権限：ソースをPublishした後、Lambda側で使う権限
![07Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/744d513e-4bf1-e7ef-c880-ecb939a4632f.png)
Publishが成功すると…
呼び名はわからないが、こんな感じ↓の画面が表示されます
AWSが作ったVS用簡易テストツールだと思われる
![08Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/138a30be-00af-d65d-8f5b-ca4b1f97a901.png)
Invokeが実行ボタン
左側の入力ボックスは背景色灰色になっているのでわかりにくいが、入力できます。
入力パラメータがあればここに入力します。
今回は入力パラメータがStringで、戻り値が大文字変換されたものなので…
**hogehoge**を入力パラメータとして、Invokeを押す
![09Qiita.PNG](https://qiita-image-store.s3.amazonaws.com/0/185989/65fea9fc-803b-a056-9b79-48270a7533b3.png)
*Response*のところに入力パラメータが大文字変換された*"HOGEHOGE"*が出力されてますね。
ちなみに、画面下部の*Log output*にログを表示したい場合は

```csharp
context.Logger.LogLine("ログてす");
```
こんな感じでやればOK

#で
上記の手順量産化する場合は、
ソースを直す→LambdaへPublish→テストを実行
もちろんデバッグはできない。
context.Logger.LogLineでログをとればよいのだが、やはりデバッグできたほうが効率が良い

次はこのプロジェクトをローカル環境で実行できるようにします
もちろんデバッグもできます
それでは次回 ﾉｼ
→　[C#でAWS Lambda ～ デバッグ方法](https://qiita.com/akihiyo/private/8819aa4d44e1797b63b9)