Server

AWS LambdaとAPI GatewayでサーバレスなAPIを実装

投稿日:

はじめに

昨今では、ECSやApp Runnerなどを利用してアプリケーションを簡単にリリースすることができるようになっています。また、シンプルなアプリケーションでは、そもそもサーバレスでも十分なケースもあると思います。

これまではECSやApp Runnerなどを使ってみましたが、まだサーバレスなサービスを触ったことがなかったので、今回はAWS LambdaとAPI Gatewayを使ってサーバレスなAPIを作ってみました。

AWS Lambdaとは

AWS LambdaはFaaSと呼ばれるサービスで、アプリケーションが動作するサーバを用意する必要がありません。開発者はLambdaに実行可能ファイルやコンテナをアップロードするだけで、簡単にサービスを立ち上げることができます。

利用できる言語

LambdaではNode.jsをはじめ、Golang、Java、Paythonなどの様々なランタイムが利用できます。また、ラインタイムが提供されていない場合でも、レイヤという機能を使って使いたいライブラリなどのファイルをZIP化してアップロードすることで、Lambda関数内で任意のライブラリを使用することができます。

Lambdaの制約

Lambdaには起動時間と同時実行数に制限があります。起動時間については、1つの実行ごとに15分までとなっています。また、同時実行数については、同一リージョン内で1000までとなっており、これを超えると関数の呼び出しが制限されます(スロットリング)

LambdaでAPIをリリースするためにやること

Lambda単体ではHTTPでアクセス可能なAPIとしてリリースすることはできません。そこでAPI Gatewayと組み合わせてこれを実現します。これはLambdaの最もポピュラーなユースケースの1つです。

作業内容は以下のとおりです。

  • Lambda関数を作成する
  • 実行可能ファイルを作成してアップロードする
  • API GatewayでREST APIを作成する

次から順番に手順を紹介します。

Lambda関数の作成

関数の作成

マネジメントコンソールでAWS Lambdaのページを開き、「関数の作成」をクリックします。

作成方法が3種類あり、それぞれ

  • 一から作成
  • 設計図の使用
  • コンテナイメージ

となっています。

「一から作成」の場合は、ランタイムやアーキテクチャなどを選択してLambda関数を作成します。

「設計図を使用」の場合は、予めAWSが用意したテンプレートに沿ってLambda関数を作成します(S3 Get ObjectsやReturn HTTP Redirect Responseなど)。この場合では使用できるランタイムが「一から作成」の場合と比べて少なくなっています(Golangなどはない)

「コンテナイメージ」の場合は、ECRのイメージURLを指定してLambda関数を作成します。

今回は「一から作成」を選んで以下のように作成しました。

作成すると関数の概要に以下のように表示されるようになります。

ランタイム設定の編集

次に、ランタイム設定を編集してハンドラをgreetingにします(ハンドラ名と実行可能ファイル名を同じにする必要がある)。

実行可能ファイルの作成

Lambda関数で実行する実行可能ファイルを作成します。Lambdaで実行可能な関数を作るために、以下のパッケージを予めインストールしておきます。

github.com/aws/aws-lambda-go/lambda

今回はリクエストで名前を渡してレスポンスにその名前への挨拶を返すだけのシンプルな関数を実装します。コードは以下のとおりです。

コードが書けたら以下のようにビルドしてZIP化します。

ー実行可能ファイルのアップロード

マネジメントコンソールに戻って、「コードソース」の「アップロード元」で「.ZIPファイル」を選択して、先程ZIP化したファイルをアップロードします。

関数のテスト

アップロードが完了したら、「テスト」タブを開いて、一番下の「イベントJSON」にリクエストのJSONを書いて「テスト」をクリックします。

成功すると以下のようなログが表示されます。

これでLambdaの設定は完了です。

API Gatewayの設定

APIの作成

Lambdaの設定ができたら、API GatewayでREST APIを作成します。

「APIを作成」をクリックし、「REST API」の「構築」をクリックし、「REST」、「新しいAPI」をチェックし、「API名」を入力して「APIの作成」をクリックします。

リソースの作成

作成したAPIの画面を開いて、「リソース」の「アクション」から「リソースの作成」をクリックします。

「リソース名」を入力して「リソースの作成」をクリックします。

メソッドの作成

リソースが作成できたら、リソースを選択した状態で「アクション」から「メソッドの作成」をクリックします。

「POST」を選択して「Lambda関数」に先程作成したLambda関数名を記入して、「保存」をクリックします。

作成できると以下のように表示されます。

APIのテスト

「クライアント」の「テスト」をクリックし、「リクエスト本文」にJSONを書いて「テスト」をクリックします。

 

成功するとこのようなログが表示されます。

デプロイ

無事テストが通ったら、APIをデプロイします。

「アクション」の「APIのデプロイ」をクリックし、「デプロイされるステージ」で「default」を選択して「デプロイ」をクリックします。

 

デプロイに成功すると以下のようにステージが表示されます。

Lambdaに戻って確認してみると、「関数の概要」にAPI Gatewayのトリガーが追加されているはずです。

これで設定はすべて完了です。curlでリクエストしてみると以下のようにレスポンスが返ってくるはずです。

さいごに

AWS LambdaとAPI Gatewayを組み合わせてサーバレスでAPIを作成してみました。簡単にAPIを作れるのがとても良いですね。他にもCognitoと組み合わせて認証機能を追加したり、RDSやDynamoDBなどを組み合わせたら、かなりの範囲をカバーできそうです。

おすすめ書籍

AWS運用入門 押さえておきたいAWSの基本と運用ノウハウ AWSで実現するモダンアプリケーション入門 〜サーバーレス、コンテナ、マイクロサービスで何ができるのか Amazon Web Services基礎からのネットワーク&サーバー構築改訂4版

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

laravel logo

Laravel Cashierでサブスクリプションを実装する

1 はじめに2 Stripeの準備3 Laravel Cachierの初期設定3.1 インストール3.2 APIキーの設定3.3 Userモデルへの実装4 支払い方法の登録4.1 支払い方法の登録5 ...

Docker上でTensorFlowのチュートリアルをやってみた

1 はじめに1.1 環境2 TensorFlowのコンテナを起動する3 チュートリアルをやってみた3.1 ソースコード4 さいごに はじめに こんにちは、最近個人的な勉強でPython、ディープラーニ ...

WordPressとRailsアプリケーションを相乗りさせた時の話

1 はじめに1.1 前提条件2 サブドメインを設定する3 Nginxの設定3.1 ステージング環境用の設定3.2 ステージング環境の設定を読み込ませる3.3 Nginxの再起動4 SSL化する4.1 ...

aws

Amazon ECSでGoのEchoサーバを立ち上げる

1 はじめに2 全体の流れ3 サービスの概要3.1 IAM(Identity and Access Management)3.2 VPC(Virtual Private Cloud)3.3 ECR(E ...

aws

EC2インスタンスのメモリとディスクのメトリクスモニタリングでハマったこと

1 はじめに2 メモリとディスクのメトリクスモニタリング3 ハマりポイント4 対応方法5 さいごに はじめに AWSのEC2インスタンスでディスク容量やメモリの使用率をCloudWatchで監視をする ...

フォロー

blog-page_side_responsive

2023年6月
 123
45678910
11121314151617
18192021222324
252627282930  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。