AWS Lambdaを単体で動かしてみた

## 参考にしたハンズオン
公式で公開されている以下のハンズオンを見ながら自分でやってみました。

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-confirmation_422.html

このハンズオンのゴールは以下の構成ですが、本記事ではAWS Lambdaを単体で動かしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/a0ef753a-a545-9764-d3df-99f68a0ec025.png)

## やってみる
マネジメントコンソールにアクセスし、Lambdaのページにアクセスします。
「関数の作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/c905d830-ab7f-25c1-710e-f284fca72828.png)

関数は一から作成します。
関数名を入力し、ランタイムにPythonを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/cc6dd199-d563-51c4-683c-a10ba73b3afa.png)

「デフォルトの実行ロールの変更」を開くと、ロールを作るかどうかを設定できます。
「基本的なLambdaアクセス権限で新しいロールを作成」を選択し、CloudWatch Logsにログをアップロードする権限を持つロールを作成します。
「関数の作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/f5749a9b-da55-187c-d856-66fdad731e58.png)

Lambda関数が作成されました。
作成された関数は以下です。
「Hello from Lambda!」を出力するだけの関数です。
```js
export const handler = async (event) => {
  // TODO implement
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
  };
  return response;
};
```



この関数の設定をいじっていきます。
「設定」タブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/17fc5ee3-2737-4ea0-2568-066738be97c4.png)

「編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/69624e15-d88a-344d-3c5b-7b967c022c7d.png)

Lambda関数に割り当てるメモリをデフォルトの128MBから256MBに変更します。
タイムアウトはデフォルトの3秒から10秒にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/54a94059-11c7-3a7b-e7c1-815ad70f3368.png)

下の方までスクロールすると、自動的に作成されたロールを確認できます。
赤枠の「ロールを表示」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/bcb2a504-9b03-c2ca-411a-abac468591dc.png)

別タブでロールの画面が開きました。
赤枠の+をクリックして詳細を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/d0c1dadb-5a67-f348-a769-33bd45d4bb06.png)

Lambda関数がCloudWatch Logsにログを出力するために必要な権限が設定されています。
5~7行目は新しいロググループを作成するための権限、10~16行目は新しいログストリームの作成とログイベントを書き込む権限を許可しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/b2322fe9-f9cc-61f8-9f64-c26a34f73555.png)

Lambdaのページに戻って「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/86a91978-6443-2bbc-8be5-05a30874895e.png)

Lambda関数の設定が保存されました。
作成した関数を動かしてみます。
「テスト」タブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/31d54772-ed98-a4e2-dd0f-69a1a05a1902.png)

イベント名にtestと入力し、「保存」をクリックします。
他の設定はデフォルトで行きます。
「テスト」をクリックしてテストを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/57e4682b-920f-d4a3-54e7-070a871c1756.png)

一瞬でテストが終わりました。
「詳細」をクリックしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/d7e028d3-fb90-299f-21c9-305b12931e84.png)

Hello from Lambda!が出力されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/ee733a13-add0-a830-2a00-249c4dbb901a.png)

次はこのLambda関数を修正します。
「コード」タブをクリックし、関数を修正後、「Deploy」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/b7969eb6-2588-7645-1f11-d71daf68bd69.png)

関数を以下のように修正します。
関数に渡されたデータをロギングするように修正しています。
```js
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    
    logger.info(event)    
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
```

早速関数をテストしてみます。
「テスト」タブをクリックし、「保存されたイベントを編集」を選択し、先ほど作成した「test」イベントを選択して「テスト」をクリックします。
下側のイベントJSON欄に記載されているキーとバリューがロギングされれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/072e2a14-51ea-ed81-0d2f-7d41fc378330.png)

成功したみたいです。詳細を見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/5ccf9ae8-d861-e30f-17f9-c9c510daddc0.png)

下のログ出力部分を見ると、INFOの欄にキーとバリューがロギングされていることが分かります。
「モニタリング」タブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/1d0a1c21-e9b4-452f-809d-79ce4009d54e.png)

「CloudWatchログを表示」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/40fb8942-ca72-1692-3bad-3d0feeebd021.png)

ログができています。クリックして詳細を見てみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/240d4e17-927b-8e0d-bdb9-2170c0be16c3.png)

赤枠の箇所に、関数に渡されたキーとバリューが入っています。
青枠の箇所には、関数の実行時間などがロギングされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/9a8016cc-b7e4-c987-3f44-4d93f7979142.png)

成功ですね！

## おわりに
今回はLambdaを単体で動かしてみました。
このハンズオンにはまだまだ続きがありますので、別記事で残します。