Lambda使ってみたいけど、まだ使ったことがない人へ

# はじめに

AWS、サーバーレス、Lambdaなど名前は聞くが難しそうと思っている方も多いのではないでしょうか？
今回はサーバレスの何がいいのか、どんな時に使えるのか、どう使うのかなどにフォーカスして紹介できたらと思います。

# サーバーレスの特徴

一言で表すと以下のような感じです。

<font color="Red">**コストを抑え、余計なことを考えずにコードを書いて実行できる**</font>

#### インフラストラクチャの管理不要

サーバーレスでは、クラウドプロバイダーがインフラのセットアップ、保守、スケーリングをすべて管理します。
基本的な保守運用やスケーリングを自動でやってくれると思っていただければ大丈夫です！

#### コスト効率
サーバーレスは「ペイ・アズ・ユー・ゴー」モデルを採用しているため、使用した分だけ料金が発生します。
どれくらいコストがかかるかざっくり案内します！
毎月1,500,000回のリクエストがあり、128 MBのメモリを使用して0.5秒で実行されるLambda関数を使用した場合、概算で11円です。

つまり、<font color="Red">**簡単な開発やテストをする分にはほとんど料金が発生しません。**</font>

:::note warn

注意
他のAWSリソースを呼び出すとリソースに応じて料金が発生します。
:::


# 特徴はわかったが、いつどのように使うのか

サーバーレスの特徴を理解したところで、具体的にどのような場面で使えるのか、どのように使うのか解説します。

## どのような場面で使えるのか

### 1. イベント駆動型の処理

サーバーレスは**イベント駆動型のアーキテクチャ**に適しています。
特定のイベント（ファイルのアップロード、データベースの更新、ユーザーアクションなど）がトリガーとなり、Lambda関数が自動的に実行されます。

例: S3にファイルがアップロードされたときに、そのファイルを処理して別の場所に保存する。

### 2. バックエンド処理の分離

バックエンドの処理を分離することで、メインアプリケーションのコードベースをシンプルに保ち、保守性を向上させることができます。

例: データのバッチ処理や定期的なクリーニングタスク。

### 3. 他のAWSリソースとの統合やテスト実行
**他のAWSリソースとの統合やテスト実行**に非常に優れています。

例： S3バケットへのファイルアップロード、DynamoDBテーブルへのデータ挿入、SNSメッセージの受信など

### 4. 短期間のタスクや一時的な作業

短期間で終了するタスクや、**一時的な作業にはサーバーレスが最適**です。サーバーのセットアップや管理が不要で、迅速にデプロイできます。

例: 一時的なデータ変換スクリプトの実行。

### 5. 低コストでの運用

使用した分だけ課金されるため、アイドルタイムが多い場合や使用頻度が低い場合でもコストを最小限に抑えられます。

例: 定期的なレポート生成やメール通知。


## Lambdaの使い方

使い方について理解を深めていきましょう。設定は簡単です。
<font color="Red">**初めて使う方必見です！**</font>

:::note info
設定する項目
関数名、使用するプログラミング言語
:::

1. AWSマネジメントコンソールにログインします。
2. サービスメニューから「Lambda」を選択します。
3. 「関数の作成」ボタンをクリックします。
4. 「一から作成」を選択し、関数名を入力します（例：TestFunction）。
5. ランタイム（使用するプログラミング言語）を選択します。例えば、Python、Node.js、Javaなどから選べます。
6. 「関数の作成」ボタンをクリックして、関数を作成します。

![スクリーンショット 2024-07-05 11.16.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/40b587f9-94fa-170d-a6f6-fe279d741c9d.png)

![スクリーンショット 2024-07-05 11.20.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/f2775a84-9e0d-51b5-3ee2-71b979a280ad.png)

![スクリーンショット 2024-07-05 11.27.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/3e9f3586-f9a4-058b-0090-aa0e14a9947b.png)

**初期設定は以上です！**
Lambda関数の作成が完了すると、以下の画面が表示されます。
**あとはソースコードを書くだけです！**
以下のようなコード書いて、「TEST」を押してみましょう。

```Python
import json

def lambda_handler(event, context):
    # TODO implement
    print("HelloWorld!!")
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

```

![スクリーンショット 2024-07-05 11.48.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/5602f341-ddd8-4070-a88d-bb0d4e5c2bea.png)

Lambda関数が正しく動作するかどうかを確認するために、テストイベントを設定します。これにより、関数の動作をシミュレートし、期待通りの結果が得られるかを検証することができます。以下の手順でテストイベントを設定します。

### テストイベントの設定

**1. 新しいイベントを作成**
テストイベントの設定画面で、「新しいテストイベントの作成」オプションを選択します。

**2. イベント名の入力**
「イベント名」フィールドに、わかりやすい名前を入力します。例えば「TestEvent1」など、テスト内容を識別しやすい名前を付けると良いでしょう。

**3. イベントJSONの編集**
イベントの内容をJSON形式で記述します。以下はサンプルのJSONデータです。

```
{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}
```

**4. 保存ボタンをクリック**
入力が完了したら、画面下部にある「保存」ボタンをクリックします。これでテストイベントが作成され、保存されます。

![スクリーンショット 2024-07-05 11.51.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/0ec866c5-6f06-f6d9-d582-fe8806db1595.png)

### デプロイボタンについて

Lambda関数のコードを変更した後、実際にその変更を適用するためには「デプロイ」ボタンをクリックする必要があります。
デプロイボタンを使用することで、関数の最新バージョンがAWS上で実行可能になります。

デプロイが成功すると、画面に「デプロイが成功しました」というメッセージが表示されます。これで、Lambda関数の最新バージョンが実行可能になりました。

:::note info
ポイント
Lambda関数を編集した後、デプロイを忘れないようにするために、AWSマネジメントコンソールでは「Changes not deployed」（変更がデプロイされていません）という通知が表示されます。
:::

![スクリーンショット 2024-07-05 11.58.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/1e1ae52b-5e26-d45b-3609-7f07fce91ba9.png)

デプロイ完了後、「Test」ボタンを押すことで動作確認することができます。
Responseと入力した「HelloWorld!!」が表示されていることがわかります。

![スクリーンショット 2024-07-05 12.06.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/eb0b69e4-66b4-d9a0-0126-4395474b6d3d.png)

### CloudWatchログの確認

![スクリーンショット 2024-07-05 16.44.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/a7019fb8-dc32-8e44-e47d-c7a7bae83c74.png)

CloudWatchの応用的な使い方は以下の記事にまとめています。

https://qiita.com/kazuya-sugawara/items/a0ce954770dbdb3862fb

# まとめ

サーバーレスの使う場面、AWS Lambdaの初期設定と基本的な操作方法について解説しました。
Lambdaを使うことで、サーバー管理の煩雑さから解放され、アプリケーションのロジックに集中することができます。ぜひ一度試してみてください。

また、サーバーレスのベストプラクティスについて以下の記事にまとめているのでぜひ参考にしてみてください。

https://qiita.com/kazuya-sugawara/items/e18f6a427622c5e5bf90