Lambda-Serverless应用的本地开发

Serverless应用的Local开发示例

  • 云上开发
  • 本地开发
    • 构成图
    • 必要包的安装
    • 配置 yml 文件使插件有效
    • 安装 DynamoDB Local
      • 无结果
      • 解决
    • DynamoDB Local 表内容添加
    • 添加DynamoDB Local 的表定义到 yml 配置文件
    • DynamoDB Local 启动
      • 出现 Error
      • 解决
      • DynamoDB Local 启动
    • local api-gateway 启动
    • 启动确认
    • 资源删除

直接在云上开发,省去了环境的配置,但每次都要Deploy,而且Lambda函数的每次执行都会收费,因此在本地测试开发是必要的。

云上开发

参照下面的链接,实现的是云上的开发。
链接: Lambda-DynamoDB + API Gateway + Serverless Framework 的简单实例.

本地开发

构成图

Lambda-Serverless应用的本地开发_第1张图片

必要包的安装

API Gateway; 本地使用 serverless-offline 插件模拟
DynamoDB ; 本地使用 serverless-dynamodb-local 插件安装 DynamoDB Local

[vagrant@localhost sampleSls]$ sudo npm install --save-dev serverless-offline
[vagrant@localhost sampleSls]$ sudo npm install --save-dev serverless-dynamodb-local

配置 yml 文件使插件有效

$ vi serverless.yml
# service: 内定义追加
plugins: 
 - serverless-dynamodb-local
 - serverless-offline

安装 DynamoDB Local

[vagrant@localhost sampleSls]$ sls dynamodb install

无结果

运行上面的命令,画面未显示任何结果

解决

serverless-dynamodb-local 的 0.2.31 有·bug,指定版本 0.2.30 重新安装

[vagrant@localhost sampleSls]$ sudo npm uninstall serverless-dynamodb-local
[vagrant@localhost sampleSls]$ sudo npm install serverless-dynamodb-local@0.2.30
 Installation complete!

DynamoDB Local 表内容添加

测试表创建时,追加record

$ mkdir db
$ vi db/db.json
[
    {
        "id": "004",
        "name": "test04FormLocal"
    }
]

添加DynamoDB Local 的表定义到 yml 配置文件

api-gateway的端口设置为 4000 (测试用,任意)

custom:
  serverless-offline:
    port: 4000
  dynamodb:
    start:
      port: 8000
      inMemory: true
      migrate: true
      seed: true
    seed:
      development:
        sources:
          - table: sls-user
            sources: [./db/db.json]

DynamoDB Local 启动

[vagrant@localhost sampleSls]$ sls dynamodb start

出现 Error

[vagrant@localhost sampleSls]$ sls dynamodb start
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: spawn java ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
    at onErrorNT (internal/child_process.js:362:16)
    at _combinedTickCallback (internal/process/next_tick.js:139:11)
    at process._tickDomainCallback (internal/process/next_tick.js:219:9)

解决

java 没有安装

[vagrant@localhost sampleSls]$ java --version
-bash: java: command not found

需要java环境

[vagrant@localhost sampleSls]$ sudo yum install java-1.8.0-openjdk
[vagrant@localhost sampleSls]$ sudo yum install java-1.8.0-openjdk-devel

path设置

[vagrant@localhost sampleSls]$ dirname $(readlink $(readlink $(which java)))
[vagrant@localhost sampleSls]$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
export PATH=$PATH:$JAVA_HOME/bin
[vagrant@localhost sampleSls]$ java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

DynamoDB Local 启动

[vagrant@localhost sampleSls]$ sls dynamodb start
Dynamodb Local Started, Visit: http://localhost:8000/shell

local api-gateway 启动

[vagrant@localhost sampleSls]$ sls offline
Serverless: Starting Offline: dev/ap-northeast-1.

Serverless: Routes for hello:
Serverless: (none)

Serverless: Routes for listUser:
Serverless: GET /user

Serverless: Offline listening on http://localhost:4000

启动确认

[vagrant@localhost ~]$ curl http://localhost:4000/user
{"users":[{"name":"test04FormLocal","id":"004"}]}

资源删除

[vagrant@localhost sampleSls]$ sls remove -v

你可能感兴趣的:(Lambda,AWS)