Qcon Londonでは、LumigoのLumigo社のサーバーレス・アドボケイトであるYan Cui氏が、AWSサーバーレス技術を使った効果的なローカル開発のパターンを共有した。焦点となったのは、テストアプローチ、デプロイプラクティス、アプリケーション環境だった。
Cui氏はまず、開発プロセスにおける高速なフィードバックループの必要性と、サーバーレス技術でこれを実現するのは難しいという一般的な俗説について議論した。そして、サーバーレス・アプリケーション環境のテスト、デプロイ、プロビジョニングに適切なパターンを採用すれば、俗説に明示されているペインポイントを解決できると概説した。
サーバーレスアプリケーションのテストに焦点を当て、Cui氏は5つの可能なアプローチを紹介した。最初の六角形アーキテクチャは、外部クライアントや下流の統合の詳細を抽象化するために、ポートやアダプタを使ってアプリケーションを構造化することに焦点を当てた。これにより、どのようなランタイム環境に対しても普遍的な適用や移植が可能になる一方で、Cui氏はこのアプローチの欠点を明らかにした。抽象化を作成するための先行作業や、統合に対する直接的なテストの不在などだ。
2つ目のテストアプローチである「ローカルシミュレーション」について、Cui氏はローカルのデスクトップ上でサーバーレスのデプロイ環境をエミュレートするLocalStackプラットフォームの適用可能性を共有した。これは、AWS Lambdaファンクション以外の様々なサーバーレス技術について迅速なフィードバックを可能にする一方で、クラウドサービスを完璧に表現できないという問題を常に抱えている。
3つ目のテストパラダイムであるLambdalithは、ビジネスロジックを複数の関数に分解することなく、アプリケーション全体をAWS Lambdaにデプロイするものだった。これは、AWS Lambdaから他のコンピュート環境へのポータビリティを可能にし、したがってテストを容易にする一方で、大規模なフレームワークではコールドスタートのペナルティを受ける可能性が高く、アプリケーションのコンポーネント全体にわたるきめ細かなアクセス制御には最適化されていない。
4つ目のテストアプローチである「デプロイメントフレームワーク」は、AWS SAMや SSTのようなデプロイメントハーネスを利用して、ローカル開発用の代表的なテスト環境を作成する。このオプションはオーバーヘッドがもっとも少ないが、継続的インテグレーションプロセスの一部として自動化されたリグレッションテストには適していない。
5つ目の選択肢である「remocal」は、「remote」と「local」の合成語で、ローカルで実行されるAWS Lambdaファンクションコードを持ち、実際のリモートAWSサービスと通信するアプローチを指す。彼はこのアプローチが、テストの代表性要件とローカル開発の迅速なフィードバックをもっともよく組み合わせたものだと主張した。
Cui氏は、 remocalパラダイムの主な欠点として、追加のAWS環境をプロビジョニングする要件と、アップストリームの統合をキャプチャできないことを説明した。後者のリスクを軽減するために、Cui氏は、 remocalパラダイムによって残されたギャップをカバーするエンドツーエンドテストによるマルチレベル戦略を推奨した。これは、AWS API GatewayとAWS Lambdaの統合で説明された。
テストアプローチの概要に続いて、Cui氏はデプロイ段階で避けるべき落とし穴を明らかにした。彼はAWS Lambdaのデプロイプラクティスの複雑さを減らし、AWS Lambda Layersや Container Runtimesのような機能の使用を控えることを提唱した。
最後にCui氏は、remocalテストを可能にするメカニズムとして、エフェメラル環境の使用について議論した。これによって、どのエンジニアも自分のコードのブランチをテストするのに必要なAWSの依存関係を自己完結的にグループ化できるようにするのが目標だ。開発した機能のテストに成功したら、その環境をデプロビジョニングしてコストを最小限に抑えられる。Cui氏はこれをServerless Frameworkの文脈で説明したが、エフェメラルテーブルを使用することで、AWS RDSデータベースのようなサーバーフルなリソースを含む他のリソースにも適応できるアプローチであることを明らかにした。
Qcon Londonの録画へのアクセスは、Video-Only Passへ