「ServerlessDays Tokyo 2024」に参加してきました

感想

  • 運営の方からお願いのあったフォーマットで
  • ①今日1番良かったセッションと良かったポイント
    • 毎日放送の野球中継の話が1番良かった
    • ユーザとして身近な内容なのでそそられたし、技術面の話も選定の流れなど面白かった
    • 土曜朝からで眠気もあったがこれだけは最後まで聴き入ってた
    • 他には生成AI関連はこれまで接点がなかったから知識が増えてよかった
  • ②自分のプロジェクトで今度TRYしてみよっかなと思ったサーバーレスな施策・機能・打ち手
  • â‘¢ServerlessDays運営への感想・フィードバック
    • 会場が広くてどの席でもゆったり見れたのが良かった
    • セッションが詰め込みまくりな割に休憩は確保されてたので慌ただしさもなかった
    • 昼休憩のまとまった枠はなかったけど見ながら食べればいいので全然違和感なかった

社内でのサーバーレスアプリケーション開発を、プラットフォームエンジニアリングを整備して迅速化・安定化させる取り組み

  • 若槻龍太さん(クラスメソッド株式会社)

クラスメソッドのサーバーレス

  • 2017年にサーバーレス開発部ができた
    • Lambda(Python), Dynamo, API Gateway, SAM, CloudFormationなど
    • 2019年になるとTypeScriptの採用が増えた
      • Humble Objectパターン
  • 2019年から技術軸からプラットフォーム軸に組織が変わった
    • 各チームでサーバーレスをデフォルトで採用されてた
    • 各開発チームの中で技術選定されるように
      • 言語やIaC周りそれぞれで選定されるように
      • 社内のプラクティスが活かされない
  • 2023年から技術軸に加えて横串チームができた
    • 社内で使われてる技術をベースにテンプレート化

AWS Lambdaを支える技術

Lambdaの裏側

  • Isolation
    • Lambdaは小さいサーバでいい
    • 昔はT2インスタンス上で動いてた
    • 今はFirecrackerで効率良くなった
  • Utilization
    • オンプレはover/under requestが起きてしまう
    • オートスケールすれば多少は
    • Lambdaならもっと最適化
      • 平準化させるよりできるだけサーバに寄せて効率的にしたい
      • スケールさせなきゃいけなくなったときのために統計情報からいい感じにしてる
  • Performance
    • Lambdaへのインプットはパラメータとコード
      • zipは最大250MB
      • コンテナイメージなら最大10GB
    • 10GBを毎回プルして展開すると遅い
      • handlerでアクセスするのは5%程度
      • いろんな箇所でキャッシュを持っている
      • イメージをchunkに分けて管理
  • Cell-based Architecture
    • LoadBalancer/Compute/StorageのかたまりをCellとしてスケールさせる
  • Shuffle Sharding
    • 負荷分散でPoison Pillが起きると結果的に全台壊れてしまう
    • Cell-based ShardingしてるとPoison Pillが入ったCellが落ちるだけで済む
      • 同じテナントに紐づいてると影響受けてしまう
    • Shuffle ShardingだとCellに入る組み合わせがシャッフルされる
      • Poison Pillの影響を受けても部分的で済む
      • 組み合わせが増えるほど影響が小さくなる
      • Lambdaは利用者が膨大なのでとても小さくできる

実践!サーバーレス RAG 構築:Firestore ベクトル検索と VertexAI LLM 活用

サーバーレスでRAG

  • RAG(検索拡張生成)
    • LLM(大規模言語モデル)の質を向上させるための技術
    • 信頼できる専門性も理解した最新かつ正確なデータをもとにした回答をさせるために必要
  • RAGの有無での違い
    • 「メニューを教えて」っていった時にRAGをしてないとお店を言ってくれないと分からない
    • RAGをしてるとお店の情報がわかるので答えられる
  • RAGをするには
    • データを登録しておく
    • それをAPIで参照する
  • Cloud Run
    • コンテナをサーバーレスで起動できるサービス
    • コンテナをデプロイするだけでhttpのURLが自動で発行される
    • トラフィックに応じて高速にスケーリング
    • アクセスがある分だけの課金
    • スケジュール/イベント駆動での実行ができる
    • カナリアリリース的な仕組みもある
  • VertexAI
    • AI関連の幅広いサービス
  • Firestore
    • サーバーレスなデータベース
    • スケーラブルなドキュメントDB
      • keyに対していろんな情報が紐づく
    • 従量課金
    • クライアントとのリアルタイム同期可能
  • RAGの例
    • 登録
      • CloudStorageにファイルアップ
      • イベント駆動でCloudRunに情報をpost
      • CloudRunがchunkに分割してファイルを取得しベクトルデータをFirestoreへ登録
    • 取得
      • 情報が必要になったらCloudRunからFirestoreにベクトル検索する
      • 取得結果を踏まえてにgeminiなどLLMに生成リクエスト
      • コンテキストを含んだ生成結果を返せる
  • 結果の分析
    • 生成結果を生成AIに評価させる
      • 評価のしかたを詳細に指定することで結果のフォーマットを使いやすくできる
    • 継続的に評価させて改善をしていくといい

サーバーレスAPIのパフォーマンステストとアプリの未来

サーバーレスでAPIを作る

  • サーバーレスでAPIを作る場合の課題
  • Postmanのパフォーマンステスト
    • シナリオを指定したユーザ数でAPIアクセステストができる
    • これを使うとコールドスタートの様子もテストできる

WebAssembly を使ったサーバレス開発の基礎と実践

  • 澤田径さん(Fastly)

WebAssembly

  • スタックベースの仮想マシン用バイナリ命令フォーマット
  • wasmランタイムに読み込ませると動く
  • wasmランタイムはブラウザに入っている
  • ブラウザ以外でも使えるようになってきている
  • 2012年頃からある
  • 2016年主要なブラウザが実験的なサポート開始
  • 2019å¹´W3C勧告
  • Wasi(WebAssemblySystemInterface)
    • システムの各種リソースへのインターフェース定義(FileSystem,Networkなど)
  • Wasmtime
    • WebAssemblyのランタイムの1つ
    • BytecodeAlliance製
    • FastlyのOSSもこれに合流

WebAssemblyとサーバーレス

  • Fastly Compute
    • Fastly上でWasmバイナリを実行できる
    • グローバルな100拠点二配置
    • 起動は数十msなのでコールドスタートとか考えなくていい

IT初心者が挑戦!TVの新しい演出のアジャイル開発

スポーツ中継とサーバーレス

  • スポーツ中継ではリアルタイムの映像だけでなく事前に用意した過去素材も使う
    • 事前に用意した素材しか出せない
    • 特定の場面が出た時に表示したくなる過去の場面がある
  • 特定場面をすぐに検索できるWebシステムを作った
    • 打者や結果など入れて検索できる
    • それをダウンロードしてすぐに放送に載せられる
    • 生成AIで場面を特定する
      • ラジオの実況を文字起こししてそこからある程度の場所を特定
  • システムの構築
    • 調べ始めてみると
      • DB意外とお金かかる
      • 使ってない間もサーバ料金かかる
        • とは言ってもデータ上げる人は忙しいから起動し続けたい
    • TiDBに出会った
      • 社内のいろんなシステムがTiDBに
      • 最大月8万かかってたのが1000円以内になった
    • AppRunnerをたまたま知って同僚が作ったDockerイメージあげたら動いた
    • いろんなサーバーレスコンポーネントを組み合わせていろんなのを作っていった
  • テレビとIT
    • 開発が必要と決まるのがぎりぎり
    • 先の話は本当にやるか分からないのでぎりぎりまで動けない
    • アジャイルで高速に開発できる環境が向いている
      • サバーレスなどマネージドサービスでスピード感ある開発
      • ChatGPTなどの活用でも追い風

サーバーレスで構築するBreaking Down LIVE

  • 秋葉祐人さん(BACKSTAGE) / PingCAP

格闘技中継とサーバーレス

  • Breaking Down LIVE
    • 格闘技の配信サービス
  • もともとの構成
    • Amplify
    • Cloud Firestore
    • Cloud Functions
    • Firestoreで実装考慮不足でホットスポット発生しシステム止まってしまった
  • システムリプレース
    • 負荷予測が難しい
    • フロントはNextã‚’Vercel上で
    • バックエンドはCloud Runã‚’Typescriptで
      • 高いスケーリング
      • 従量制課金
    • Cloud Runでの課題
      • 急激なスパイクで追いつかない
        • レイテンシ5秒悪化する
        • コンテナ起動に時間がかかる
        • Container Startup LatencyのP99が9秒
      • 不要な依存の削除などで改善
    • データベースの選定
      • 急激なスパイクに対応できるものがいい
      • アクセスが少ない時に無駄に課金されないものがいい
      • 手作業で調整したりで運用コストがかかるのは避けたい
      • ->TiDBサーバーレス
        • MySQLと互換性ある分散型SQLデータベース
        • TiDB CloudとTiDB Serverlessがある

SPHERE-1 EYE衛星を使用したライブ動画ストリーミング及びライブ操作

衛星を使ったライブストリーミング

  • 宇宙を身近にする
  • 衛生から写真を撮る
  • ライブ動画ストリーミングもできる
    • 通信できるタイミングは1日多くて4回で1回最大10分程度
  • サーバーレスでの実現
    • 衛星から送られてきたデータを取り出してストリーミングで送る処理
    • GSaaSが地上局から動画を取得して自前の処理を入れてMediaServicesに渡してCDNで配信
    • 衛星と通信する間は起動しておく必要がある
    • EvendBridgeでFargateをスケジュール実行

Momentoが考える開発者の未来

  • 中川誠一さん/加藤裕士さん(Momento)

Moment

  • Moment
  • Moment Cache
    • サーバーレスキャッシュサービス
  • Moment Topic
    • pub-subサービス

生成 AI による新しい UI/UX 〜 サーバーレスで実現する Generative UI の世界〜

Generative UI

  • Generative UI
    • htmlなどを生成してUIを作ること
  • 対話的なIFでのサイト制作
    • Lambda経由でBedrockを叩く
    • Bedrock叩く時にhtmlを生成してほしいといった内容を差し込む
    • Lambda Response Streamingでhtmlã‚’streamで返せる
      • Nextã‚’Lambda上で
  • 構造化されたテキストをUIに
    • 構造化させた結果を出力させれば既存ツールでUIにできる
      • Markdownを生成させて既存の何かしらでUIを整える
    • jsonで生成させるとJSでの扱いがしやすい
    • Bedrock Knowledge BaseでRAGができる
  • 自律的なAIがUIを描画する
    • 断片的なコードを生成するだけでなく何をどこに作ってどう連携するかなどまでやってもらう
      • ローカルにファイルを書き出したりする必要がある
  • RAGを応用した制作
    • Figmaã‚„GitHub上のコードを取り込む

静的サイトのCI/CDでも侮るなかれ!Docs as Codeに沿ったセキュアな開発プロセスの実践

Docs as Code

  • コーディングと同様のツールでドキュメントを作成する手法
    • mdだと軽量だし差分管理もしやすい
    • 生産性品質の向上につながる
  • SSGでページ化してる
    • MkDocsを使ってる
    • 検索機能が入ってる
  • AWSリソースとドキュメントを同じリポジトリで管理してる
    • cskの設定なども含んでる
  • 開発プロセス
    • ローカルでプレビューを確認しながらmdを書く
      • Draw.ioで図を書いたりもしながら
      • PlantUMLも使ってる
    • commit時にmdã‚’textlintでチェック
      • 表記揺れの防止
      • 変更ファイルのみチェックが走るように
    • Pushã‚„PR作成時にGitHubでシークレットスキャンとコードスキャン
      • APIキーなど入れてないこと
      • 脆弱性がないこと
    • PR作成時にGitHub ActionsでCI/CD実行
      • テスト実行
      • 全体を静的チェック
      • approve入るまでマージ禁止
    • マージされたらCDK Pipelinesでデプロイ
      • buildして静的ファイルを生成
        • パートナー企業向けにzip化したものも生成
        • 特定のURLの除去なども
      • AWSリソースの単体テスト
        • 公開設定など
        • スナップショットテストで意図しない変更が入ってないか
      • CloudFormationテンプレート生成
      • パイプラインに変更があったら再構築
      • S3にデプロイ
      • WAFのIP制限をチェック