Amazon RDS ProxyがGAに!
Amazon RDS ProxyがGAされたことで、@Keisuke69 さんのツイートの最後のパーツが揃ったので、名実共に今年がサーバレス元年に。
これまでサーバレスアンチパターンと言われていた構成でも使えるようになり、サーバレスアンチパターンがほぼ無くなりました。
今月になってサーバレス関連のイベントや、Webinarが増えていて、いくつか参加して聴いた内容をまとめておこうと思います。
今年がサーバーレス元年な理由. それはLambdaに以下が揃ったから.
— Keisuke Nishitani (@Keisuke69) January 19, 2020
・カスタムランタイムで実質どんな言語でも利用可能
・VPC利用時のコールドスタート改善
・Provisioned Concurrencyでスパイク対応も可能
・RDS ProxyでRDBとの接続が現実的に
これまで5年で受けたフィードバックがついに結実. 強い
lambda × RDS
lambdaはイベントやリクエストのたびにコンテナが起動され、そのタイミングでDBへのコネクションが張られるため、同時に処理すべきリクエスト数分のコネクションが張られることになります。RDBMSは同時接続数に限界があるため、DBへの都度接続のオーバーヘッドを回避したいのですが、コンテナ間でコネクションプールを共有することは難しいため、スケールアップが前提のRDSにおいて、lambdaとRDSの組み合わせはアンチパターンと言われてきました。なので、lambdaはこれまで分散型データベースであるDynamoDBと組み合わせて使うことが前提になっていました。こちらから要約させてもらったので、詳しい内容は見てみてください。
RDS Proxy登場
RDS Proxyが登場したことで、lambdaとRDSのコネクションプールの役目をRDS Proxyが担うことができるようになり、コネクションを有効活用してLambdaからRDSにアクセスできるようになりました。ただ、RDS Proxyを使う場合にはコストが余計にかかることと、RDSがスケールアップが前提というのは変わらないので、RDS Proxy側でRDS側の最大接続数に対してコネクションを許可する割合を設定したりしながら、RDSのCPUやメモリなどのリソースが逼迫しないようにチューニングする必要性はありそうです。
lambda × EFSと新しいアンチパターン
lambdaからEFSをマウントできるようになったことで、lambda間でデータを保存、共有できるようになったのですが、その結果 lambdaでステートフルなアプリケーションを作ってしまう可能性が高まりそうです。これまでのサーバレスアンチパターンは解消されましたが、新しいアンチパターンが生まれることもありそうです。全てを無理にlambdaでやろうとすることが最大のアンチパターンという話もありました。
それでも制限や制約もある
lambdaは水平方向のスケーラビリティは確保されているものの、スパイクなどの急激なリクエスト数の変化や、リクエスト数が少なくてもUXのために遅延を回避したい場合、またはlambdaバースト制限の緩和に対しては、Provisioned Concurrencyを活用してチューニングする必要がありそうです。また、lambdaの実行時間15分を超えるような処理の場合は、Fargateの活用も考えるべきでしょう。
Provisioned Concurrencyのチューニングについては、ServerlessJPでのAWS下川さんのスライドを参考にさせてもらいました。
モノリスだっていいところもある
これだけサーバレスのアンチパターンが無くなると、モノリスは無くなっていく(無くしていきたい)と思ったりしたのですが、@tcshさんのツイートを読んでなるほどと。安定を求めるか変化を求めるか。やっぱりサーバレスを考える上では、ビジネスや文化や組織論的な話につながっていくんでしょうね。
変化しない環境で固定的な業務ならモノリス(密結合)の方が低遅延、高効率、安定動作なのは間違いない。
— HATANO Hirokazu (@tcsh) July 8, 2020
環境や使い方が変化しやすい時代だからマイクロサービスで疎結合にする。
高遅延、低効率、不安定動作を呑み込むメリットがある場合ならば、という前提で。(単一障害点の原則が重視される理由 https://t.co/gp0zgzlCyp
モノリスからサーバレスへ
なんでもサーバレスはアンチパターンとはいえ、適切な手順を経てサーバレスに移行することで得られるビジネス上の価値も大きいとは思います。AWS Expert Onlineの下川さんのセッションに、ベストプラクティスがギュッと詰まってました。
JAWS-UG でサーバーレス でのAPI管理の考え方について話しました。
— kensh (@_kensh) July 9, 2020
モノリスだったアプリをサーバーレス にしていく中で課題が出てきます。課題→解決、課題→解決という流れで進んでいきます!
スライドはこちらhttps://t.co/1z3nJKFumn
YouTubeも一般公開にしています。https://t.co/B9mlsJCPFC