[レポート]SRV301: RDS / RDBMSソリューションでLambdaを使用するためのベストプラクティス #reinvent

AWS re:Invent 2018での「Advanced Continuous Delivery Best Practices」の聴講レポートです。継続的デリバリーのベストプラクティスについてのセッションです。
2018.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、坂巻です。

本記事はAWS re:Invent 2018のセッション「Best Practices for Using AWS Lambda with RDS/RDBMS Solutions」のレポートです。 このセッションはChalk Talkなので、どこまで理解できるか不安だったのですがチャレンジしてみました。

概要

Are you considering using AWS Lambda with your RDS/RDBMS solutions but don’t know where to start? In this session, we look at recommended architectural patterns and best practices around using RDS/RDBMS solutions with Lambda functions. We also discuss migration steps—covering migration from on-premises RDBMS solutions to AWS serverless infrastructure keeping the same RDBMS application model. Come and join our discussion, ask questions, and learn more about using Lambda with RDS/RDBMS solutions.

スピーカー

スピーカーは以下の2名です。

  • Mayank Thakkar - Global Solutions Architect, AWS
  • Emma Zhao - Software Development Manager

レポート

RDS / RDBMS Lambdaのベストプラクティス

  • ENI構成用に複数のAZでサブネットを使用する
    • AZ障害およびIPアドレス枯渇からの保護
  • LambdaをVPC内のENIに接続する
    • スケーラビリティは、使用可能な空きIPアドレスとENI制限に依存する
    • ENIスタートアップペナルティ
  • (可能であれば)パブリックホスト名のDNS解決を避ける
  • VPCモードのLambdaにはデフォルトでインターネットアクセスがない
    • インターネットアクセスを有効にするためにVPC内にNATゲートウェイを追加する

Lambdaとの接続プーリング - 課題

  • Lambdaコンテナの破壊を示すフックなし
    • コンテナがリサイクルされたときに明示的に接続を閉じることができない
    • 接続をクリーンアップするためにデータベースTTLで落ちる
    • セッションのリークにつながる可能性がある
  • Lambdaのライフサイクルを制御できない
    • 多くの接続がアイドル状態になることがある
  • 異なるLambda関数のための厄介なコンテナ
    • Lambda関数間のconncetionsの再利用

並行処理の制限 - 利点

  • Lambda同時実行制限は、アカウントレベルまたは機能レベルで設定
  • セットアップが簡単
    • アカウントレベルの上限にはAWSサポートが必要
  • Lambdaは呼び出しの再試行を管理

並行性の制限 - 課題

  • アカウントレベル制限
    • アカウント全体でLambdaをカバーする - DBのインターフェース機能を分離するのは難しい
  • 機能レベル制限
    • DBアクセス機能の事前知識が必要
    • 限界はピーク並行性に対応する必要がある - 先行アプリケーション動作の知識が必要
    • Lambdaの負荷が変わるため動的に接続を分散することができない

デモ

  • LambdaらDBに接続してCloudWatchメトリクス等を確認するデモがありました 01 02

動的接続管理 - メリット

  • スケーラブルなsoloution:LambdaとAmazon DynamoDBに依存
  • DBの観点から管理される接続数
    • Lambda関数の数に制限なし
  • ランタイム関数@ランタイム間でDB接続を広げることができる
    • チョークポイントを排除しホットスポットに役立てる
  • 簡単なアップデート:DynamoDBを使用して使用可能な接続数を制御
  • 接続不能エラーに対応するためにユーザーが公開したCloudWatchメトリクス

動的接続管理 - 課題

  • 抑制された呼び出しの再試行がない:カスタムソリューションが必要
  • より多くのリソースを管理する
  • 接続を再利用しない
  • わずかに増加したレイテンシー

まとめ

  • Lambdaケーリングモデルと接続プーリングは混在しない
    • 単一の接続を使用しグローバルセクションで初期化する
  • ソリューションとベストプラクティス
    • アカウントと機能レベルの並行性制限
    • カスタムソリューション:動的接続管理

Questions?

03

ここからは、チョークトークらしく質疑応答の時間でした。 ですが、テキストがない状況で質問も長く、聞き取ることができませんでした..

そのため、こちらのセッションレポートについては以上となります。

さいごに

始めてのチョークトークでした。前半はチョーク感がなかったのですが、後半からチョーク感全開でした。Q&Aタイムは質問も多く、登壇者以外からAnserがでたり(たぶん)と、賑わっていました。理解できればすごく楽しめそうなセッションだと感じたので、またの機会にチャレンジしたいです。英語がんばるぞい