こんにちは!
CI事業部ソリューション開発セクションの西川です。
AWS Summit Japan2024に参加して、特に印象的だった「サーバーレス開発のベストプラクティス」のセッションについてレポートを纏めました!
私は普段あまりインフラを触らない開発エンジニアですが、とても面白くて勉強になる内容でした^^
Agenda
- サーバーレスとは?
- サービスフルなサーバーレス
- 生成AIとサーバーレス
- まとめ
※スライドの画像は公開されている動画より引用
1.サーバーレスとは?
サーバーレスに求められることは、サービスの増加とともにこの10年で変化しています。
つまりこれからのサーバーレス開発では、
「サーバー管理が不要(サーバーレス)」×「サーバーレスサービスを活用(サービスフル)」
な構成が求められるということですね。なんだかかっこいい響きですね!
2.サービスフルなサーバーレス
本筋の前に、サブタイトルがとても良かったので紹介↓
Compose, Configure, then code(構成、設定、そしてコード)
私が先ほど日本語でごちゃごちゃ言っていた内容がこんなにもスマートに表現されています。
さすがAWSの社員さんです。サブタイトルまでイケてる。
そのLambda必要?
サービスフルなサーバーレス構成を考える上で鍵になるのが「そのLambda必要?」という視点なのかなと感じました。
誤解を生み、対立を呼び、やがて争いへと発展…してはいけないので補足すると、
Lambdaを使うのがバッドプラクティスということではなく、イベント連携やフロー管理のサービスで補えるならば置き換えてスマートにしようというお話です。
このスライドが、私がごちゃごちゃ言っていた内容の全てです。
最初からこのスライドを掲載しておけばLambda過激派の皆様を怒らせることもなかったかもしれません…
当たり前ですが、Lambdaの数と独自のコードの保守コストは比例します。
他サービスに置き換えられないか考えましょう。という内容でした。
責務の委譲、単一責務の原則に基づいた設計
サービスに責務を委譲することで、以下のメリットが得られます。
- アプリケーションの拡張容易性を上げる
- コスト削減
また、Lambda関数自体も単一責務の原則に基づいた設計にすることで
- パフォーマンスの向上
- セキュリティの向上(それぞれのLambdaに付与するIAMロールの範囲を狭くすることができる)
が見込まれます。分割しすぎると運用が大変になるので適切な粒度での分割が重要です。
オーケストレーションとコレオグラフィの使い分け
それぞれスライドのようなサービスが用意されています。
これらをうまく使い分けて活用することで
独自のコードを記述するのではなく、configurationとして組み込みましょうというお話でした。
Lambdaを他のサービスに置き換える例
シンプルなLambda関数を組み込みの統合に置き換える方法についてのお話。
例1:Step FunctionsのAWS SDK integrationsを利用すると、Lambdaを使わずAWSサービスを直接呼び出すことができる
例2:Amazon API Gatewayのインテグレーションを利用すると、プロキシとして機能しているLambdaを置く必要はない。
例3:EventBridge Pipesを利用すると、DynamoDBストリームズを使って差分データをLambdaで処理してEventBridge event busへあげるのと同じ構成をとることができる。
生成AIとサーバーレス
2023年11月よりAWS Step FunctionsとAmazon Bedrockが最適化されて統合ができるようになったそうです。
変更点1:Invoke Model
Amazon Bedrockの基盤モデルを呼び出す際に、LambdaからではなくAWS Step Functionsから直接呼び出すことが可能になった
変更点2:Create Model Customization Job .sync
モデルのカスタマイズ用ジョブ作成の機能が追加された。同期的に呼び出すことができるので、モデルをファインチューニングして結果を待ち次の処理を進めるような使い方ができる
まとめ
サーバーレスアーキテクチャの能力を最大限活用するためには、以下の要点を押さえる。
- サービスフルなサーバーレスによってLambdaの処理を委譲
- オーケストレーションとコレオグラフィを適切に組み合わせる
- 生成AIを使用したサーバーレス開発では AWS Step Functionsを使うのがよい
これらを意識することで高パフォーマンス+低コストを実現することにつながる。