🐷

serverless frameworkを使って、aws lambda関数(hello world)作成ステップ

2023/04/29に公開

まずは、Hello Worldを実行しよう!

以下の手順に従って、serverless frameworkを使って、aws lambda関数のhello worldを作成できます。

1. 新しいプロジェクトの作成:

新しいディレクトリを作成し、そのディレクトリに移動。

mkdir serverless-sample
cd serverless-sample

2. Serverless Frameworkのインストール:

Serverless Framework をインストール。

npm install -g serverless

3. プロジェクトの初期化:

Serverless Frameworkを使ってプロジェクトを初期化し、AWS Node.jsテンプレートを使用。

serverless create --template aws-nodejs

4. node.jsのプロジェクトの立ち上げ:

npm init -y

5. serverless.ymlの設定:

すでに、serverlessのtemplateをインストールしたところで、作成されているはずだが、一応、念のため、確認。

service: serverless-sample

provider:
  name: aws
  runtime: nodejs18.x
  stage: dev
  region: us-east-1 ## 任意のaws serverを指定(東京のサーバーの場合、ap-northeast-1)

functions:
  hello:
    handler: handler.hello

6. ハンドラーの作成:

handler.jsファイルが既にあることを確認し、以下の内容を置き換えます。

module.exports.handler = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Hello World!',
    }),
  };
};

7. プロジェクトのデプロイ:

すべての設定が完了したら、次のコマンドを実行してプロジェクトのデプロイ。

serverless deploy

8. lambda関数のテスト:

デプロイされた関数をテストするには、次のコマンドを入力。

serverless invoke -f hello

さらに、APIのエンドポイントを作成したい場合は...

serverless.ymlファイルを以下のように書き換え。

service: serverless-sample

provider:
  name: aws
  runtime: nodejs18.x
  stage: dev
  region: us-east-1 ## 任意のaws serverを指定(東京のサーバーの場合、ap-northeast-1)

functions:
  hello:
    handler: handler.handler
    ## ここから下👇が、新しく追加したところだよ。
    events:
      - httpApi:
          path: /
          method: get

続いて、また、改めてデプロイ更新!

serverless deploy

続いて、Expressを使ってみよう。

必要なライブラリをインストール

expressを使ってリクエストを受け取る場合は、まず、expressserverless-httpライブラリをインストール。

npm install express serverless-http

次に、handler.jsを以下のように書き換え。

'use strict'

const express = require('express');
const serverless = require('serverless-http');

const app = express();

app.get('/', async (req, res) => {
    res.send({ message: "リクエストは, [/] !"});
});

// ほかにも、/webhookのリクエストも追加
app.get('/webhook', async (req, res) => {
    res.send({ message: "リクエストは, [/webhook] !" });
});

/* 
ここがポイント!ただ,expressのコードだけではダメで、
ここで、serverless-httpライブラリを使用して、aws lambda関数用に変換 
*/
module.exports.handler = serverless(app);

serverless.ymlファイルの書き換え

そしたら、deployする上で肝心なserverless.ymlファイルを以下のように書き換え。

service: serverless-sample

provider:
  name: aws
  runtime: nodejs18.x
  stage: dev
  region: us-east-1 ## 任意のaws serverを指定(東京のサーバーの場合、ap-northeast-1)

functions:
  hello:
    handler: handler.handler
    events:
      - httpApi:
          path: /
          method: get
    ## ここから下👇が、新しく[/webhook]を追加したところだよ。
      - httpApi:
          path: /webhook
          method: get

いよいよ、デプロイ

serverless deploy

これで、目標達成!
実行が無事成功したら、コマンドのログに、APIのurlが2つ出力されているはずです。
([/]用のAPIと[/webhook]用のAPIのurlがあるはず)

Discussion