Serverless应用的Local开发示例
直接在云上开发,省去了环境的配置,但每次都要Deploy,而且Lambda函数的每次执行都会收费,因此在本地测试开发是必要的。
云上开发
参照下面的链接,实现的是云上的开发。
链接: Lambda-DynamoDB + API Gateway + Serverless Framework 的简单实例.
本地开发
构成图
必要包的安装
API Gateway; 本地使用 serverless-offline 插件模拟
DynamoDB ; 本地使用 serverless-dynamodb-local 插件安装 DynamoDB Local
[[email protected] sampleSls]$ sudo npm install --save-dev serverless-offline
[[email protected] sampleSls]$ sudo npm install --save-dev serverless-dynamodb-local
配置 yml 文件使插件有效
$ vi serverless.yml
# service: 内定义追加
plugins:
- serverless-dynamodb-local
- serverless-offline
安装 DynamoDB Local
[[email protected] sampleSls]$ sls dynamodb install
无结果
运行上面的命令,画面未显示任何结果
解决
serverless-dynamodb-local 的 0.2.31 有·bug,指定版本 0.2.30 重新安装
[[email protected] sampleSls]$ sudo npm uninstall serverless-dynamodb-local
[[email protected] sampleSls]$ sudo npm install serverless-dynamodb-[email protected]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 启动
[[email protected] sampleSls]$ sls dynamodb start
出现 Error
[[email protected] 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 没有安装
[[email protected] sampleSls]$ java --version
-bash: java: command not found
需要java环境
[[email protected] sampleSls]$ sudo yum install java-1.8.0-openjdk
[[email protected] sampleSls]$ sudo yum install java-1.8.0-openjdk-devel
path设置
[[email protected] sampleSls]$ dirname $(readlink $(readlink $(which java)))
[[email protected] 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
[[email protected] 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 启动
[[email protected] sampleSls]$ sls dynamodb start
Dynamodb Local Started, Visit: http://localhost:8000/shell
local api-gateway 启动
[[email protected] 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
启动确认
[[email protected] ~]$ curl http://localhost:4000/user
{"users":[{"name":"test04FormLocal","id":"004"}]}
资源删除
[[email protected] sampleSls]$ sls remove -v