APIGateway + Lambda + NodeJS で rest api を作る

AWS 全然使ったことなくて Lambda とか全くわからなかったけど1時間くらいで API 公開まで行けた。
このままだとやり方忘れちゃいそうなのでメモ。

AWS Lambda

Get Started Now

まず AWS にログインして、 Lambda を選んで Get Started Now する。
次に、 blank function を選択する。

そうすると Configure triggers という画面になるが、ここは気にせず Next を押す。

Configure function

Name に適当に名前入れる、とりあえず test とか入れておけば良い。
Runtime は Node.js を選ぶ。

Lambda function code

コードはこんな感じで書く。

exports.handler = function(event, context, callback) {
  console.log('"Hello":"World"');
  const response = {
    statusCode: 200,
    headers: {},
    body: JSON.stringify({ "message": "Hello World!" })
  };

  callback(null, response);
};

API Gateway と連携させる場合、 statusCode や body などが必要。

参考: プロキシリソースのプロキシ統合を設定する - Amazon API Gateway

Lambda function handler and role

ロールはなければ作る。
Create new role from template(s) を選んで、 Role name を適当に入れる。
適当だから admin などにした。

他は無視して Next する。

Review

内容確認して Create function する。
これで Lambda 関数が作られる、簡単!!!!!!!!!!

Test

画面上の方に Test があるので押してみる。
json の中身は変えないで Save and test を押す。

以下の json が返って来れば成功!

{
  "statusCode": 200,
  "headers": {},
  "body": "{\"message\":\"Hello World!\"}"
}

API Gateway

次は Rest API として叩けるように API Gateway と連携させる。

Get Started Now

Get Started Now を押すと サンプル API の作成 など出るが無視して OK を押す。

画面上にある、 ◯ 新しい API をクリック。

API 名 を適当に入れる。
適当だから api にした。

リソースの作成

API のエンドポイントを作る。
画面左上にある アクション > リソースの作成 を選択。

リソース作成画面になるので、リソース名を test とかで リソースの作成 を押す。

そうするとリソースが作られる。
画面には リソースにはメソッドは定義されていません。 などと出てくる。

メソッドの作成

アクション > メソッドの作成 を選ぶと、 メソッドを選ぶ選択肢が出てくる。
GET を選んで ✅ を押す。

GET - セットアップ

統合タイプ: Lambda 関数、 Lambda リージョン は適当に us-east-1 を選ぶ。

そうすると Lambda 関数の入力欄が出るので、そこで先ほど作成した test を入力し、保存 を押す。

Lambda 関数に権限を追加するOK を選択。

メソッドの実行

箱が 4 つ並んでる画面が出てくるが、画面左上の テスト を押す。
メソッドテスト画面に遷移する。

画面下にある ⚡️テスト ボタンを押す。
下記 json が返って来れば OK!

{
  "statusCode": 200,
  "headers": {},
  "body": "{\"message\":\"Hello World!\"}"
}

API のデプロイ

最後にデプロイして外から叩けるようにする。

アクション > API のデプロイ を選択。

  • デプロイされるステージ
    • [新しいステージ]
  • ステージ名
    • test (なんでもよい)

で入力し、 deploy する。

API 実行確認

画面上に URL の呼び出し: https://hoge.execute-api.us-east-1.amazonaws.com/test みたいなの書いてるので、これに先ほど決めたリソース名の /test を追加しアクセスしてみる。

{
  statusCode: 200,
  headers: { },
  body: "{"message":"Hello World!"}"
}

と返って来れば成功!!!!!

感想

めっちゃ簡単に Lambda 使えて最高である、これだけ手軽に使えるとスマホアプリでちょっとサーバでやりたいこととか Lambda でできて良い。

しかも一ヶ月 1,000,000 件リクエストまで無料である、強い。