初心者エンジニアが『Hello, World!をサーバーレスで実行する』公式チュートリアルやってみた。

# はじめに
今回はAWS公式から出ている、『「Hello, World!」をサーバーレスで実行する』というチュートリアルをやっていきます。
この記事はAWSアカウントを作り終わってることが前提条件になりますので、下記URLから作成をお願いします。

https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/

### 自分のスペック
新卒でエンジニアになったが、Pythonに関しては簡単なものを読解、コーディングするぐらいの知識しかないです。
ほとんど初心者な人が今回はやっていきます。

### 環境
* Windows10
* Chrome

# 実行していく
### 関数作成までの手順
まず、AWSに入ってもらって左上の検索ボックスで「lambda」と検索して**Lambda**をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/4a9de036-5538-2b19-d56f-e5487f252901.png)

左側のメニューから関数を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/766c6392-cbf5-5a7e-e8a6-35068d15f9d8.png)

このような画面になるので、右上の「関数の作成」をクリック
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/f249770a-18fc-b58e-9de2-6e5e94450675.png)

真ん中の設計図の使用、検索ボックスで「hello」と検索する。
今回はPythonでやるので、Python3.7の方を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/97574db0-659c-faaf-33da-bfe91b6e49c1.png)

一から作る場合はPython3.9でarm64にすると早くて安いです。

**※今回はチュートリアル通りに進めていくので、名前も同じにします。**
#### 基本的な情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/004db71c-908a-02cc-573a-08016643b35a.png)
* 関数名：hello-world-python
* 実行ロール：```AWS ポリシーテンプレートから新しいロールを作成```
* ロール名：lambda_basic_execution
* ポリシーテンプレート - オプション：選択なし

一番下まで行き、関数の作成を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/4b14a9d0-c1e4-0461-4002-7e0de6944d11.png)
この画面になれば、関数の完成です！！！

### テスト実行
#### テストイベントの作成
テストの項目に入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/f807e833-44e5-3270-1334-6e52c376eed3.png)
テストイベントを新規で作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/0e3359c9-b412-87d9-58b6-956862b2deed.png)
* イベント名：HelloWorldEvent
* イベント共有の設定：プライベート
* テンプレート - オプション：hello-world
```json:イベント JSON
{
  "key1": "hello, world!",
  "key2": "value2",
  "key3": "value3"
}
```
```key1```の初期値は```value1```なので今回は```hello, world!```に書き換えてます。

設定し終わったら、保存ボタンを押して保存する。

#### lambda_function.pyの確認
コードは初めのままです。特にいじる必要はないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/e6b23bd3-27d9-2afe-b6ea-2ba4ad40fa3d.png)
```python:lambda_function.py
import json

print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])
    print("value2 = " + event['key2'])
    print("value3 = " + event['key3'])
    return event['key1']  # 返り値でkey1の結果だけを送ります。
```
上部のTestボタンを押すと実行結果が出ます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/990b32c8-33b6-c864-8b03-a4573b02eb12.png)
```Response```にしっかり```hello, world!```と結果が出ました。
これで、テスト実行が完了です。

### ちょっと遊んでみる
```key2```と```key3```を使ってみたいと思います。

#### テストイベントの書き換え
まずテストイベントを書き換えます。
「保存されたイベントを編集」から作ったイベントを編集できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/d53d1e2a-54ef-5ca8-4db0-ebc9aa32ce74.png)
```key2```と```key3```はこのように書き換えました。
```json:イベント JSON
{
  "key1": "hello, world!",
  "key2": "python",
  "key3": "qiita"
}
```

#### コードソースの書き換え
次はコードソースを書き換えます。
書き換える部分は11行目の```return```の部分になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/d1f5ab62-a29a-1c69-9b2b-d216a2152ad1.png)
```python:lambda_function.py
import json

print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])
    print("value2 = " + event['key2'])
    print("value3 = " + event['key3'])
    return event['key1'], event['key2'], event['key1'], event['key3']# この行を書き換えた
    #raise Exception('Something went wrong')
```
結果がわかりやすいように、適当な感じで並べてみました。

コードソースを書き換えたら必ず**Deployボタン**を押してください。
画像のように、**Changes not deployed**になっている時は、まだ変更が適用されてないので気を付けてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/e213d3bd-194e-529b-e545-0dfebfa95abf.png)

#### 実行してみる
```Response```にしっかり結果が出ました。
成功したので良かったです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629918/861cce8a-4410-54e0-fb54-afb931b814db.png)

# 最後に
今回は公式のチュートリアルで遊んでみましたが、結構簡単にLambdaが使えることがわかりましたね。
公式の説明は古いのでちょっと違うとこもありましたが、意外と大丈夫です。

次回は実際に使っていきます。

# 参考
https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/