Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。Gatewayによる簡単なAPIの実装を試してみましょう。今回実装するAPIは以下の通りです。Allowed)のHTTPステータスコードを返却するLambda関数の作成AWSマネジメントコンソールから、[Lambda]をクリックします。関数の作成]をクリックします。(1)設計図の選択まずは設計図(blueprint)を選択します[3]。利用する言語やシナリオを元に設計図を選択し、必要に応じてカスタマイズすることができます。6.10]を選択し、その中の[hello-world]テンプレートを用います。設計図とは、Lambda関数のトリガーとなるイベントソースと、そのイベントソースに対応したLambda関数のテンプレートです。設計図を用いないで独自にイベントソースやLambda関数を開発することも可能です。(2)トリガーの設定このテンプレートでは、トリガーとなるイベントソースがデフォルトでは設定されていません。Gatewayのプロキシ統合タイプをイベントソースとして設定します。入力ができたら、[次へ]をクリックします。続いて関数の設定を行います。Gatewayが受け付けたリクエストに対して、どのようなレスポンスを返却するかを定義します。[名前]に「hello-lambda」と入力します。Lambda関数のコードの下にある、「Lambda関数ハンドラおよびロール」セクションで以下の通り設定します。「Lambda関数のコード」セクションでは、Lambdaで実行されるコードを設定します。選択できるように、.zipファイルでのアップロードやS3経由でのファイルアップロードも行うことが可能です。今回利用するLambda関数のコードは以下の通りです。関数で利用可能な引数は以下の通りです。Gatewayのプロキシ統合タイプではstatusCodeだけでなく、必要に応じてbodyやheadersを含むレスポンスオブジェクトを返却する必要があります。Gatewayにcallbackを返却するという流れが基本となります。全ての設定及びLambda関数のコードの入力が完了したら、[次へ]をクリックします。関数が作成されたら、実際に動かしてみましょう。Lambda!と表示されます。続いて、URLに?name=Johnのクエリパラメータを追加すると、Hello,John!とレスポンスが動的に変更されることが確認できます。Gatewayの設定も少し見てみましょう。Gatewayの設定ページに遷移します。[lambda-first-api]の[リソース]をクリックし、[/hello-lambda]以下の[ANY]をクリックすると、API全体の流れを確認することができます。lambda-first-apiAPIのhello-lambdaリソースでANYを定義した結果「全てのメソッドに対して統合リクエストタイプLAMBDA_PROXYを経由してLambda関数hello-lambdaを呼び出す」という設定が行われています。Gatewayによって適切なLambda関数が呼ばれ、関数内のソースコードが実行された結果をHTTPレスポンスとしてクライアントへ返却することが可能になっています。GatewayとLambda関数がどのように連携されているかを確認することができます。Gatewayにはリクエストをどのようにハンドリングするかを決定するいくつかの「統合タイプ」が存在しますが、Lambda関数と連携する際は[Lambda関数]を選択します。その中のオプションの一つとして「Lambdaプロキシ統合」というものが存在します。これを有効にすると統合タイプが「LAMBDA_PROXY」に、無効にすると「LAMBDA」となります。統合タイプが「LAMBDA」の場合、リクエスト情報をLambda関数に渡すためのマッピングを明示的に設定する必要があり、またLambdaから返された結果を正規表現で検証し、適切なHTTPステータスコードを付与する必要があります。Gatewayのレスポンスボディとなる、シンプルなものとなります。GatewayでのマッピングやHTTPステータスコードの設定が不要となりますが、コードの説明でも述べたようにstatusCode、bodyやheadersなどレスポンスに必要な情報を全てLambda関数の実行結果として返す必要があります。「LAMBDA_PROXY」タイプには、以下のような制約が存在します。Gatewayの持つCORSの機能を用いることができない「LAMBDA_PROXY」タイプは「LAMBDA」タイプと比較し、マッピングなどの複雑な設定を行うことなく利用することができますが、ステータスコードの適切な付与や、コード実行時のエラーハンドリングなどに考慮したコードを実装する必要があります。単純なAPIであれば「LAMBDA」統合タイプを、複数のクエリパラメータを有していたり、リクエストヘッダーの情報を利用するような複雑なAPIの場合は「LAMBDA_PROXY」統合タイプを用いるといったように、APIの挙動に合わせて使い分けることをお勧めします。まとめ以上のように、AWSマネジメントコンソールのみを用いても、動的なAPIを簡単に作成することができます。Lambdaを組み合わせることで、ランディングページなどで使うお問い合わせフォームなども、別途Webサーバやデータベースなどを用意することなく、簡単かつ安価に作成することができます。次回以降の連載では、AWSの上でサーバレスアーキテクチャを用いて、SPAを実装していきたいと思います。FaaSの提供範囲のところで「スクリプトの実行環境」とすべきところが「スクリプトの実行環」となっていたので修正しました。エンジニアとして活動する他、HTML/CSS/JavaScriptエンジニア、Webアプリケーション開発のUI/UX担当なども手がけています。サービスのアーキテクチャ設計から継続的な開発の仕組み作りや実装まで行うプログラマ。「目的を達成するためにより良い方法を」を念頭に、新しい考え方や技術を積極的に取り入れていくタイプです。モブプログラミングを取り入れて開発を効率化させるヒント9Pythonや生成AI活用など無料で基礎が学べるプログラミング学習講座「スタディングテック」提供開始10企業の7割超が「2025年の崖」を理解していないことが明らかに。モブプログラミングを取り入れて開発を効率化させるヒント9Pythonや生成AI活用など無料で基礎が学べるプログラミング学習講座「スタディングテック」提供開始10企業の7割超が「2025年の崖」を理解していないことが明らかに。モブプログラミングを取り入れて開発を効率化させるヒント9Pythonや生成AI活用など無料で基礎が学べるプログラミング学習講座「スタディングテック」提供開始10企業の7割超が「2025年の崖」を理解していないことが明らかに。新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。