Lambdaのチュートリアルやってみた！(チュートリアル: スケジュールされたイベントで AWS Lambda を使用する + Lambdaのエラーをメールでお知らせ)

# はじめに

題名通りでやったことをここに残したのみです！:sheep:

ちなみに自分的な感じで題名を言いなおすと
『**lambdaを定期的に実行。エラーが起きたらメールでお知らせするをやりました！ヽ(´▽｀)/**』
です！

ちなみに参考は以下です!
https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-tutorial.html

<font color="green">あとざっくり言うと、
●Lambdaで定期実行するテンプレート使って関数作成(この時点でLambda以外のサービスと繋げてくれる)
●送信するようの何か用意しておいて
●cloudwatchでアラート作成して(Lambdaのエラーでアラート発火)その送信をさっき作った何かに紐付けて
●定期実行処理でエラー発生したらアラーム発火、用意していた何か(今回メール)に送信
みたいな流れです。(うまく言えませんでした:disappointed_relieved:)</font>

これよりもっとチョード級の優しいチュートリアルの記事もあるのでもしハードル高そうって方は以下みて、
そんなことないかも？？と思っていただけたらと(✿´ ꒳ ` )
https://qiita.com/sachiko-kame/items/fd62421533323340789f

あ！ログインしているていでお話します。

ではさっそくヽ(´▽｀)/

いそいで焦っても迷いすぎて何も出来ない私は本当に少しずつ少しずつ気長にをモットーに(*´ω｀*)

# Step1 アクセス

- **以下にアクセス**　(訳: 以下のLambdaのページにアクセス)
https://console.aws.amazon.com/lambda/home#/functions

チュートリアルと違うURLですが気にしないでください:boy_tone1:
ちなみに下赤枠の『関数』選択されて、上の『東京』の箇所もできるだけ同じの方が良さそうです。(というかここはなるべくサービスを提供する地域に近いところに設定するのがお約束なのかと思っています！)


<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/ab6026c9-8ae3-1d4f-133a-2f458c9a81f7.png">


# Step2 関数を作成する

- 以下の『関数の作成』タップ! (右上部分)


<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/7b03f3c7-9936-8134-dbd8-ad195269b784.png">


- **以下の順序で選択と記述。**

=== 画像は多いので分けて載せてます。=== 

```
・『設計図の使用』をタップ
・「設計図名」で「Schedule a periodic check of any URL python3.7」を選択 ※「Sc」とか先に打って検索すると早く見つけられそうです。
・「関数名」に「lambda-canary」と記載。※ここは指定なのですね!(｡･ω･｡)
・「実行ロール」は「AWS ポリシーテンプレートから新しいロールを作成」 ※ここタップで新たに入力欄でてきます。
・出てきた「ロール名」に「lambda-eventbridge-role」と記載。※ここも指定か!(｡･ω･｡)
・「ポリシーテンプレート - オプション」は「シンプルなマイクロサービスのアクセス権限」を選択で画像のように表示されます。
・少し下に行くと「ルール」があるので『新規ルールを作成』をタップ ※ここでまた新たに記入欄でてきます！
・「ルール名」に「CheckWebsiteScheduledEvent」と記載。
・「ルールの説明」に「CheckWebsiteScheduledEvent trigger」と記載。ここは何でも良さそう、
・「ルールタイプ」は『スケジュール式』を選択。
・「スケジュール式」に「rate(1 minute)」と記載。※ここ間違うと赤文字みたいの図にはないですが出るみたいです(◍•ᴗ•◍) 
・「環境変数」の「キー」と「バリュー」は以下のように記載。

キー: site 
バリュー: https://docs.aws.amazon.com/lambda/latest/dg/welcome.html

キー: expected
バリュー: What is AWS Lambda?

・『関数の作成』をタップ。
```

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/d2981522-9283-6eea-fe97-952634d70d9f.png">

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/096da193-8484-4496-125e-1a5b03be0b7c.png">


- **ここでボ〜〜と待つと以下のような画面になります。**

:open_mouth:お〜clowdwatchとlambdaが紐付いている！

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/49490426-f1d5-9dd1-ec7d-058fbec790d5.png">


# step3 関数をテストする。
 
- **以下の順序で選択やタップ**

※イベント名は記載しなくてもいいし、保存もしなくていいのにびっくり(◍•ᴗ•◍) 

```
・タブの箇所『テスト』を選択
・『新しいイベントの作成』タップ
・「イベントの共有の設定」の箇所は『プライベート』をタップ ※ここは気にしなくても良さそう？
・「テンプレートオプション」の箇所「cloudwatch-scheduled-event」を選択。
・『テスト』タップ
```

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/dd6d82a5-4842-5a32-ff8b-b08735064d57.png">

成功すると少し上に以下のように緑で表示されます。(これはそれを展開したもの)

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/ad686187-cde1-3340-2fb4-52cfa4e4ee7f.png">

<font color="red">**ちなみにこの時点でcloudwatchを見ると以下のような『/aws/lambda/lambda-canary』なもの出来ていて、
中身見ると、1分ごとに実行されているようだったのでこの時点でもうちゃんと関数が定期実行されているようでした！**</font>

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/ef3975f4-4bd0-8710-2580-60a556adbed5.png">

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/d3c767f9-34c4-a780-728b-e5023f475f65.png">


全然関係ないのですが環境変数で入れたサイトURL以下の表示でした！(｡･ω･｡)
pythonあんまわからないですがコード見た感じ、サイト表示してその中に指定文字があるかのチェックぽそうなのでちゃんとここで確認して問題ないことも確認できそうです！(◍•ᴗ•◍) 
こんな感じでサイトチェックとかでも使えるんですね(｡･ω･｡)へ〜〜〜。

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/e36580d6-0586-76e4-d721-7065b23355e4.png">

<font color="red">**ここで関数削除すぐしたい方はstep5の中の関数を削除へお進みください:cactus:**</font>
ちなみにlambdaの料金はそこまでかからない認識なのでそんなに焦って消さなくても良いの認識です！(✿´ ꒳ ` )
きっと1分に1回のリクエストあと200万回ぐらいでも11円ぐらいの認識のはず、、、1時間60分 1日24時間なので
2000000 / (60 × 24 ) = 1339日ぐらい(44ヶ月)　本当に、、？一回試さないとなんともいえませんが、、違ってたらすみません、、twitterとかで検索するとcloudwtachの料金とか見ようねと書かれているのでここら辺の料金考慮が必要そうです、、これはまたいつか(いつかがきたら)

**色々話したのですが、自分はこわいので一旦、間隔以下手順で変えられそうだったので自分は1分から55分に一旦変えます！**
```
・「設定」のタブ選択
・「トリガー」選択
・変えたいもののリンクタップ　※他ページになります。
・下の方にスケジュールでいい感じにタップ保存とかしていくと変更できました！
```

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/ad58d0a5-1d00-393f-8c76-1a8d46ebcdbb.png">

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/317298ef-1291-2f64-f0e6-f078ff52bb11.png">


# step4 エラー時、メールが来るように設定する。

※ちなみに以降でお話しする内容に入っている『トピック』ですが、私は『グループ』的に考えるとわかりやすいなと思いました。そのほかに『サブスクリプション』も『グループに入れる〇〇』みたいにとらえるとわかりやすくなったイメージです！:shamrock:

- **以下AWSのsnsサービスのリンクにアクセス** 

https://console.aws.amazon.com/sns/home

- **リージョンを「東京(<font color="red">lambda関数作成したものと一緒に</font>)」にして『トピック』を選択**
※最初『トピック』見えない時は上左にマークあるのでそれタップで展開して表示させてください。

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/de5b33f8-3903-f5f5-8ede-90e06b2ef47b.png">

- **『トピックの作成』タップ。** ※右上にある。

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/80145b9b-d4db-8974-5cac-277b3548baba.png">

- **以下のように選択または記載**

```
・「タイプ」は『スタンダード』をタップ。
・「名前」に「lambda-canary-notifications」と記載。
・「表示名」に「Canary」と記載。
・下右の方にある『トピック作成』をタップ。
```

<img width="350px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/3e822b9e-e4e1-f580-fa35-0d932cd17e48.png">

以下のように表示されていれば無事に作成されたかと！
![スクリーンショット 2023-05-07 22.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/05da94ee-2b4f-d527-e638-7c3bf288a997.png)

- **『サブスクリプションの作成』をタップ**
※複数トピックある場合とかはちゃんと作ったものであっているかな？と確認した方が良さそうです！(✿´ ꒳ ` )

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/988cc3b9-cac4-5032-28e2-05f00614284f.png">


- 以下のように記載または選択する。

```
・「プロトコル」は「Eメール」を選択。※HTTPとかもあったのどこかにリクエストできるとかもあるかもですね。
・「エンドポイント」に『XXXXXXXXXXX@gmail.com』の箇所送りたいメールアドレス記載お願いします。 <===注意
・『サブスクリプションの作成』をタップ。
```

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/04dbb66f-cdf5-d11f-da68-022a596e6495.png">

この時点でメールが届きました！ヽ(´▽｀)/

<img width="350px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/d186332c-9d74-8b3a-a2a8-7045a53ca318.png">

- **メールの方で『確認』のリンクタップ** ※~~しなくても良さそうですが念のため~~。そしてここでキャンセルもできるよう。

※「サブスクリプション」の箇所リロードで「ステータス」に「確認済み」となっていたのできっとこれでOKのはず。
※ちなみにこの時点で55分から1分間隔にしたらメールめっちゃ来るかと思ったのですがそうではなかったです。まだまだ必要そうです(｡･ω･.｡)チェっ

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/35c569c6-133a-6682-b546-68732146eb31.png">

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/78e8840a-de6b-3d1e-1360-ef46497c2caa.png">

- **以下にアクセス(cloudwatchの管理画面)**

https://console.aws.amazon.com/cloudwatch

- **「リージョン」を「東京(<font color="red">lambda関数作成したものと一緒に</font>)」に変更。**

![スクリーンショット 2023-05-07 23.25.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/fab9aef0-35ad-3aab-af77-3fee684b27b0.png)

- **以下のように選択**

```
・「すべてのアラーム」の箇所タップ。
・「アラームの作成」をタップ。
```

<img width="500px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/6bb01aa4-922b-2d00-755a-b62252d44272.png">

- **以下のように選択や記載**

```
・『メトリクスの選択』タップ
・検索に「lambda-canary Errors」と入れエンター。※これで必要なもの絞り込めます。
・『Lambda関数別名』をタップ
・『lambda-canary Errors』にチェックをつける。
・『メトリクスの選択』タップ
・「統計」の箇所『合計』選択。
・「しきい値の種類」で『より大きい』をタップ。
・「..よりも」のところに「1」を記入。
・『次へ』をタップ。
```

![スクリーンショット 2023-05-07 23.45.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/24e795bb-b91e-ce68-818e-f75c21770859.png)

- **以下のように選択**

```
・「アラーム状態トリガー」は『アラーム状態』をタップ
・「通知の送信先」は「lambda-canary-notifications」を選択。 ※この選択時登録したメールアドレス下黒い箇所に表示されます。
・『次へ』をタップ
```

![スクリーンショット 2023-05-07 23.53.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/0dfec7ce-65ed-7710-79aa-76efa95a5648.png)

- **「アラーム名」と「アラームの説明」の箇所に「lambda-canary-alarm」記載し『次へ』をタップ**。※正直ここはなんでもよさそうですな。

![スクリーンショット 2023-05-07 23.59.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/9411382f-c304-6bc8-a1cc-7748d4a6a501.png)

- **最後下右の方に出てくる『アラームの作成』をタップ**

<img width="350px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/481a63fb-5862-dfc8-0869-155b7df401eb.png">

やった〜〜ここでアラームが正常に作成された下の表示が出ればOKです！お疲れ様です！(✿´ ꒳ ` )
![スクリーンショット 2023-05-08 0.02.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/ccf3168b-5583-f017-732e-5845d88ea45f.png)

<font color="red">**あ！！！あとはlambda関数でエラーを起こせば出来るはず！！＼＼\└('ω')┘//／／**</font>

- **(必要であれば)あ！その前にイベントスケジュール時間55分とかに変更してたら1分とか戻しておいた方が良さそうです！**

```
・lambdaにアクセス。 ※https://console.aws.amazon.com/lambda/home#/functions
・『関数』タップ。
・作成関数タップ。
・「設定」のタブ選択
・「トリガー」選択
・変えたいもののリンクタップ　※他ページになります。
・下の方にスケジュールでいい感じにタップとか保存とかしていくと変更できました！
```

- **以下のようにタップや記載**

```
・lambdaにアクセス。 ※https://console.aws.amazon.com/lambda/home#/functions
・『関数』タップ。
・作成関数タップ。
・『環境変数』タップ。
・『編集』タップ
・「expexted」の「値」の箇所に絶対ないようなもの入れて『保存』タップ。
・5分ほど待ちます。※メールが来るので。
```

![スクリーンショット 2023-05-08 0.12.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/00076d54-72f4-3923-78b7-c1d44720be69.png)


![スクリーンショット 2023-05-08 0.14.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/e2b6861f-c516-08c3-b8ad-e0b613e9ea72.png)

- **<font color="red">メールが来たのを確認してバンザ〜〜〜いいヽ(´▽｀)/</font>**
ちなみに最初の1回だけメールでした。設定とかいじれば変えられますかね?(◍•ᴗ•◍)エラー何回もはきついからこれが良さそうですかね？

![スクリーンショット 2023-05-08 0.17.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/b0ea6597-a343-6b0a-620a-46c517164282.png)

ちなみにcloudwatchの方もエラー出されてること確認できました！
エラー出た時どんなエラーかわかるようにログはもう少し工夫した方がいいかもとか思ったりしました！

![スクリーンショット 2023-05-08 0.20.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/583a3650-da0d-21d2-e578-8475c7ceac4b.png)


# step5 使ったものを削除します！(◍•ᴗ•◍) 

### <font color="red">関数を削除</font>

- **『関数』 => 『必要な関数選択(今回のものは「lambda-canary」)』 => 右上の方にある『アクション』からの『関数の削除』**
※関数削除したらclowdwatchで動いていないことも確認するとより安心かと思います！

リンク: https://console.aws.amazon.com/lambda/home#/functions

![スクリーンショット 2023-05-08 0.28.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/7bb8d97e-ae11-f5c6-705a-fdade8520056.png)


### <font color="red">アラームを削除</font>

- **『全てのアラーム』 => 『必要なアラーム選択(今回のものは「lambda-canary-alarm」)』=> 右上の方にある『アクション』からの『関数の削除』**

リンク:https://console.aws.amazon.com/cloudwatch/home#alarmsV2:

![スクリーンショット 2023-05-08 0.30.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/5b9d5fdf-0997-c035-fce9-e54ae58c91c0.png)


### <font color="red">Amazon SNSサブスクリプションを削除</font>

- **『サブスクリプション』 => 『必要なサブスクリプション選択(エンドポイントのメールアドレスで確認してください)』=> 右上の方にある『削除』から削除できます。**

リンク: https://console.aws.amazon.com/sns/home#subscriptions:


### <font color="red">Amazon SNSトピックを削除</font>

- **『トピック』 => 『必要なトピック選択(今回のものは「lambda-canary-notifications」)』=> 右上の方にある『削除』タップの入力欄に『これを削除』記載で削除**
※『これを削除』の箇所同じか英語か色々あると思うので説明のとこ見てもらった方が良さそうです。

リンク: https://console.aws.amazon.com/sns/home#topics:

![スクリーンショット 2023-05-08 0.37.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/af9d8552-434e-9086-3a13-19a18d78eaeb.png)

# さいごに

お疲れ様でした！
終わりです！ヽ(´▽｀)/

やってて思ったのですが、メールでなくHTTPでも送れるみたいなのでなんか色々もっと出来そう？となりました。

あと工程は色々あったように感じましたが案外迷わなくてびっくりしました！

# おまけ1

AWSの『SES』と『SNS』こんがらがっちゃいますね。:seedling:

ちなみに今回エラー通知で使ったのが『SNS』、
自分のサービスとかのメール送信に使っているのは『SES(私の場合)』です！

とりあえず自分へは『SNS』、その他大勢には『SES』ぐらいに認識しておこうかと、、(きっと違う？？)

# おまけ2

以前slackのメールに送ったらslack通知できる的なことを聞いたので以下リンクのメールに送れば通知がslackに来るだろうの認識です。ですがこれslack有料版なので試せてません。
https://slack.com/intl/ja-jp/help/articles/206819278-Slack-%E3%81%AB%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B#h_01F4WDZG8RTCTNAMR4KJ7D419V