SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2024 セッションレポート(AD)

AWS CDKでサーバレスのローカル開発環境を構築した理由とは? デメリットの解消方法と実運用で直面した課題

【16-B-5】AWS CDK×サーバレスアーキテクチャを極める

  • X ポスト
  • このエントリーをはてなブックマークに追加

E2Eな開発をローカルで完結! AWS CDKを用いた開発環境の構築

 このような前提条件を踏まえたうえで、齋藤氏たちが理想のローカル開発環境としたのが、フロントやAPIで分業しやすい環境ではなく、フロントからAPI、永続層までを含むE2Eな開発が行えることだった。

 API GatewayとLambda部分のローカル開発環境について、齋藤氏はCDKのソースコードを公開し説明を行った。そのソースコードが次の図である。認証・認可のためのAuthorizer、Rest APIのためのAPI Gateway、APIのパスのまとまりとしてAPI Constructを定義。Constructの中ではさらにLambdaを定義し、API Gatewayのリソースとの紐付けを行う。

図3.AWS CDKアーキテクチャ
図3.AWS CDKアーキテクチャ

 このAPI Gateway、Lambda部分のローカル環境は、AWS SAM CLIを利用し、次の3ステップで構築している。

 第1ステップはcdk synthコマンドによる、CDKのコードからCloudFormationのテンプレートの出力である。ここではスタックごとの実行で時間を短縮するため、--exclusivelyオプションを指定し、スタック間の依存を無視し、対象のスタックのみsynthするようにしたり、各コマンドの末尾に&を記載し、バックグラウンドプロセスとして並列実行している。またスタックごとにテンプレートファイルを出力。APIスタックのテンプレートファイルであれば、API GatewayとLambdaの構成の起動のために利用されるなど、後続のステップで利用される。

 第2ステップはsam buildコマンドによる、各Lambda関数のDockerイメージのビルド。LambdaのDockerイメージのビルドでは、--parallelオプションを指定し、並列実行により時間短縮できるようにしている。またDockerイメージはソースコードを含むため、ソースコードの変更のためにビルドする必要がある。「これを毎回手動で行うのは手間なので、VS Codeの『Run on Save』という拡張機能を利用し、ソースコード保存時にsam buildが実行されるようにすることで、擬似的にホットリロードを実現している」(齋藤氏)

 第3ステップはsam local start-apiコマンドによる、API Gateway、Lambdaの構成を起動。標準出力されるログは読みづらく、永続化されないため、--log-fileオプションを利用しファイルへのログ出力を設定。また23年4月にリリースされたバージョンよりsam local start-apiコマンドがLambda Authorizerに対応。これにより、ローカルでもクラウドの環境に近い構成が再現可能できたという。

 永続層であるDynamoDBのローカル環境構築については恋塚氏が説明してくれる。

株式会社Works Human Intelligence Product Div.Advanced Technology Dept.HCI Grp.HCI 恋塚大氏
株式会社Works Human Intelligence Product Div.Advanced Technology Dept.HCI Grp.HCI 恋塚大氏

 DynamoDBのCDKソースコードは次のようになる。「DynamoDBStackというスタックを作り、その中でusersテーブルを定義する際は、TableとGSIに関する記述を行っています」(恋塚氏)

図4.AWS CDKのソースコード(DynamoDB)
図4.AWS CDKのソースコード(DynamoDB)

 DynamoDBのローカル開発環境も自作スクリプトを利用し、次の3ステップで構築している。

  1. 公式のDockerイメージからDynamoDB Localを起動
  2. cdk synthコマンドを利用して、CDKのコードからCloudFormationのテンプレートを出力
  3. テンプレートを元に、自作スクリプトによるDynamoDB Localへのテーブル作成を実施

 自作スクリプトはPythonで記述した約80行のシンプルなもの。「サードパーティのライブラリもあるが、スクリプト自体が小さく、メンテナンスされていない可能性もあるので、自分たちで自作して管理する方が柔軟性も得られるので、良いと判断しました」(恋塚氏)

 実際にサービスを運用する中で、さまざまな課題にも直面したという。最初に直面したのが、CloudFormation Sackのリソース上限問題である。「半年の開発で1つのスタックに宣言できるリソースの上限である500に迫る勢いでAPIリソースが増えていった」と恋塚氏は明かす。この課題を解決するため恋塚氏が取った方法は「NestedStackを利用し、APIの親パスごとにスタックを分割すること」だった。スタック数がAPIの親パスレベルで増えてしまうというデメリットについては、ソースコードに少し変更を加えるだけで対応できたという。

 次に直面した課題は、$sam local start-apiがNested Stackに対応していなかったことである。そのため、URIにおけるARNの解決ができず、ローカル環境が構築できなかった。

 この課題に対しては、「CDKのソースコード上で、ローカル用とクラウド用でAPI Gatewayに紐付けるLambdaの指定方法に変更を加えることで解決しました」と恋塚氏。そうすることで出力されたテンプレートで、Fn::GetAttが使われなくなり、$sam local start-apiが意図通り動くようになったという。

 その他にも恋塚氏はCDKとサーバレスアーキテクチャを使った開発におけるティップスを紹介。例えばコールドスタート対策として、よく利用するAPIについてプロビジョンドコンカレンシーを使用してウォームアップすることや、Lambdaアーキテクチャについては、AWS CDKスクリプト内で動的にアーキテクチャを決定し、開発者間の実行環境に依存しないようにすること、各開発者の専用クラウド環境については、stageという概念を用いて1つのAWSアカウント内に各開発者専用の開発環境を構築することなどを伝授した。

 恋塚氏は最後に「AWS CDKとサーバレスアーキテクチャはかなり相性の良い組み合わせだと思っている。ぜひ、皆さんも機会があればトライしてほしいと思います」と呼びかけ、セッションを締めた。

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Developers Summit 2024 セッションレポート連載記事一覧

もっと読む

この記事の著者

中村 仁美(ナカムラ ヒトミ)

 大阪府出身。教育大学卒。大学時代は臨床心理学を専攻。大手化学メーカー、日経BP社、ITに特化したコンテンツサービス&プロモーション会社を経て、2002年、フリーランス編集&ライターとして独立。現在はIT、キャリアというテーマを中心に活動中。IT記者会所属。趣味は読書、ドライブ、城探訪(日本の城)。...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

丸毛 透(マルモ トオル)

インタビュー(人物)、ポートレート、商品撮影、料理写真をWeb雑誌中心に活動。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

提供:株式会社Works Human Intelligence

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19251 2024/05/16 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング