LoginSignup
0
0

More than 1 year has passed since last update.

【2021年6月最新版】ExpressをserverlessでAPI GatewayからLambdaを使ってWeb APIを使用する方法

Last updated at Posted at 2021-06-03

最近色々と忙しく、約1か月ぶりの投稿になります。

今回の内容は、Node.js(Express)で作成したAPIを、AWSのLambdaで環境構築を行うという内容です。

そこまで難しくは無いのですが、権限の部分で少し躓いたので、次回からは躓かないように記事を書いていきます。

はじめに

まず初めに必要なパッケージをインストーしておきましょう!

npm i @vendia/serverless-express express

ローカル環境構築

次に、以下のようにプロジェクト直下にファイルを作成していきましょう。

touch app.js server.js lambda.js
app.js
const express = require("express");
const app  = express();

// ルーティングの設定
app.get("/", (req, res) => {
  return res.send("Hello");
});

// 他にルーティングなどの設定を行っていたらここに書いてください

module.exports = app;
server.js
const app = require("./app");
const port = 3000;

// HTTPサーバを起動する
app.listen(port, () => {
  console.log(`listening at http://localhost:${port}`);
});
lambda.js
const serverlessExpress = require('@vendia/serverless-express')
const app = require('./app')

const server = serverlessExpress.createServer(app)

exports.handler = (event, context) => serverlessExpress.proxy(server, event, context)

このように設定したら、まずはローカルで動くかの検証をしてください。

node server

ここで動かなかったらLambdaにアップロードしてもエラーが起きるので、今一度ご確認ください。

Lambdaへアップロード

権限

ここまできたらあとはデプロイすだけなのですが、人によっては権限のエラーの種類が違うと思うので、必要な権限を書いておきます。

・AmazonS3FullAccess
・CloudWatchLogsFullAccess
・AmazonAPIGatewayAdministrator
・AWSCloudFormationFullAccess
・AWSLambda_FullAccess

serverless.yml

サーバーレスでデプロイするにはserverless.ymlを作成し、以下のように設定してください。

touch serverless.yml
serverless.yml
service: example

provider:
  name: aws
  runtime: nodejs12.x
  region: ap-northeast-1

package:
  exclude:
    - .git/**
    - test/**
    - README.md

functions:
  exampleFunction:
    handler: lambda.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'

デプロイ

npx serverless deploy

EndpointのURIが表示されればOK

権限を追加してもエラーが出る場合

上の権限を追加してもエラーが出る場合以下の2つを試してください。

まず、エラー名にCreatRolePutRolePolicyの権限がありません的なエラーが発生した場合は「IAM」から今デプロイしようとしているユーザーを選択。

「アクセス権限」の「インラインポリシーの追加」をクリック。

「JSON」タブを選択し、以下のコードをコピペ。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "OperationRole",
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateRole",
                "iam:PutRolePolicy"
            ],
            "Resource": "*"
        }
    ]
}

「ポリシーの確認」をクリックし、名前は適当に入力。

デプロイする前に以下のコマンドを入力

npx serverless remove

この時にエラーが起きたら、AWSコンソールから手動で消去してください。

npx serverless deploy

AWSは権限周りが色々と面倒くさいですね。

でも権限にうるさいのは逆にありがたいことなのかも??

こんな感じで実装することができました!

以上、「【2021年6月最新版】ExpressをserverlessでAPI GatewaykaraLambdaを使ってWeb APIを使用する方法」でした!

Thank you for reading

参考記事

serverless-expressでAPI GatewayからLambdaを実行する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0