Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CDK × サーバレスアーキテクチャを極める/Developers Summit 2024

WHIsaiyo
March 07, 2024
6.5k

AWS CDK × サーバレスアーキテクチャを極める/Developers Summit 2024

WHIsaiyo

March 07, 2024
Tweet

More Decks by WHIsaiyo

Transcript

  1. © 2024 Works Human Intelligence Co., Ltd. AWS CDK ×

    サーバレスアーキテクチャを極める
 Developers Summit 2024
 スピーカー
 恋塚 大、齋藤 康生
 1 1
  2. © 2024 Works Human Intelligence Co., Ltd. スピーカー
 2 恋塚

    大 Dai Koizuka
 早稲田大学商学部を首席で卒業。株式会社Works Human Intelligenceの前身と なる会社に新卒入社し、HR SaaS製品の開発に従事。FastLabel株式会社にてAI プラットフォーム製品の開発統括を務めた後、現職。CTO OF THE YEAR 2022 ファイナリスト。
 株式会社Works Human Intelligence 開発 
 齋藤 康生 Yasuo Saito
 2017年に株式会社Works Human Intelligenceの前身となる会社に新卒で入社。そ の後、複数のクラウドサービスの開発・運用に携わり、主にアプリケーションのサー バーサイドの開発やAWSにおけるクラウドアーキテクチャの設計を経験する。昨年 から一児の父親とエンジニアの両立に奮闘中。 
 株式会社Works Human Intelligence 開発 

  3. © 2024 Works Human Intelligence Co., Ltd. 目次
 3 02

    AWS CDKとサーバレスアーキテクチャ
 AWS CDKとは / サーバレスアーキテクチャとは / AWS CDK vs Serverless Framework / アーキテクチャ 
 03 ローカル開発環境
 理想のローカル開発環境 / API Gateway + Lambda / DynamoDB 
 04 運用で直面した課題と解決策
 Stackのリソース上限 / $aws sam start-api が Nested Stack に非対応 
 05 その他Tips
 コールドスタート対策 / Lambdaアーキテクチャ / 各開発者の専用クラウド環境 / Lambda構成 / デプロイパッケージ 
 01 はじめに
 会社紹介 / 製品紹介

  4. © 2024 Works Human Intelligence Co., Ltd. 目次
 4 02

    AWS CDKとサーバレスアーキテクチャ
 AWS CDKとは / サーバレスアーキテクチャとは / AWS CDK vs Serverless Framework / アーキテクチャ 
 03 ローカル開発環境
 理想のローカル開発環境 / API Gateway + Lambda / DynamoDB 
 04 運用で直面した課題と解決策
 Stackのリソース上限 / $aws sam start-api が Nested Stack に非対応 
 05 その他Tips
 コールドスタート対策 / Lambdaアーキテクチャ / 各開発者の専用クラウド環境 / Lambda構成 / デプロイパッケージ 
 01 はじめに
 会社紹介 / 製品紹介

  5. © 2024 Works Human Intelligence Co., Ltd. 会社紹介
 5 ERP市場人事・給与業務分野シェアNo.1*¹


    国内大手法人の3社に1社*²である約1,200社が導入
 510万*³の人事データを管理
 ✔ ✔ ✔ ※1 2021年度 ERP市場 - 人事・給与業務分野:ベンダー別売上金額シェア出典:ITR「ITR Market View:ERP市場2023」 ※2 社員数3,000人以上の法人(WHI調べ) ※3 2023年12月末時点の「COMPANY 人事」の契約ライセンス数合計 エンタープライズ向け統合人事システム
  6. © 2024 Works Human Intelligence Co., Ltd. 製品紹介
 6 人事データ等の自動連携


    人的資本指標の算出
 他社との比較
 COMPANY Human Capital Insight
 • データが様々なところに散らばっている 
 • 指標を算出するために、手間がかかる 
 • 自社の数値が高いのか、低いのかわからない 
 解決できること ✔ ✔ ✔
  7. © 2024 Works Human Intelligence Co., Ltd. 目次
 7 02

    AWS CDKとサーバレスアーキテクチャ
 AWS CDKとは / サーバレスアーキテクチャとは / AWS CDK vs Serverless Framework / アーキテクチャ 
 03 ローカル開発環境
 理想のローカル開発環境 / API Gateway + Lambda / DynamoDB 
 04 運用で直面した課題と解決策
 Stackのリソース上限 / $aws sam start-api が Nested Stack に非対応 
 05 その他Tips
 コールドスタート対策 / Lambdaアーキテクチャ / 各開発者の専用クラウド環境 / Lambda構成 / デプロイパッケージ 
 01 はじめに
 会社紹介 / 製品紹介

  8. © 2024 Works Human Intelligence Co., Ltd. AWS CDKとは(v2.93.0)
 8

    AWSインフラストラクチャをプログラミング言語で構築できるツールキット 
 TypeScriptやPythonで記述
 少量のソースコード
 CloudFormation生成
 ✔ ✔ ✔
  9. © 2024 Works Human Intelligence Co., Ltd. サーバレスアーキテクチャとは
 9 サーバーのプロビジョニング、スケーリング、メンテナンス不要


    AWSでは以下のアーキテクチャがよく用いられる
 ✔ ✔ 面倒なサーバー管理から解放され、コア製品開発に集中できる 

  10. © 2024 Works Human Intelligence Co., Ltd. AWS CDK vs

    Serverless Framework
 10 VS
 AWS CDK Serverless Framework
 サーバレスリソースのシンプルな記述
 容易なローカル開発環境構築
 CloudFormationライクな記述
 他のIaCツールとのダブルメンテ
 あらゆるリソースのシンプルな記述
 + AWS公式の安心感
 − ローカル開発環境構築の知見の少なさ
 + − ベンダーロックイン
 Serverless Frameworkがよく話題に上がるが、メリデメがある 
 + − + − リソース間の関係が見えにくい ファイル分割の難しさ コードの肥大化
  11. © 2024 Works Human Intelligence Co., Ltd. AWS CDK vs

    Serverless Framework
 11 VS
 AWS CDK Serverless Framework
 サーバレスリソースのシンプルな記述
 容易なローカル開発環境構築
 CloudFormationライクな記述
 他のIaCツールとのダブルメンテ
 あらゆるリソースのシンプルな記述
 + AWS公式の安心感
 − ローカル開発環境構築の知見の少なさ
 + − ベンダーロックイン
 Serverless Frameworkがよく話題に上がるが、メリデメがある 
 + − + − 新規リソースをどちらのツールで管理するか デプロイ機構の複雑化 学習コスト・メンテナンスコスト
  12. © 2024 Works Human Intelligence Co., Ltd. AWS CDK vs

    Serverless Framework
 12 VS
 AWS CDK Serverless Framework
 サーバレスリソースのシンプルな記述
 容易なローカル開発環境構築
 CloudFormationライクな記述
 他のIaCツールとのダブルメンテ
 あらゆるリソースのシンプルな記述
 + AWS公式の安心感
 − ローカル開発環境構築の知見の少なさ
 + − ベンダーロックイン
 Serverless Frameworkがよく話題に上がるが、メリデメがある 
 + − + − 快適なローカル開発環境を構築しつつ
 全てAWS CDKで管理できます!

  13. © 2024 Works Human Intelligence Co., Ltd. AWSアーキテクチャ
 13 フロントエンド

    一般的な CloudFront + S3 構成 バックエンド(アプリ) アクセスが多い時期が年度末に偏るため、 コストの観点からサーバレスアーキテクチャ API Gateway + Lambda + DynamoDB を採用 エンドポイントごとに 1つのLambdaを割り当て バックエンド(ETL) 大量データを効率よく処理できる PySpark搭載のGlueを採用 特に即レスが必要ないアプリのため DWHにはRedshift Serverlessを採用
  14. © 2024 Works Human Intelligence Co., Ltd. 目次
 15 02

    AWS CDKとサーバレスアーキテクチャ
 AWS CDKとは / サーバレスアーキテクチャとは / AWS CDK vs Serverless Framework / アーキテクチャ 
 03 ローカル開発環境
 理想のローカル開発環境 / API Gateway + Lambda / DynamoDB 
 04 運用で直面した課題と解決策
 Stackのリソース上限 / $aws sam start-api が Nested Stack に非対応 
 05 その他Tips
 コールドスタート対策 / Lambdaアーキテクチャ / 各開発者の専用クラウド環境 / Lambda構成 / デプロイパッケージ 
 01 はじめに
 会社紹介 / 製品紹介

  15. © 2024 Works Human Intelligence Co., Ltd. 理想のローカル開発環境
 前提 新規プロダクトで速度重視

    + 少数のフルスタックエンジニアのチーム Front + API の E2E な開発が ローカルで完結する環境 16
  16. © 2024 Works Human Intelligence Co., Ltd. AWS CDKのソースコード: API

    Gateway + Lambda
 18 Authorizer
 API Gateway
 API Construct

  17. © 2024 Works Human Intelligence Co., Ltd. AWS CDKのソースコード: API

    Gateway + Lambda
 19 Lambda Function
 API Gatewayとの紐付け

  18. © 2024 Works Human Intelligence Co., Ltd. ローカル開発環境: API Gateway

    + Lambda
 20 AWS SAM CLIを利用して3ステップで構築 
 1 $cdk synth によるCloudFormationテンプレート出力 2 $sam build によるビルド 3 $sam local start-api による起動
  19. © 2024 Works Human Intelligence Co., Ltd. 1. CloudFormationテンプレート出力
 21

    AWS SAM CLI等で利用するCloudFormationテンプレートを作成 
 --exclusivelyオプションを指定し、スタック間の依存を無視し、対象のスタックのみsynthする。 
 スタック毎に並列でcdk synthを実行することで、実行時間を短縮。 
 スタック毎の実行で時間を短縮
 ✔ 後続のステップで利用するため、スタック毎に特定のファイルに出力する。 
 スタック毎にファイル出力
 ✔
  20. © 2024 Works Human Intelligence Co., Ltd. --exclusivelyオプションを指定し、スタック間の依存を無視し、対象のスタックのみsynthする。 
 スタック毎に並列でcdk

    synthを実行することで、実行時間を短縮。 
 1. CloudFormationテンプレート出力
 22 AWS SAM CLI等で利用するCloudFormationテンプレートを作成 
 スタック毎の実行で時間を短縮
 ✔ 後続のステップで利用するため、スタック毎に特定のファイルに出力する。 
 スタック毎にファイル出力
 ✔
  21. © 2024 Works Human Intelligence Co., Ltd. 2. ビルド
 LambdaのDockerイメージをビルド

    
 Lambda関数が大量にあるため、ビルドに時間がかかる。 
 --parallelオプションを指定し、ビルドを並列することにより、ビルド時間を短縮する。 
 並列実行により時間を短縮
 ✔ Dockerイメージはソースコードを含むため、ソースコードの変更のたびにビルドする必要がある。 
 VS Codeの拡張機能(Run on Save)を利用し、ソースコード保存時にsam buildが実行されるようにすることで、擬似的にホットリ ロードを実現する。
 ホットリロード
 ✔ 23
  22. © 2024 Works Human Intelligence Co., Ltd. 2. ビルド
 LambdaのDockerイメージをビルド

    
 Lambda関数が大量にあるため、ビルドに時間がかかる。 
 --parallelオプションを指定し、ビルドを並列することにより、ビルド時間を短縮する。 
 並列実行により時間を短縮
 ✔ Dockerイメージはソースコードを含むため、ソースコードの変更のたびにビルドする必要がある。 
 VS Codeの拡張機能(Run on Save)を利用し、ソースコード保存時にsam buildが実行されるようにすることで、擬似的にホットリ ロードを実現する。
 ホットリロード
 ✔ 24
  23. © 2024 Works Human Intelligence Co., Ltd. 3. 起動
 ローカル環境に

    API Gateway + Lambda を起動し、localhost:5000でアクセス可能に 
 標準出力されるログは読みづらく、永続化されないため、 --log-fileオプションを利用しファイルへの
 ログ出力を設定する。
 
 ファイルへのログ出力
 ✔ v.1.80.0(2023年4月リリース)より、sam local start-apiコマンドがLambda Authorizerに対応した。 
 よりクラウド環境に近い構成がローカルで再現可能に。 
 Lambda Authorizerにも対応
 ✔ 25
  24. © 2024 Works Human Intelligence Co., Ltd. ローカル開発環境: DynamoDB
 28

    自作スクリプトを利用して3ステップで構築 
 1 公式のDockerイメージからDynamoDB Localを起動 2 $cdk synth によるCloudFormationテンプレート出力 3 自作スクリプトによるDynamoDB Localへのテーブル作成
  25. © 2024 Works Human Intelligence Co., Ltd. 自作スクリプト
 29 テーブル定義取得


    jsonファイルへ出力
 テーブル作成
 約80行のシンプルなスクリプトで実現可能 Python

  26. © 2024 Works Human Intelligence Co., Ltd. 目次
 30 02

    AWS CDKとサーバレスアーキテクチャ
 AWS CDKとは / サーバレスアーキテクチャとは / AWS CDK vs Serverless Framework / アーキテクチャ 
 03 ローカル開発環境
 理想のローカル開発環境 / API Gateway + Lambda / DynamoDB 
 04 運用で直面した課題と解決策
 Stackのリソース上限 / $aws sam start-api が Nested Stack に非対応 
 05 その他Tips
 コールドスタート対策 / Lambdaアーキテクチャ / 各開発者の専用クラウド環境 / Lambda構成 / デプロイパッケージ 
 01 はじめに
 会社紹介 / 製品紹介

  27. © 2024 Works Human Intelligence Co., Ltd. Stackのリソース上限: 課題
 31

    人的資本
 インサイト
 半年の開発で、1つのStackに宣言できるリソースの上限である500に迫る 
 上限500リソース

  28. © 2024 Works Human Intelligence Co., Ltd. Stackのリソース上限: 解決策
 32

    Nested Stack を利用し、APIの親パスごとにStackを分割することで解決 
 AWS CDK

  29. © 2024 Works Human Intelligence Co., Ltd. $sam local start-api

    が Nested Stack に非対応: 課題
 33 Nested Stackの場合に生成される Fn::GetAtt にコマンドが対応しておらず、UriにおけるARNの解決ができない 
 CloudFormation

  30. © 2024 Works Human Intelligence Co., Ltd. $sam local start-api

    が Nested Stack に非対応: 解決策
 34 AWS CDKのコード上で、ローカル用とクラウド用で API Gateway に紐付ける Lambda の指定方法を変更する 
 処理を分岐し、ローカルの場合はARNを直接指定
 Before
 After
 関数名が正しければリージョンやアカウントIDはダミーで良い
 Lambdaリソースを指定

  31. © 2024 Works Human Intelligence Co., Ltd. $sam local start-api

    が Nested Stack に非対応: 解決策
 35 出力されたテンプレートで Fn::GetAtt が使われなくなり、$sam local start-api が意図通り動くようになる 
 修正したCDKから出力されたテンプレートではFn::GetAttが不要に
 Before
 After

  32. © 2024 Works Human Intelligence Co., Ltd. 目次
 36 02

    AWS CDKとサーバレスアーキテクチャ
 AWS CDKとは / サーバレスアーキテクチャとは / AWS CDK vs Serverless Framework / アーキテクチャ 
 03 ローカル開発環境
 理想のローカル開発環境 / API Gateway + Lambda / DynamoDB 
 04 運用で直面した課題と解決策
 Stackのリソース上限 / $aws sam start-api が Nested Stack に非対応 
 05 その他Tips
 コールドスタート対策 / Lambdaアーキテクチャ / 各開発者の専用クラウド環境 / Lambda構成 / デプロイパッケージ 
 01 はじめに
 会社紹介 / 製品紹介

  33. © 2024 Works Human Intelligence Co., Ltd. 各開発者の専用クラウド環境
 stageという概念を用いて1つのAWSアカウント内に各開発者の専用環境を構築 


    スタック名にstageを含める
 stageを指定してcdk deploy
 kzkステージのCloudFormationスタック
 39 AWS CDK

  34. © 2024 Works Human Intelligence Co., Ltd. 各開発者の専用クラウド環境
 stageという概念を用いて1つのAWSアカウント内に各開発者の専用環境を構築 


    kzkステージのDynamoDBテーブル
 リソース名にstageを含める
 クラウド環境での本格的な動作確認が可能
 サーバーレス構成のため複数環境でも低コスト
 ✔ ✔ 41
  35. © 2024 Works Human Intelligence Co., Ltd. Lambda構成
 42 サーバレスの利点を活かしやすい、エンドポイントごとLambdaの構成を採用

    
 比較軸 単一のLambda エンドポイントごとのLambda デプロイの複雑さ コードベースの管理 リソースの利用効率 スケーラビリティ セキュリティ コスト モニタリング 特にセキュリティ面とコスト最適化、モニタリングの観点を重視
 ✔
  36. © 2024 Works Human Intelligence Co., Ltd. デプロイパッケージ
 
 ディレクトリ単位


    サイズの最小化
 + Lambda同士が疎結合
 + Lambdaにデプロイするパッケージの単位は主に3つ 
 
 ソースコード全体
 
 バンドル
 DDDなどに適切
 + 管理が簡単
 + サイズの最小化
 + 管理が簡単
 + 43
  37. © 2024 Works Human Intelligence Co., Ltd. デプロイパッケージ
 
 ディレクトリ単位


    サイズの最小化
 + Lambda同士が疎結合
 + DDDで設計しており、Pythonを利用しているためソースコード全体を各Lambdaにパッケージ 
 
 ソースコード全体
 
 バンドル
 DDDなどに適切
 + 管理が簡単
 + サイズの最小化
 + 管理が簡単
 + DDDのため不可
 Pythonのため不可
 44
  38. © 2024 Works Human Intelligence Co., Ltd. まとめ
 AWS CDK

    × サーバレスアーキテクチャは 相性◎です。 45