tech.chakapoko.com
Home / Serverless

[AWS][Node.js]Serverlessを触ってみる

アプリケーションの作成

serverless create でアプリケーションを作成できる。

$ serverless -v
1.45.1
$ serverless create --template aws-nodejs --path serverless-hello
$ cd serverless-hello
handler.js     serverless.yml

生成されたファイルの内容

hanler.js

'use strict';

module.exports.hello = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: event,
    }, null, 2),
  };
};

servlerless.yml

service: serverless-hello # NOTE: update this with your service name

provider:
  name: aws
  runtime: nodejs10.x

functions:
  hello:
    handler: handler.hello

権限の追加

serverless コマンドの実行のためには AdministratorAccess の権限が必要

デプロイ

デプロイをしてみる。

$ serverless deploy -v

Lambdaの管理画面を開いてみると関数がデプロイされているのが確認できる。

デフォルトだとバージニア北部リージョンにデプロイされるようだ。

Lambda

serverless.yml でregionを設定すると東京リージョンにデプロイできた。

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

関数の実行

$ serverless invoke -f hello -l

{
    "statusCode": 200,
    "body": "{\n  \"message\": \"Go Serverless v1.0! Your function executed successfully!\",\n  \"input\": {}\n}"
}
--------------------------------------------------------------------
START RequestId: a4f48ac5-6505-4043-adfe-84c0d6c42cfb Version: $LATEST
END RequestId: a4f48ac5-6505-4043-adfe-84c0d6c42cfb
REPORT RequestId: a4f48ac5-6505-4043-adfe-84c0d6c42cfb  Duration: 8.86 ms       Billed Duration: 100 ms         Memory Size: 1024 MB Max Memory Used: 74 MB

HTTPでのアクセス

servlerless.ymlevents を設定すると、HTTPでアクセスできるようになります。

functions:
  hello:
    handler: handler.hello
    events:
      - http: GET hello
$ serverless deploy -v
Serverless: Packaging service...
...
Service Information
service: serverless-hello
stage: dev
region: ap-northeast-1
stack: serverless-hello-dev
resources: 10
api keys:
  None
endpoints:
  GET - https://j3scq3sam6.execute-api.ap-northeast-1.amazonaws.com/dev/hello
functions:
  hello: serverless-hello-dev-hello
layers:
  None

...

動作確認してみます。

$ curl https://j3scq3sam6.execute-api.ap-northeast-1.amazonaws.com/dev/hello | head
{
  "message": "Go Serverless v1.0! Your function executed successfully!",
  "input": {
    "resource": "/hello",
    "path": "/hello",
    "httpMethod": "GET",
    "headers": {
      "Accept": "*/*",
      "CloudFront-Forwarded-Proto": "https",
      "CloudFront-Is-Desktop-Viewer": "true",

削除

serverless remove でお掃除ができます。

$ serverless remove