📎

[AWS Summit Japan 2024]セッションレポート:サーバーレス開発のベストプラクティス

2024/06/23に公開

はじめに

2024年6月21日に幕張メッセで開催されたAWS Summit Japan 2024に参加してきました。
面白く記憶に残ったセッションが多く、備忘も兼ねて記事にしていこうと思います。

サーバーレス開発のベストプラクティス

概要

本セッションでは、サーバーレス開発のベストプラクティスを中心に解説されていました。
方向性としては、AWSの様々なサービスを最大限に活用し、本質的でない重労働はAWSサービスに任せ、ビジネス価値のあるロジックに集中しようというものです。
特に注目すべき点は、Step Functionsを中心としたサービス間のインテグレーションを、最新トレンドのAmazon Bedrockを使用した生成AIアプリケーションを例に解説していた点です。これにより、非常に有益なセッションとなっていたと感じました。

1. サーバーレスの定義

AWS Lambdaが誕生して、今年で10年目となった。

  • 2014年当初:サーバーやインフラの管理が不要で実行できるコード
  • 現在:複雑なインフラを管理することなく顧客に価値を提供できること

2. サービスフルなサーバーレス

AWS Lambdaに、ルーティングやエラーハンドリング、リトライロジックなども含めて責務とするやり方から、サービスに責務を委譲する。

  • "Compose, Configure, then code" の考え方
    AWS のマネージドサービスを組み合わせてアプリケーションを設計し、選択したサービスを適切に設定し、最小限必要なビジネスロジックのみをコーディングする。

  • The lift & shift から The migration
    従来のアプリケーションをそのままクラウド移行するのではなく、クラウドサービスに責務を委譲し、アーキテクチャを最適化する。

3. Programatic Lambda

AWS Lambdaにルーティングロジックまで備えた実装"Lambda-lith"から、適切な設計と責務の分離に基づいた"Pragmatic Lambda"へ。
グループ化には、境界付けられたコンテキスト、開発組織の構造、IAMパーミッションのスコープなどを考慮。

4. オーケストレーションとコレオグラフィ

オーケストレーションとコレオグラフィの両者を適切に組み合わせて使用することが重要

  • オーケストレーション:中央集権的な制御(例:AWS Step Functions)
  • コレオグラフィ:分散型の協調(例:Amazon EventBridge)

5. ライブストリーミングとオンデマンド配信を例に

サーバーレスアーキテクチャで構築されたライブビデオストリーミングアプリケーション(ServerlessVideo)を例に、具体的なサーバーレスアーキテクチャを考える。

シンプルな構成から考える。

サービスフルなサーバーレスアーキテクチャ

5-1. AWS Step Functions

AWS Step Functions の AWS SDK integrations を活用する。

5-2. Amazon API Gateway

AWS Step Functions の AWS SDK integrations を活用する。

5-3. Amazon EventBridge

Amazon EventBridge pipes による直接的なサービス統合する。

6. 生成AIとサーバーレスの統合

動画のタイトルや説明やビデオ用のアバターの画像を生成AIで作成する。
また、人間によるフィードバックプロセスを組み込む。

  • Amazon Bedrock を活用したタイトル・説明文生成
  • AWS Step Functions による生成AIワークフローの管理

6-1. AWS Step Functions

AWS Step Functionsがサービスを呼び出す種類は3パターンある。

  • リクエスト・レスポンス
  • ジョブ実行(.rsync)
  • コールバック(.waitForTaskToken)

AWS Lambdaで単一タスクのワークフローを実装すると、エラー処理、例外のキャッチ、再試行、可観測性の確保など、開発者が管理すべき責務が増加する。そのため、これらの機能を備えたマネージドサービスを活用してワークフローを設計することが推奨される。

また、Public API Integrationとして、「Call third-party API」を利用した外部APIの呼び出しが可能となった。

Status codeごとのエラーハンドリングをワークフローとして定義できる。

失敗からの再実行(Redrive from failure) することが可能。

人間によるフィードバックは、コールバックパターンを使用できる。
タスクトークンを用いて非同期処理を管理し、外部システムや人間の介在する処理のための待機状態を実現。

6-2. Amazon Bedrock

生成AI基盤モデルへのアクセスは、APIを介してリクエストが可能。

7. まとめ

  • サービスフルなサーバーレスによって Lambda の処理を移譲し、クラウドの中でアプリケーションを組み合わせていく
  • オーケストレーションとコレオグラフィを組み合わせ、自律的で拡張容易性を高めるサーバーレスアーキテクチャを構築
  • 生成AI アプリケーションのために AWS Step Functions をより効果的に、より賢く使いこなす

Discussion