イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda...

60
© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Prototyping Solutions Architect 今村 優太 2019/11/19 エラー制御の勘所とモニタリング イチから理解するサーバーレスアプリ開発

Transcript of イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda...

Page 1: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Prototyping Solutions Architect今村 優太2019/11/19

エラー制御の勘所とモニタリング

イチから理解するサーバーレスアプリ開発

Page 2: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

⾃⼰紹介

q 名前 : 今村 優太

q 所属 : 技術統括本部 Developer Advocate チームPrototyping Solutions Architect

q 好きな AWS のサービス︓AWS Lambda AWS Step Functions AWS AppSync

Page 3: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

本⽇のアジェンダ

q サーバーレス アプリにおけるエラー制御

q AWS Lambda の監視

q Amazon CloudWatch を使ったログ管理

q AWS X-Ray を使ったトレース

q まとめ

Page 4: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

本⽇のアジェンダ

q サーバーレス アプリにおけるエラー制御

q AWS Lambda の監視

q Amazon CloudWatch を使ったログ管理

q AWS X-Ray を使ったトレース

q まとめ

Page 5: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

エラー制御についてのパターン

モニタリング、トレース、アラート

サーバーレスのワークフローサービスを利⽤

AWS Lambda の制御

プログラミング内の制御構造

Page 6: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

エラー制御についてのパターン

モニタリング、トレース、アラート

サーバーレスのワークフローサービスを利⽤

AWS Lambda の制御

プログラミング内の制御構造

Page 7: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

プログラミング内の制御構造

q 分岐

q 繰り返し

q 例外

q リトライ

1 .. 10

a or b

ExceptionHTTP GET

Retry

外部リソース Calculate

Page 8: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

エラー制御についてのパターン

モニタリング、トレース、アラート

サーバーレスのワークフローサービスを利⽤

AWS Lambda の制御

プログラミング内の制御構造

Page 9: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda の⾮同期呼び出しについて

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/retries-on-errors.html

Page 10: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Amazon Simple Storage Service (S3) での⾮同期呼び出し例

(1) S3 バケットにファイルをアップロード

(2) アップロードでイベント発⽣

(3) Lambda関数を呼び出すが、合計3回失敗(リトライ2回)

(4) DLQ (Dead Letter Queue) にイベントが送信される

(5) DLQ は後ほど、バッチで処理するなど対応

クライアント Amazon Simple Storage Service (S3)

File Put

event

⾮同期①② ③

失敗 失敗 失敗

AWSLambda

Dead Letter Queue

event

失敗が増えるとQueueが溜まっていく

リトライ

Page 11: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda の制御

q ⾮同期実⾏の AWS Lambda は関数失敗時に、最⼤ 2 回リトライがされる。(初回含め 3 回)

q DLQ (Dead Letter Queue) は、そのリトライを尽くしてもエラーとなった場合に、未処理イベントが送信される先

Amazon SNS またはAmazon SQS が指定可能

Page 12: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

エラー制御についてのパターン

モニタリング、トレース、アラート

サーバーレスのワークフローサービスを利⽤

AWS Lambda の制御

プログラミング内の制御構造

Page 13: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

DatabaseQueue

Server

Application

Application

Application

Application

Application

Application Applica

tion

Application

モダンなシステムのアーキテクチャ

Page 14: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Step Functions

q 分散した個々のアプリケーションに対し、分岐やリトライ、並列実⾏といった処理の流れを構成することができる

q Management Console から「ワークフロー」(右図) という形式で⾒やすく可視化できる

q 各ステップの実⾏履歴をログから追跡できる

Page 15: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

プログラミング内の制御構造 (再掲)

q 分岐

q 繰り返し

q 例外

q リトライ

1 .. 10

a or b

ExceptionHTTP GET

Retry

外部リソース Calculate

Page 16: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Step Functions による制御

1 .. 10

a or b

ExceptionHTTP GET

Retry

外部リソース Calculate

AWS Step Functions

q 分岐、例外、リトライ、繰り返しといった制御構造をマネージドに実現することが可能

q 複数の Lambda 関数どうしを組み合わせることができる

Page 17: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Step Functions から呼び出し可能な AWS のサービス

q AWS Lambda : Lambda 関数の実⾏

q Amazon Dynamo DB : 既存のアイテムの取得、新規アイテムの登録

q AWS Batch : ジョブの起動、ジョブ完了の待機

q Amazon ECS : ECS/Fargate タスクの実⾏

q Amazon SNS : SNS トピックへのメッセージ送信

q Amazon SQS : SQS キューへのメッセージ送信

q AWS Glue : Glue ジョブの実⾏

q Amazon SageMaker : トレーニングジョブ、トランスフォームジョブの起動

その他にも⾃⾝で定義したサービスを Step Functions から呼び出すこともできる

Page 18: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

エラー制御についてのパターン

モニタリング、トレース、アラート

サーバーレスのワークフローサービスを利⽤

AWS Lambda の制御

プログラミング内の制御構造

Page 19: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

CloudMgmt.

AWSService Catalog

AWSCloudTrail

AWSConfig AWS Trusted Advisor

AWS X-Ray

AWSOpsWorks

Amazon CloudWatch

AWSCloudFormation

AWS Snowball

AWS SMS

AWSSystems Manager

AWS DMS

ServicerequestInventory and

classification

Monitoring and analytics

Packagingand delivery

Provisioningand orchestration

Cost management andresource optimization

Cloud migration, backup, and DR

securityand compliance

Page 20: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

モニタリングサービス

Metrics

LogsTraces

Amazon CloudWatch

AWS X-Ray

Page 21: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

サーバーレス アーキテクチャ

Amazon API Gateway AWS Lambda Amazon DynamoDBclientHTTPS

Amazon CloudWatch

Logs/Metrics

AWS X-Ray

Traces

Page 22: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

本⽇のアジェンダ

q サーバーレス アプリにおけるエラー制御

q AWS Lambda の監視

q Amazon CloudWatch を使ったログ管理

q AWS X-Ray を使ったトレース

q まとめ

Page 23: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda のメトリクスの表⽰

モニタリング表⽰に切り替え

Page 24: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

表⽰時間範囲は変更可能

Amazon CloudWatch

Dashboards に追加可能

AWS Lambda のメトリクスの表⽰

Page 25: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Amazon CloudWatch Dashboards に追加されたメトリクス

Page 26: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

項⽬ 単位 意味Invocations count Lambda の実⾏回数を計測したもの。=課⾦カウント

≠同時実⾏数

Throttles count Throttle の発⽣回数アカウントにおける Lambda の同時実⾏数超過が発⽣している

Duration ms Lambda の実⾏時間を計測。(課⾦は 100ms で切り上げる)※コールドスタートの Lambda 起動までの時間は含まない

Errors, Availability count Lambda が正常終了しなかった回数を計測したものAvailability は % で表⽰される

IteratorAge ms ストリーム (Kinesis/DynamoDB) でのみ利⽤。バッチサイズ分取得したレコード終端の時刻と Lambda がイベントとして受信した時刻差で表⽰される

DeadLetterErrors count DLQ を設定し、その DLQ への書き込みが失敗すると増加する。

AWS Lambda の メトリクス

Page 27: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda のメトリクス - Invocations項⽬ 単位 意味Invocations count Lambda の実⾏回数を計測したもの。=課⾦カウント

≠同時実⾏数

Throttles count Throttle の発⽣回数アカウントにおける Lambda の同時実⾏数超過が発⽣している

Duration ms Lambda の実⾏時間を計測。(課⾦は 100ms で切り上げる)※コールドスタートの Lambda 起動までの時間は含まない

Errors, Availability count Lambda が正常終了しなかった回数を計測したものAvailability は % で表⽰される

IteratorAge ms ストリーム (Kinesis/DynamoDB) でのみ利⽤。バッチサイズ分取得したレコード終端の時刻と Lambda がイベントとして受信した時刻差で表⽰される

DeadLetterErrors count DLQ を設定し、その DLQ への書き込みが失敗すると増加する。

Page 28: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda のメトリクス - Throttles項⽬ 単位 意味Invocations count Lambda の実⾏回数を計測したもの。=課⾦カウント

≠同時実⾏数

Throttles count Throttle の発⽣回数アカウントにおける Lambda の同時実⾏数超過が発⽣している

Duration ms Lambda の実⾏時間を計測。(課⾦は 100ms で切り上げる)※コールドスタートの Lambda 起動までの時間は含まない

Errors, Availability count Lambda が正常終了しなかった回数を計測したものAvailability は % で表⽰される

IteratorAge ms ストリーム (Kinesis/DynamoDB) でのみ利⽤。バッチサイズ分取得したレコード終端の時刻と Lambda がイベントとして受信した時刻差で表⽰される

DeadLetterErrors count DLQ を設定し、その DLQ への書き込みが失敗すると増加する。

Page 29: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

同時実⾏数とは

1s 2s 3s 4s 5s

秒間リクエスト:10 req/sec

同時実⾏数 = “同時”に実⾏されているタイミング= 3 ✖ 10 = 30

Throttles

関数 A 関数 A 関数 A

関数 B 関数 B 関数 B

関数 C 関数 C 関数 C

複数の Lambda 関数の実⾏数が合算されることに注意

Page 30: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambdaの制限

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/limits.html

Throttles

Page 31: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

同時実⾏数の予約

q Lambda 関数単位に同時実⾏数を制限しない場合アカウントの上限までスケールする可能性

q 他のLambda関数の起動を妨げる恐れがある

q その場合はあらかじめ同時実⾏数を予約しておく

AWS Account : 1000 in Tokyo

120予約

1000-120= 880

Throttles

関数 A

関数 B

関数 C

Page 32: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Throttling の対策について

Throttling の対策としては、

q Lambda 関数をチューニングして平均実⾏時間を下げる

q SQS などキューの仕組みを⽤いて、⾮同期にリクエストを処理するようにアーキテクチャを変更する

q アカウントの同時実⾏数の制限緩和を申請する

q Lambda 関数を複数のリージョン、複数のアカウントに分散する

Throttles

Page 33: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda のメトリクス - Duration項⽬ 単位 意味Invocations count Lambda の実⾏回数を計測したもの。=課⾦カウント

≠同時実⾏数

Throttles count Throttle の発⽣回数アカウントにおける Lambda の同時起動数超過が発⽣している

Duration ms Lambda の実⾏時間を計測。(課⾦は 100ms で切り上げる)※コールドスタートの Lambda 起動までの時間は含まない

Errors, Availability count Lambda が正常終了しなかった回数を計測したものAvailability は % で表⽰される

IteratorAge ms ストリーム (Kinesis/DynamoDB) でのみ利⽤。バッチサイズ分取得したレコード終端の時刻と Lambda がイベントとして受信した時刻差で表⽰される

DeadLetterErrors count DLQ を設定し、その DLQ への書き込みが失敗すると増加する。

Page 34: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Lambda 関数のライフサイクル

コンテナ⽣成

パッケージロード

パッケージ展開

ランタイム起動

初期化

関数・メソッド起動

デプロイ

• コンテナ⽣成• S3 からの ZIP ダウンロード• ZIP ファイルの展開• Duration には含まれない

Duration

Page 35: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Lambda 関数のライフサイクル

コンテナ⽣成

パッケージロード

パッケージ展開

ランタイム起動

初期化

関数・メソッド起動

デプロイ

• 各ランタイムの初期化処理• グローバルスコープ処理• Duration には含まれない

Duration

Page 36: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Lambda 関数のライフサイクル

コンテナ⽣成

パッケージロード

パッケージ展開

ランタイム起動

初期化

関数・メソッド起動

デプロイ

• ハンドラーで指定した関数/メソッドの実⾏

• Duration に含まれる

Duration

Page 37: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Lambda 関数のライフサイクル

Warm StartCold Start

コンテナ⽣成

パッケージロード

パッケージ展開

ランタイム起動

初期化

AWSによる最適化 Customerによる最適化

関数・メソッド起動

デプロイ

Duration

Page 38: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

項⽬ 単位 意味Invocations count Lambda の実⾏回数を計測したもの。=課⾦カウント

≠同時実⾏数

Throttles count Throttle の発⽣回数アカウントにおける Lambda の同時実⾏数超過が発⽣している

Duration ms Lambda の実⾏時間を計測。(課⾦は 100ms で切り上げる)※コールドスタートの Lambda 起動までの時間は含まない

Errors, Availability count Lambda が正常終了しなかった回数を計測したものAvailability は % で表⽰される

IteratorAge ms ストリーム (Kinesis/DynamoDB) でのみ利⽤。バッチサイズ分取得したレコード終端の時刻と Lambda がイベントとして受信した時刻差で表⽰される

DeadLetterErrors count DLQ を設定し、その DLQ への書き込みが失敗すると増加する。

AWS Lambda の Metrics

Page 39: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda 特有の監視 TipsThrottles を観測した場合q どの Lambda 関数が⼤量に使っているかの特定

q アカウント単位で飽和している => 上限緩和の申請q Lambda単位で飽和している => 同時実⾏数の予約

Dead Letter Queue 内のメッセージ数が増え続けるq ⾮同期型であれば 1 回の実⾏、2 回のリトライが⾏われ、すべて失敗した場合に、

(設定していれば) Dead Letter Queue へ送られるq 後段処理、連携システムのダウンなど、システム系としての障害の確認などを実施

Duration が増加している場合q 実装している Lambda 関数のサイズが⼤きくなりすぎていないか

q モノリシックなフレームワークをそのまま Lambda で動かすことは難しいq ライブラリの読み込み処理を関数の起動のたびに⾏っていないか

q グローバルスコープでライブラリ読み込みを⾏うことを検討

Page 40: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

本⽇のアジェンダ

q サーバーレス アプリにおけるエラー制御

q AWS Lambda の監視

q Amazon CloudWatch を使ったログ管理

q AWS X-Ray を使ったトレース

q まとめ

Page 41: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Amazon CloudWatch Logs の使い⽅を知る

Lambda のコンテナ起動単位でログストリームが分かれて出⼒される (関数単位ではない)

Page 42: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

関数単位のログ表⽰

関数単位でまとめて横断的に検索するにはSearch Log Group (ロググループの検索) をクリック

Page 43: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

関数単位のログ表⽰

関数単位でまとめてログが出⼒される

ログ表⽰対象の期間を絞ることも可能

Page 44: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

CloudWatch Logs Insights の活⽤

クエリを実⾏したい Lambda 関数のExplore をクリックする

Page 45: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

CloudWatch Logs Insightsの活⽤

fields @timestamp, @message| sort @timestamp desc| filter @message like "[INFO]"| limit 20

クエリ例 :

Page 46: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

CloudWatch Logs Insightsの活⽤

fields @timestamp, @message| sort @timestamp desc| filter @message like "[INFO]”| stats count(*) by bin(1m)| limit 2000

クエリ例 :

SQL のように統計データを出⼒することも可能

Page 47: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

ログの保管期間q Lambdaのログ保管期間はデフォルトが無期限q 必要な期間に圧縮することを忘れがち

Page 48: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Page 49: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

他サービスに連携してログの活⽤

subscribe

より複雑な解析処理の実装

各種 AWS サービスと連携︓アラート、スケーリング、Blacklisting、etc…

⾃由に処理を実装

AWS Lambda

Amazon Elasticsearch

Service

Amazon CloudWatch Logs

Amazon Kinesis Data Firehose

ログの検索

Amazon Simple Storage Service (S3)

ログのアーカイブ

Page 50: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

本⽇のアジェンダ

q サーバーレス アプリにおけるエラー制御

q AWS Lambda の監視

q Amazon CloudWatch を使ったログ管理

q AWS X-Ray を使ったトレース

q まとめ

Page 51: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

DatabaseQueue

Server

Application

Application

Application

Application

Application

Application Applica

tion

Application

Tracing の必要性

client

Request

Page 52: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

AWS Lambda で X-Ray を利⽤する

(CLIであれば、--tracing-config オプションを付与する)

Page 53: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Trace, Segment, Sub Segment

Request

Response

TraceSegmentSub Segment

client

AWS Lambda

AWS Cloud

Amazon API Gateway

Amazon Simple Storage Service (S3)

q Trace : ひとつのリクエスト処理の軌跡q Segment : ひとつのサービスや機能の処理の軌跡q Sub Segment : Segment 内の各処理の軌跡

Page 54: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

サービスマップ

API Gateway

AWS Lambda

Amazon S3

Page 55: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

トレース

Segment

Sub Segment

Page 56: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

任意の処理の追跡 (AWS Lambda / Python の例)

from aws_xray_sdk.core import xray_recorderfrom aws_xray_sdk.core import patch_all

patch_all()def main(event, context):

xray_recorder.begin_subsegment('sub segment')

(追跡したい処理を記載)

xray_recorder.end_subsegment()return

Page 57: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

from aws_xray_sdk.core import xray_recorderfrom aws_xray_sdk.core import patch_all

patch_all()def main(event, context):

xray_recorder.begin_subsegment('sub segment')

(追跡したい処理を記載)

xray_recorder.end_subsegment()return

ライブラリ内の処理の追跡 – patch_all 関数

patch_all を呼び出すことで、通常は隠蔽されているライブラリ内の処理を追跡できる (X-Ray SDK に対応しているライブラリのみ)。

Python の場合q botocore, boto3q requestsq sqlite3q mysql-connector-pythonなどの対応ライブラリが存在

patch_all ではなく patch('boto3') のように特定ライブラリに限定することもできる

Page 58: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

本⽇のアジェンダ

q サーバーレス アプリにおけるエラー制御

q AWS Lambda の監視

q Amazon CloudWatch を使ったログ管理

q AWS X-Ray を使ったトレース

q まとめ

Page 59: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

まとめ

AWS サーバーレスサービスに関わる考え⽅やMetricsをご紹介してきました。

q アプリケーション開発⽅法やログ出⼒などは、これまでと変わらない知識と経験がサーバーレスでも活⽤できる

q ログフォーマットなども通常のアプリケーション設計と変わらないq ログの蓄積には CloudWatch Logs がマネージドサービスとし

て利⽤できる

q サーバーレス サービスの制約や仕様を理解し、今までのアプリケーション開発経験と組み合わせる

Page 60: イチから理解するサーバーレスアプリ開発 · アカウントにおけるLambda の同時実⾏数超過が発⽣している Duration msLambda の実⾏時間を計測。(課⾦は100ms

© 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2019, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

ありがとうございました