🥯

Serverless Framework のローカル環境 準備編

4 min read

概要:

前のServerless Framework関係となり。ローカル環境構築等になります。

  • ローカール環境で開発して、デプロイ回数を減らしたい目標です

構成

  • Serverless Framework
  • node: 14
  • serverless-dynamodb-local

参考


準備

  • IAM 権限, aws configure の設定は、前回と同様です。

  • npm add

npm init -y
npm install --save aws-sdk
npm install --save-dev serverless-offline
npm install --save-dev serverless-dynamodb-local
  • JDKが無い場合、 JDK追加
    (例ubuntu 18 : apt searchして。 openjdk-11-jdk追加しました)
sudo apt search openjdk-\(\.\)\+-jdk$
sudo apt install openjdk-11-jdk
  • serverless.yml 修正
service: service2
plugins: 
 - serverless-dynamodb-local
 - serverless-offline
  • dynamodb追加
sls dynamodb install

* serverless.yml 、dynamodb設定の追加

  • テーブルは、todos

https://gist.github.com/kuc-arc-f/9172da544a1d39a0f3b7f7b2ec8755fb

service: service2
custom:
  dynamodb:
    stages:
      - dev  
    start:
      port: 8000
      inMemory: true
      migrate: true
      seed: false

plugins: 
 - serverless-dynamodb-local
 - serverless-offline

frameworkVersion: '2'

provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: 20201221

#
functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: hello
          method: any
          cors: true 

resources:
  Resources:
    TodosDynamoDbTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: id
            AttributeType: S
        KeySchema:
          -
            AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: 'todos'

  • dynamodb テスト

  • add

aws dynamodb put-item --table-name todos --item '{"id":{"S":"1"},"body":{"S":"body123"}}' --endpoint-url http://localhost:8000
  • scan: リスト
$ aws dynamodb scan --table-name todos  --endpoint-url http://localhost:8000
{
    "Items": [
        {
            "body": {
                "S": "body123"
            },
            "id": {
                "S": "1"
            }
        }
    ],
    "Count": 1,
    "ScannedCount": 1,
    "ConsumedCapacity": null
}

  • sls offlineの起動
    ( 上記のdynamoは停止して、slsを起動します)

localhost:3000 で、apiテストできそうです。

sls offline start

Dynamodb Local Started, Visit: http://localhost:8000/shell
Serverless: DynamoDB - created table todos
offline: Starting Offline: dev us-east-1.
offline: Offline [http for lambda] listening on http://localhost:3002
offline: Function names exposed for local invocation by aws-sdk:
           * hello: service2-dev-hello

   ┌─────────────────────────────────────────────────────────────────────────┐
   │                                                                         │
   │   ANY | http://localhost:3000/dev/hello                                 │
   │   POST | http://localhost:3000/2015-03-31/functions/hello/invocations   │
   │                                                                         │
   └─────────────────────────────────────────────────────────────────────────┘

offline: [HTTP] server ready: http://localhost:3000 🚀

  • curl テスト、レスポンスの取得できました。
$ curl http://localhost:3000/dev/hello
{
  "message": "Go Serverless v1.0! Your function executed successfully!",
  "input": {
    "body": null,
    "headers": {
      "Host": "localhost:3000",
      "User-Agent": "curl/7.58.0",
      "Accept": "*/*"
    },
    "httpMethod": "GET",
    "isBase64Encoded": false,
    "multiValueHeaders": {
      "Host": [
        "localhost:3000"
      ],
      "User-Agent": [
        "curl/7.58.0"
      ],
      "Accept": [
        "*/*"
      ]
    },


関連のページ

https://zenn.dev/knaka0209/articles/ed7ebc956a43e0

....

Discussion

ログインするとコメントできます