Slide 1

Slide 1 text

+"846(ॳ৺ऀࢧ෦ˍઍ༿ࢧ෦ ৽ਓ͞Μ׻ܴʂϋϯζΦϯ-5 ΦϯϥΠϯ -BNCEBͬͯ՝ۚ͞ΕΔͷʁʙඇಉظॲཧͰ ͪΐͬͱ΍Β͔ͨ͠࿩

Slide 2

Slide 2 text

ࣗݾ঺հ ・和⽥ 健⼀郎 ・アイレット株式会社所属 ・ JAWS-UG 千葉⽀部運営 ・普段は、社内ツールの開発に従事 ・趣味で開発する(IoTっぽいこと)時はLambdaメイン ・好きなAWSサービスはAWS Lambda Twitter : @Keni_W Qiita: https://qiita.com/keni_w

Slide 3

Slide 3 text

Lambdaって課⾦されるの?

Slide 4

Slide 4 text

-BNCEBͬͯ՝ۚ͞ΕΔͷʁ 趣味(ハンズオンとかちょっとした開発)で 利⽤している限りは、まずないです。 例)2020/03の利⽤料⾦

Slide 5

Slide 5 text

-BNCEBͬͯ՝ۚ͞ΕΔͷʁ ただし、 「Provisioned Concurrency」という機能を 有効にすると、その利⽤料は無料利⽤枠対象外 になります。 例)検証していた際(12⽉)の利⽤料⾦

Slide 6

Slide 6 text

ただし、⾮同期処理で、 やらかした場合は、 その限りではありません! -BNCEBͬͯ՝ۚ͞ΕΔͷʁ

Slide 7

Slide 7 text

ちょっとやらかした⼀例を、 実例を含めてお話しします。 ミスによるものなので、 基本的にはLambda、 サーバーレス怖くないですよ。 -BNCEBͬͯ՝ۚ͞ΕΔͷʁ

Slide 8

Slide 8 text

構成(想定) ඇಉظॲཧͰ΍Β͔ͨ͠࿩ AWS Lambda Amazon CloudFront Amazon Simple Storage Service バケットA AWS Lambda Amazon Simple Storage Service バケットB User ①ユーザーはCFn経由で、 ファイルをS3バケットA に アップロード ②S3トリガーでLambda が起動。Lambda関数内 で、バケットBにファイ ルをコピーし、元のファ イルを削除 ③バケットBでもS3トリ ガーでLambdaが起動し、 後続処理を実⾏

Slide 9

Slide 9 text

察しの良い⽅は、この時点で何を どう間違えたか気づくかと思いますが。。。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 10

Slide 10 text

構成(実際) ඇಉظॲཧͰ΍Β͔ͨ͠࿩ AWS Lambda Amazon CloudFront バケットB User ①ユーザーはCFn経由で、 ファイルをS3バケットA に アップロード ②S3トリガーでLambdaが起動。 Lambda関数内で、バケットBバケットA にファイルをコピーし、元のファイルを削除 ・ ・ ・ ③S3トリガーでLambdaが起動。 Lambda関数内で、バケットBバケットA にファイルをコピーし、元のファイルを削除 ④S3トリガーでLambdaが起動。 Lambda関数内で、バケットBバケットA にファイルをコピーし、元のファイルを削除 ⑤S3トリガーでLambdaが起動。 Lambda関数内で、バケットBバケットA にファイルをコピーし、元のファイルを削除

Slide 11

Slide 11 text

ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 12

Slide 12 text

⽬に⾶び込んできたのは、 Lambdaの実⾏数(Invocations)が 凄まじい勢いで跳ね上り、 Throttlesの値が出現する Cloudwatchのメトリクス。 そして、Slackに通知される監視システムからの アラートメッセージ。。。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 13

Slide 13 text

ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 14

Slide 14 text

いや、挫折してる暇はないんです。 ⽌めないと。。。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 15

Slide 15 text

Lambda関数消しました ※もっといい⽌め⽅があるので後述します。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 16

Slide 16 text

S3バケットの指定は、Lambdaの環境変数に定義して あったので、それを変えればいいんじゃ・・・? ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 17

Slide 17 text

ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 18

Slide 18 text

Lambdaに限らずですが、 まあ、まずは落ち着きましょう。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 19

Slide 19 text

救いだったのは。。。 新規開発のもので、実装終わって、 さあーってLambdaデプロイして、 テストするかー。の時点だったこと (メトリクスも⾒てたので、すぐに気づけた) そういう存在だったので容赦なく捨てられたこと。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 20

Slide 20 text

暴⾛Lambdaの⽌め⽅ですが、 コンソール上部にある「スロットリング」ボタンを押す と⽌められるそうです。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 21

Slide 21 text

どう対策するべきか。 ※ダメなケースもあるので最適解ではないです。 ・同時実⾏数の予約を1にする。 ・Invocationsの異常値、もしくは Throttlesが発⽣時に、Clouwatch Alerm もしくはサードパーティーの監視システム で通知をあげる。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 22

Slide 22 text

ちょっと聞いた話なんですが、 こんなケースもあるそうです。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 23

Slide 23 text

構成(⼀部想像) ඇಉظॲཧͰ΍Β͔ͨ͠࿩ AWS Lambda Amazon Simple Storage Service Bucket with objects AWS Lambda Amazon Simple Storage Service Bucket with objects User ①ユーザーは S3バケットAに アップロード ②S3トリガーでLambda が起動。Lambda関数内 で、ファイル内のデータ を使って処理後、バケッ トBにファイルをコピー ③S3トリガーでLambda が起動。Lambda関数内 で、ファイル内のデータ を使って処理後、バケッ トCにファイルをコピー Amazon Simple Storage Service Bucket with objects AWS Lambda ④S3トリガーでLambda が起動。Lambda関数内 で、ファイル内のデータ を使って処理後、バケッ トAにファイルをコピー ⑤②と同様

Slide 24

Slide 24 text

1Lambdaの実⾏が淡々と繰り返される。。。 スロットリングにもならないので、エラーも起こらない。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 25

Slide 25 text

どう対策するべきか。 聞いた時ちょっと悩みましたね。でも、以下かな? ※これまたダメなケースもあるので最適解ではないです。 ・関数のInvocationsのsum(合計)が異常値検知 して、アラートを⾶ばす。 ・BillingAlertを設定し、課⾦発⽣/想定外時 に、アラートを⾶ばす。 ඇಉظॲཧͰ΍Β͔ͨ͠࿩

Slide 26

Slide 26 text

いずれにしろ、確かなことは、 ⼈はミスする⽣物なので、 オンプレ・EC2上で動作するアプリでも、 サーバーレスのアプリでも監視は重要ってことです。 ·ͱΊ

Slide 27

Slide 27 text

とはいえ、いきなり監視(しかも個⼈の場合は特に)は 難しいので、テスト実⾏して、ログ・メトリクスを⾒ま しょう! ·ͱΊ

Slide 28

Slide 28 text

素敵なサーバーレス開発ライフを! ·ͱΊ