トランプ兵の記憶と記録

普通のアプリケーションエンジニアの備忘録

AWSの基礎を学ぼう 特別編 最新サービスをみんなで触ってみる LambdaとRDS Proxy

目的

AWSの基礎を学ぼう 特別編 最新サービスをみんなで触ってみる LambdaとRDS Proxy - connpass の復習

ハンズオン資料

https://github.com/harunobukameda/RDS-Proxy-AWS-Lambda/

ハンズオンの前に

イベント宣伝

aws.amazon.com

classmethod.jp

LT

speakerdeck.com

ハンズオンの復習

作ったAWSリソース

  • Cloud9
    • RDS (MySQL) に接続するため
  • Secrets Manager
    • RDS ProxyがRDSに接続するための情報を管理するため
  • RDS
  • RDS Proxy
  • Lambda関数
    • MySQLに接続するコードはNode.jsを利用
    • 接続処理を実装するのは意外に手間なので、事前に用意されたzipをアップロードした
  • VPC
    • デフォルトVPCを利用

作ったものの構成

Cloud9は省略

f:id:zoosm3:20211002193327p:plain
20211002_AWSハンズオン

  1. Lambda関数 -> RDS Proxy -> RDS
  2. Lambda関数 -> RDS

2通りの接続を試し、レスポンスタイムを比較した

RDS Proxyのメリット

  • コネクションプールが使える
    • Lambdaは常時起動するわけではないため、データベース接続でコネクションプールが効かない
    • RDS Proxyを使うとコネクションプールとコネクションプールの共有ができるようになる
  • failoverの時間が短縮できる

Amazon RDS プロキシの料金 | 高可用性データベースプロキシ | アマゾン ウェブ サービス

Amazon RDS プロキシでは、アプリケーションがデータベースと確立した接続をプールおよび共有でき、データベースの効率とアプリケーションのスケーラビリティが向上します。

RDS プロキシを使用すると、Aurora と RDS データベースのフェイルオーバー時間が最大 66% 短縮し、
AWS Secrets Manager および AWS Identity and Access Management (IAM) との統合によりデータベースの認証情報、認証、アクセスの管理が可能となります。

RDS Proxyのデメリット

設定上の注意

  • RDS作成時に『拡張されたログ記録』の注意を入れる。デバッグに使うため
  • 本番運用時はセキュリティグループで必要な制限を入れること
  • Cloud9からRDS Proxyに接続する際、ERROR 2013 (HY000): Lost connection to MySQL server at 'handshake: reading initial communication packet', system error: 11 が発生することがある。RDS Proxyの構成に時間がかかることがあるので、数回接続を試すこと
  • ハンズオンはパスワードがハードコーディングされているが、LambdaでRDS Proxyに接続するコードを書く時、接続情報はSecurity Manager経由で取得するようにした方が良い

レスポンスタイムの比較

手元の環境だと、LambdaからRDS Proxyに接続した場合

初回 1,565ms, 2回目 232.26ms, 3回目 224.27ms, 4回目 50.76ms

初回はファーストタッチペナルティがあるのがわかった

ハンズオンで得た知識

  • Cloud9のデータベースの実態はMariaDB
  • パスワードを人力で設定するなら、ローテーションしないのが近年のトレンド
  • RDS Proxyを使うとピン留めという現象がある

ハンズオンの感想

  • ハンズオン2回目の参加で前回より手を動かしやすくなった。ずっとZoomを見ているのではなく、声を聞きながら自分で手を動かしたり工夫が必要
  • ハンズオンの件名を見てもっと初心者向けのLambdaの話かと思っていたが、RDS Proxyの説明が多くてためになった

  • AWSでのサーバレスでハマりやすいところがわかった。とにかくコネクションプールが関門かもしれない

  • Lambdaを実運用するときは、アーキテクチャや開発運用に注意しないと大変
    • 言語の選定
    • データベースはRDBかNon RDB
    • 本番サービスでLambda関数のソースコードをzipアップロードする?CI/CDを組まないと管理が大変そう
    • 接続情報をハードコードしない
  • バッチのように単発で起動する関数でない限り、Lambda関数からRDSを使うならRDS Proxyはあった方がいいかもしれない
  • ピン留め注意!
    • JavaアプリケーションはコネクションプールやPrepared Statementを大前提にしたりするので、気をつけないとピン留めの原因になりそう
    • 監視も大事
  • AWSは公式ドキュメントや発表スライド、Developers.IOをしっかり読む
  • ハンズオンは雑談やQAが勉強になる

来週のGrafanaも参加します。ありがとうございました。