API GatewayとLambdaを使ったサーバレスSpringアプリケーション(3)

【連載】

AWSで作るクラウドネイティブアプリケーションの基本

【第3回】API GatewayとLambdaを使ったサーバレスSpringアプリケーション(3)

[2019/03/27 08:00]川畑 光平 ブックマーク ブックマーク

開発ソフトウェア

前回までに、「Spring Cloud Function」でサーバレスアプリケーション実装し、「AWS Lambda」へ登録しました。今回は、「Amazon API Gateway」を設定して、登録したLambda関数を呼び出してみましょう。

Amazon API Gatewayの設定

リクエストを受け付けて、設定したAWS Lambdaを実行するためのAPI Gatewayの設定を行います。AWSコンソールの API Gatewayサービスメニューから、以下を入力して、「APIの作成」ボタンを押下してください。

  • Protocol:REST
  • 新しいAPIの作成:新しいAPI
  • API名:任意の名前を入力
  • エンドポイントタイプ:リージョン

必要な項目を入力し、「APIの作成」ボタンをクリック

API作成後、「アクション」メニューから「リソースの作成」を選択します。

「アクション」メニューから「リソースの作成」を選択

開かれた「新しい子リソース」画面で「リソース名」と「リソースパス」を設定し、「リソースの作成」ボタンを押下します。

「リソース名」と「リソースパス」を設定し、「リソースの作成」ボタンをクリック

作成したリソースを選択し、「アクション」メニューから「メソッドの作成」→「POSTメソッド」を選択して、チェックボタンを押下します。

なお、このとき「GETメソッド」を指定すると、SpringBootApiGatewayRequestHandlerではJSONリクエストボディがなくなるため、エラーになります。本稿執筆時点(2019年1月)で、この問題は「ISSUE」として起票されています。

「POSTメソッド」を選択して、チェックボタンをクリックする

POSTメソッドのセットアップ

続いて、以下の設定内容に従って、POSTメソッドのセットアップを行い、「保存」ボタンを押下します。

  • 統合タイプ:Lambda関数
  • Lambdaプロキシ統合の使用:チェックする
  • Lambdaリージョン:Lambdaを作成したリージョン
  • Lamnda関数:前節で作成したLambda関数名を選択する。
  • デフォルトタイムアウトの使用:チェックする

POSTメソッドのセットアップを行い、「保存」ボタンをクリックする

このとき、「Lambdaプロキシ統合の使用」をチェックしないと、Lambda FunctionにSpring Cloud Functionが期待するデータが来ないので、エラーとなります。忘れないようにチェックしておきましょう。

なお、「Lambdaプロキシ統合の使用」をチェックしないとエラーになる理由は、今回ハンドラクラスで継承したSpringBootApiGatewayRequestHandlerが、型パラメータとしてcom.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEventを指定しているためです。Lambdaプロキシ統合でなければ、上記の型パラメータクラスに必要な情報が渡って来ないため、NullPointerExceptionでエラーになります。

Lambda関数の動作テスト

では、設定したLambda関数が正しく動くかどうか、動作テストをしてみましょう。それにはまず、「テスト」リンクを押下します。

「テスト」リンクをクリック

以下の項目を入力し、「テスト」ボタンを押下します。

  • リクエスト本文:{“test”:”TestMessage”}

「レスポンス本文」欄に「Complete!」と表示されれば、アップロードしたサーバレスアプリケーションが正常に実行された結果です。

成功すると「レスポンス本文」欄に「Complete!」と表示される

Lambda関数が正常に実行できることは確認できましたが、外からAPIをコールするためには、APIのデプロイが必要です。それにはまず、「アクション」メニューから「APIのデプロイ」を選択します。

「APIのデプロイ」を選択

「デプロイされるステージ」欄で「新しいステージ」を選択して任意の名前を入力し、「デプロイ」ボタンを押下します。ステージ名はエンドポイントURLにも反映されるため、「prod」や「dev」などにするのが一般的です。

「デプロイされるステージ」欄で「新しいステージ」を選択して任意の名前を入力する

APIがデプロイされると、エンドポイントのURLが表示されます。このURLにリソース名を加えたものがリソースURLになります。

エンドポイントのURL+リソース名がリソースURLとなる

設定が終わったら、実際に外部のローカルクライアントから、curlコマンドなどでリクエストを送信し、実行結果を確認してみましょう。エンドポイントURLの最後にリソース名を付与するのを忘れないでください。

curl -d '{"test":"TestMessage"}' https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/sample

コマンドを実行した結果、「”Complete!”」というメッセージが返却されるのに加えて、CloudWatch Logsには、実行したLambda関数の結果が表示されます。

CloudWatch Logsに実行したLambda関数の結果が表示される

Lambda関数の初回起動時は、SpringFrameworkの起動でAPIリクエストを送信してから実行されるまでに少々時間がかかります。2回目以降は実行環境が再利用されるので、即時処理されますが、実行環境は一定時間経つと破棄されるので、そうした制約を考慮しておきましょう。

* * *

以上、3回に渡り、AWS LambdaとAPI Gatewayを使ったサーバレス環境下でSpringアプリケーションを構築してきました。

AWS LambdaやAmazon API Gateway、Spring Cloud Functionを利用することにより、ごくごく少量のコーディングで、サーバレスアプリケーションを実行することができます。このサーバレス開発のスタックはとても簡易で、かつ拡張性も高く、エンタープライズ開発でも十分有用です。

著者紹介


川畑 光平(KAWABATA Kohei)

某システムインテグレータにて、金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professionalなどの資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。

本連載の内容に対するご意見・ご質問は Facebook まで。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

クラウド導入であの企業は何を目指したか? - AWS Summit Tokyo 2016

クラウド導入であの企業は何を目指したか? - AWS Summit Tokyo 2016

アマゾン ウェブ サービス ジャパンは6月1日~3日の3日間にわたり、AWSクラウドの最新技術や事例を紹介する年次カンファレンス「AWS Summit Tokyo 2016」を開催した。本稿では、初日、エグゼクティブトラックで行われたAWSクラウド導入企業3社の講演をダイジェストでお届けする。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る