Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS Lambda Powertools

@twingo_b
November 03, 2020

AWS Lambda Powertools

AWS Lambda のちょっと便利なツールのご紹介
2020/11/03 合同勉強会 in 大都会岡山 - 2020 Winter Online -
資料

@twingo_b

November 03, 2020
Tweet

More Decks by @twingo_b

Other Decks in Technology

Transcript

  1. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    2020/11/3
    Amazon Web Services Japan K.K.
    Solutions Architect
    Yoshinori Fujiwara
    AWS Lambda のちょっと便利な
    ツールのご紹介
    サーバーレスしてますか!
    @twingo_b
    〜 合同勉強会 in 大都会岡山 - 2020 Winter Online - 〜

    View full-size slide

  2. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート

    View full-size slide

  3. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート

    View full-size slide

  4. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート

    View full-size slide

  5. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    Amazon API Gateway
    を使用して HTTP
    REST API を提供

    View full-size slide

  6. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    AWS Lambda は役割
    および HTTP Method
    毎に関数を分離

    View full-size slide

  7. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    バックエンドにも
    (外部) HTTP API が
    存在

    View full-size slide

  8. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    Amazon SQS キュー
    を使った非同期処理

    View full-size slide

  9. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    Amazon DynamoDB と
    DynamoDB Streams に
    よるストリーム処理

    View full-size slide

  10. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    • Amazon API Gateway を使用して HTTP REST API を提供
    • バックエンドにも (外部) HTTP API が存在
    • AWS Lambda は役割および HTTP Method 毎に関数を分離
    • Amazon SQS キューを使った非同期処理
    • Amazon DynamoDB と DynamoDB Streams によるストリーム処理

    View full-size slide

  11. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスアプリケーションの
    よくある運用の悩み

    View full-size slide

  12. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    各 Lambda 関数のエラ
    ーをどうやって監視し
    たら良いの?

    View full-size slide

  13. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    バックエンドの HTTP API
    はどの Lambda 関数から
    呼ばれているの?

    View full-size slide

  14. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    ボトルネックはどこにあ
    るの?

    View full-size slide

  15. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスショッピングカート
    非同期処理やストリー
    ミング処理は正常稼働
    しているの?

    View full-size slide

  16. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレスアプリケーションのよくある運用の悩み
    • 各 Lambda 関数のエラーをどうやって監視したら良いの?
    • バックエンドの HTTP API はどの Lambda 関数から呼ばれているの?
    • ボトルネックはどこにあるの?
    • 非同期処理やストリーミング処理は正常稼働しているの?

    View full-size slide

  17. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    サーバーレス は分散アーキテクチャ
    静的コンテンツ
    動的データ
    記事/試合状況
    フォロー状況管理
    認可
    (フェデレーション)
    ログの保存
    ETL処理
    ログ収集 データ分析
    クローリング
    記事に対する処理
    (タグ付けなど)
    変更通知
    画像に対する処理
    (顔座標の検出)
    Amazon
    CloudWatch
    AWS X-Ray
    静的コンテンツ
    動的データ
    記事/試合状況
    フォロー状況管理
    ログの保存
    ETL処理
    ログ収集 データ分析
    クローリング
    記事に対する処理
    (タグ付けなど)
    変更通知
    画像に対する処理
    (顔座標の検出)
    静的コンテンツ
    動的データ
    記事/試合状況
    フォロー状況管理
    ログの保存
    ETL処理
    ログ収集 データ分析
    クローリング
    記事に対する処理
    (タグ付けなど)
    変更通知
    画像に対する処理
    (顔座標の検出)
    静的コンテンツ
    動的データ
    記事/試合状況
    クローリング
    記事に対する処理
    (タグ付けなど)
    変更通知
    画像に対する処理
    (顔座標の検出)

    View full-size slide

  18. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    AWS Lambda Powertools

    View full-size slide

  19. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    AWS Lambda Powertools
    https://awslabs.github.io/aws-lambda-powertools-python/

    View full-size slide

  20. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    AWS Lambda Powertools
    ログ
    メトリ
    クス
    トレース
    Amazon
    CloudWatch
    AWS X-Ray

    View full-size slide

  21. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools 生成 CloudWatch Logs Insights

    View full-size slide

  22. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    CloudWatch Logs Insights (Cold Start)

    View full-size slide

  23. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools 生成 CloudWatch サービスマップ

    View full-size slide

  24. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools 生成 CloudWatch トレース

    View full-size slide

  25. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools 生成 CloudWatch カスタムメトリクス
    ビジネスメトリクスの可視化に利用可能

    View full-size slide

  26. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools 対応言語
    aws-samples / aws-lambda-powertools-python aws-samples / aws-lambda-powertools-java

    View full-size slide

  27. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    ロギング

    View full-size slide

  28. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    構造化ログ (Structured Logging) を推奨
    [INFO]
    Raw
    Semi-structured
    Structured
    [INFO] ... {“message”: }
    {“level”: “INFO”, “message”: }
    Canonical [timestamp] meta=data
    timestamp | operation | key=value |…
    Sample
    Type

    View full-size slide

  29. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    これまでの Lambda ログ
    [INFO] 2020-01-31T22:.. 1c8df7d3… Hello world
    Result
    [課題]
    構造化されていないので検索性が
    よくない

    View full-size slide

  30. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    自作の半構造化ログ
    [INFO] … {“message”: “Hello world”}
    Result
    [課題]
    構造化オブジェクトを自作する手間
    Log Level も構造化したい

    View full-size slide

  31. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    自作の構造化ログ
    {
    "asctime": "2020-07-12...",
    "levelname": "INFO",
    "name": "root",
    "message": "Aha!"
    }
    Result
    [課題]
    構造化されたが、コードの
    可読性が損なわれる

    View full-size slide

  32. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools の構造化ログ
    {
    "timestamp": "2020-07-14...",
    "level": "INFO",
    "location": "collect.handler:5",
    "service": "payment",
    "sampling_rate": 0.5,
    "message": ”Aha!”
    }
    Result
    [解消]
    構造化されており、記述も楽!

    View full-size slide

  33. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools の構造化ログ
    {

    "lambda_function_name":..,
    "lambda_function_memory_size": 128,
    "lambda_function_arn": ”…",
    "lambda_request_id": "52fd..",
    "message": ”Aha",
    "cold_start": true
    }
    Result
    [解消]
    デコレータで関数Context情報も
    出力可能

    View full-size slide

  34. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    トレーシング

    View full-size slide

  35. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    トレーシング の考え方
    トレーシング
    セグメント
    サブセグメント
    API Gateway Lambda Fargate
    DynamoDB
    API Gateway
    S3 bucket
    Type Key Value Namespace
    Annotation UserId a1c8k...
    Metadata Cart {….} Checkout
    凡例 Trace metadata
    AWS X-Ray

    View full-size slide

  36. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    AWS SAM で Lambda のトレーシングを有効化

    View full-size slide

  37. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    これまでのトレーシング / サービスマップ
    [課題]
    パッチを当てる手間がある

    View full-size slide

  38. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    これまでのトレーシング / サービスマップ
    [課題]
    Subsegment を個別に宣言する必要あり
    冗長な記述

    View full-size slide

  39. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools のトレーシング / サービスマップ
    [解消]
    デコレータでサブセグメントも定義

    View full-size slide

  40. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    メトリクス

    View full-size slide

  41. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    メトリクス の概念

    View full-size slide

  42. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    これまでのメトリクス出力
    Synchronous
    [課題]
    Metric のフォーマットに
    従うのが大変
    冗長!
    同期出力…

    View full-size slide

  43. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    これまでのメトリクス出力
    Synchronous
    [課題感]
    Metricのフォーマットに
    従うのが大変
    複数出力はさらに冗長!
    同期出力…

    View full-size slide

  44. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools メトリクス出力
    Asynchronous
    [解消]
    Metric のフォーマット
    を意識しない
    非同期出力!

    View full-size slide

  45. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools メトリクス出力
    Asynchronous
    [解消]
    Metric のフォーマット
    複数出力でも意識しない
    非同期出力!

    View full-size slide

  46. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools メトリクス出力
    Asynchronous
    Result
    Embedded Metric Format
    を使用している

    View full-size slide

  47. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools はオールインワン
    Environment variable Value
    POWERTOOLS_SERVICE_NAME shopping-cart
    POWERTOOLS_METRICS_NAMESPACE e-commerce-app
    LOG_LEVEL INFO
    環境変数で名前空間を管理

    View full-size slide

  48. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    ユーティリティ

    View full-size slide

  49. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    AWS Lambda Powertools

    View full-size slide

  50. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    AWS Systems Manager Parameter Store, AWS Secrets
    Manager, Amazon DynamoDB
    • 指定された時間(デフォルト
    は5秒)のパラメーター値を
    キャッシュ
    • JSONまたはbase64でエンコ
    ードされた文字列からパラメ
    ータ値を変換

    View full-size slide

  51. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    SQS バッチプロセス
    • 正常処理メッセージがSQSに返却されるのを防止
    • バッチメッセージを個別に処理するためのシンプル
    なインターフェイス

    View full-size slide

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

    View full-size slide

  53. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    Lambda Powertools を活用しましょう!
    aws-samples / aws-lambda-powertools-python aws-samples / aws-lambda-powertools-java

    View full-size slide

  54. © 2020, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
    AWS Lambda Powertools 活用デモアプリ
    aws-samples / aws-serverless-airline aws-samples / aws-serverless-shopping-cart aws-samples / serverless-ecommerce-platform

    View full-size slide