JAWS-UG京都 JAWS DAYS直前 LT大会

Lambdaを使い倒す

自宅サーバーをLambdaに移行

株式会社シーズ Yuta Nakamura / よ〜ん

むか〜しむかし

京都にパソコン大好き少年がいた。
その少年は、

  • 小遣い叩いてサーバーを買い
    • 便利さのために構成を複雑化し
      • 運用で疲弊した(それが楽しかった)

むか〜しむかし

京都にパソコン大好き少年がいた。
その少年は、

  • 小遣い叩いてサーバーを買い
    • 便利さのために構成を複雑化し
      • 運用で疲弊した(それが楽しかった)

自己紹介

よ〜ん / Yuta Nakamura

  • 株式会社シーズ
    • クラウドソリューション事業部
  • パソコン大好き少年
  • Twitter(X)
    • @tesla_yoon
  • 好きなAWSサービス
    • AWS Step Functions
    • AWS CDK
    • Amazon Lightsail

Yoon Wouchi Service (YWS)

YWSで動いているサービス達

  • 落ちると困るWebアプリ
    • 要RDB / インターネット
  • 落ちても困らないWebアプリ複数
    • 要RDB / インターネット
  • 落ちると困るバッチ
    • 要インターネット
  • 落ちても困らないバッチ複数
    • 要RDB / インターネット
  • ファイルサーバー

YWSで動いているサービス達

  • 落ちると困るWebアプリ
    • 要RDB / インターネット
  • 落ちても困らないWebアプリ複数
    • 要RDB / インターネット
  • 落ちると困るバッチ
    • 要インターネット
  • 落ちても困らないバッチ複数
    • 要RDB / インターネット
  • ファイルサーバー

Lambdaをメインに使用して置き換える

YWSで動いているサービス達

  • 落ちると困るWebアプリ
    • 要RDB / インターネット
  • 落ちても困らないWebアプリ複数
    • 要RDB / インターネット
  • 落ちると困るバッチ
    • 要インターネット
  • 落ちても困らないバッチ複数
    • 要RDB / インターネット
  • ファイルサーバー

Lambdaをメインに使用して置き換える

もちろん🉐🉐構成で

まずはRDB

まずはRDB

Aurora / RDSは高い・DynamoDBじゃ大幅な改修が必要

→では、どうする

VPC Lambda + SQLite on EFS

参考:ECSとRDSをやめて、AWSコストを9割削減しました
https://zenn.dev/beenos_tech/articles/lambda-sqlite-application

VPC Lambda + SQLite on EFS

EIPのコストとEFSのストレージコスト高々4$
個人利用であれば、🉐🉐でRDBを使用することができる。

VPC Lambda + SQLite on EFS

EIPのコストとEFSのストレージコスト高々4$
個人利用であれば、🉐🉐でRDBを使用することができる。

しかし、まだ問題が...

Single Purpose Lambdaに寄せて改修...?

Single Purpose Lambda

パスごと、メソッドごとにLambdaを作成する構成

Single Purpose Lambda

パスごと、メソッドごとにLambdaを作成する構成

既存のWebアプリがあるので改修は最小限にしたい

Lambdalith & Lambda Web Adapter

Lambda Web Adapter(LWA)

HTTPリクエストをLambdaイベントに変換する

引用:awslabs/aws-lambda-web-adapter
https://github.com/awslabs/aws-lambda-web-adapter

Lambda Web Adapter(LWA)

Dockerfileのコード追加のみ、アプリのコードは改修なしでLambdalithで動かすことが可能になった。








参考:Lambda Web Adapterを触ってみた感想(※)
https://speakerdeck.com/junkishigaki/impressions-trying-lambda-web-adapter
※ 私がLWAを知ったきっかけ

まだまだ問題が...

まだまだ問題が...

イメージからの起動のため、コールドスタートが発生

node_modulesもデカい...

SnapStartでコールドスタートを解決する

引用:Python および .NET 関数向けの AWS Lambda SnapStart の一般提供を開始
https://aws.amazon.com/jp/blogs/news/aws-lambda-snapstart-for-python-and-net-functions-is-now-generally-available/

SnapStartでコールドスタートを解決する

INIT済み実行環境をスナップショット化、一度実行されたら特定の時間、INIT処理を短縮

→初めのリクエストは少し時間がかかるが、以降はストレスなく扱えるレベルに

最後の問題点

最後の問題点

VPC Lambdaからインターネットに出れない…

超高級($45 / 月)なNAT Gatewayを使わず何とかしたい

とはいえ、InterfaceタイプのVPC Endpoinも金がかかる($10 / 月)

Gateway Type のVPC Endpointを使って無理やり解決する。

DynamoDB Gateway Endpointを使えばどうとでもなるはず🤔

生まれたパワーソリューションがこちら

つい最近答えを見つけた

引用:https://slide.ogadra.com/lambda-as-an-ecs-alternative

結果

自宅メインサーバーを撲滅できた。

結果

  • 電気代
    • 年間 45,000円
  • ハードウェア故障
    • 1回 32,000円(主にストレージ、過去に5回発生)
  • ファンの音と眠る日々
  • 再起動した後の戦闘機みたいな音に怯える日々

これらが全てなくなった。

しかもコンピューティングのコストは発生したことない。(無料枠内)

まとめ

  • 大前提として、便利なサービスやマネージドサービスを使って安心を買うのが正
  • 一方、個人・検証で使う範囲については...
    • なるべく安く試すために手探りで色々試してみる。
    • 業務では許されない構成を検証してみるものまた面白い。
  • Lambdaの莫大な無料枠に感謝🙇

VPNからIDベース制御へ

Appendix A

VPNからIDベース制御へ

従来:VPNで外から触れないを担保
(VPN自体はルーターのDDNSを使用していたりで無料)

Cognito at Edge

現在:Cognitoを使用し、認証・認可中心へ

Cognito at Edge

CloudFront + Lambda@Edge + Cognito User Pool

引用:awslabs/cognito-at-edge
https://github.com/awslabs/cognito-at-edge

Lambda@edgeはus-east-1にデプロイする必要がある

AWS CDKのEdgeFunctionコンストラクトで解決する

aws-cdk-lib.aws_cloudfront.experimental.EdgeFunctionを使用することで、Lambda@edgeをus-east-1にデプロイしてくれる。

new cloudfront.experimental.EdgeFunction(this, 'CognitoAuthFunction', {
  runtime: lambda.Runtime.NODEJS_LATEST,
  handler: 'index.handler',
  code: lambda.Code.fromAsset(path.join(__dirname, 'auth-handler')),
});

LLM on Lambda

Appendix B

LLM on Lambda

Lambdaランタイムの下にはOSのレイヤーが存在している
→システムコールが使用できる

SnapStartとシステムコールを使ってLLMをLambdaで動かす

memfd_createを使ってLLMがロードされた状態をスナップショットとして保持する。

8B程度の量子化されたモデルであれば動く
→無料枠内であればほぼ無料でLLMを使える。

参考:aws-samples/sample-chatbot-lambda-snapstart
https://github.com/aws-samples/sample-chatbot-Lambda-SnapStart/

まとめ②

Lambdaの可能性は無限大、無料枠に感謝しながら酷使させます。

参考・引用

ありがとうございました

  • Yoon Wouchi Service クラウド移行
    • VPC Lambda + SQLite on EFS
    • Lambdalith & Lambda Web Adapter
    • SnapStart
    • NAT GatewayなしでVPC内からインターネットに行きたい
  • Appendix
    • Cognito at Edge
    • LLM on Lambda