[レポート] OpenAPI と AWS SAM を使ってスクラッチから最初の API を作成する #SVS207 #AWSreInvent

2023.12.12

アノテーション テクニカルサポートの川崎です。

本記事は AWS re:Invent 2023 のセッションレポートとなります。

今回は、AWS SAM のビルダーズセッションに参加しましたので、セッションレポートをお届けします。

概要

In this builders’ session, learn about the design and provisioning of a complete API using infrastructure as code. Follow the OpenAPI specification for API design using its extensions to interact with Amazon API Gateway and configure features such as caching, rate limiting, message transformation, payload validation, and configuring API keys with usage plans to integrate with backends. You must bring your laptop to participate.

[機械翻訳]このビルダーズセッションでは、Infrastructure as Codeを使用した完全なAPIの設計とプロビジョニングについて学びます。Amazon API Gatewayと対話し、キャッシュ、レート制限、メッセージ変換、ペイロード検証、バックエンドと統合するための使用計画とAPIキーの構成などの機能を設定するための拡張機能を使用して、API設計のためのOpenAPI仕様に従ってください。参加にはノートパソコンが必要です。

セッションの内容

講義パート

API Gateway

  • REST API プラットフォームを構築する フルマネージドのサービス
  • ゲートウェイとして機能し、舞台裏にある多くのサービスを統合することができる
  • 3 つのフレーバー
    • REST API
    • HTTP API
    • WebSocket API
  • REST API
    • エッジ最適化
    • リージョン
    • プライベート

Open API Specification

  • Open API 仕様
    • REST APIを標準化した契約のような形式
    • 開発者がAPIのエンドポイントや動作を定義できる
    • これにより、異なるプラットフォーム間でAPIが使いやすくなる

SAM template

  • SAM テンプレート
    • サーバーレスアプリケーションモデル(SAM)はAWS CloudFormationの拡張
    • より簡単にサーバーレスアプリケーションを定義してデプロイするためのフレームワーク
    • SAM CLIを使うと開発プロセスが簡略化される

ハンズオンパート

ハンズオンで作成するアーキテクチャ

ビルダーズセッションの目標

AWS SAMとOpenAPIを使用して、次のAPI機能を構築します。

  • 最初のSAM プロジェクトを作成する
  • APIゲートウェイリソースを定義する
  • OpenAPI テンプレートを使用して API 仕様を定義する
  • メッセージ変換
  • 検証のリクエスト

AWS SAM プロジェクトをセットアップする

  • Lambda 関数を作成する
    • cost-calculator.js
    • median-price-calculator.js

IaC を使用して最初の API を作成する

  • SAM テンプレートを確認する
    • template.yaml
    • openapi.yaml
  • プロジェクトをデプロイする
sam build && sam deploy --guided
  • IaC を使用して最初の API をテストする

メッセージ変換

  • モデルの構築
  • 変換リクエストのペイロード
  • 応答ペイロードの変換
  • API をテストする

所感

SAMはサーバーレスアプリケーションの開発をすごくシンプルにするツールで、すぐに手を動かしながら学べるのがとても良かったです。 YAMLでアプリケーションの定義ができ、わずかな行数で様々なAWSリソースを構成できるのがとても便利だと感じました。 コードの記述量が減ることで、開発の生産性を向上させることができそうです。

Infrastructure as Code (IaC) の概念に基づいて、 インフラをコードとして扱うことで、デプロイが迅速かつ一貫性を持って行える点も素晴らしかったです。

SAMがCloudFormationのテンプレートに変換してくれるので、 CloudFormationの詳しい知識がなくてもサーバーレスアプリケーションを構築することが可能です。 これは時間短縮にもつながりますし、開発中のエラーを減らすのにも役立ちそうです。

OpenAPIを使ったAPIの設計と構成は、RESTful APIの作成に対する理解を深めるのに役立ちました。 APIがどの言語で実装されていても、共通の仕様言語であるOpenAPIで定義できるので、ドキュメントの共有や利用が促進されそうです。

全体的に見て、SAMのハンズオンはサーバーレスアプリケーションの迅速なプロトタイピングから、デプロイ、運用までの流れを体系的に理解できる実践的な内容でした。 今後もサーバーレスアーキテクチャを活用するプロジェクトに参加する際には、この知識が役立つでしょう。