Skip to content

Latest commit

 

History

History
155 lines (105 loc) · 4.06 KB

README.zh-CN.md

File metadata and controls

155 lines (105 loc) · 4.06 KB

English | 简体中文

Serverless QCloud SCF(Serverless Cloud Function) Plugin

本插件提供 Serverless FrameworkQCloud SCF 的支持.

安装使用

需求

  • Node.js 版本不低于 v6.x.
    • 目前, Qcloud 云函数只支持 Node.js v6.10. 如果你的开发环境高于这个版本, 记得部署之前把源码转换到 es5.
  • Serverless CLI v1.20.0+. 通过 npm i -g serverless 安装.
  • Qcloud 帐号.

例子

项目文件结构类似这样:

├── index.js
├── node_modules
├── package.json
└── serverless.yml

serverless.yml:

service: hello-world

provider:
  name: qcloud
  runtime: nodejs6.10
  credentials: ~/.qcloudcli/credentials # 必须提供绝对路径

plugins:
  - serverless-qcloud-scf

package:
  include:
    - index.js
  exclude:
    - package-lock.json
    - .gitignore
    - .git/**

functions:
  hello:
    handler: index.hello
    events:
      - http:
          path: /hello
          method: get

package.json:

{
  "name": "serverless-qcloud-hello-world",
  "version": "0.1.0",
  "description": "Hello World example for qcloud provider with Serverless Framework.",
  "main": "index.js",
  "license": "MIT",
  "devDependencies": {
    "serverless-qcloud-scf": "*"
  }
}

index.js:

'use strict'

exports.hello = (event, context, callback) => {
  callback(null, 'Hello!')
}

凭证

注意 ~/.qcloudcli/credentialsqcloudcli 在运行 qcloudcli configure 后生成的凭证. 你不必使用 qcloudcli, 也可以选择手动创建这个文件, 填入你的 secret keys, 记得在 serverless.yml 文件里指向 credentials 文件.

除了 qcloud_secretkey and qcloud_secretid 以外, 请配置 qcloud_appid (在 Qcloud 控制台中可以找到你的帐号ID, 以125开头的数字). 完整的凭证文件类似这样:

[default]
qcloud_secretkey = ****************Ewdm
qcloud_secretid = ****************ugEY
qcloud_appid = 1250000000

环境变量中的凭证

如果你不喜欢 qcloudcli 这种方式. 你也可以把凭证放到环境变量里. serverless-qcloud-scf 会尝试从环境变量中读取.

QCLOUD_SECRETID=xxx QCLOUD_SECRETKEY=xxx QCLOUD_APPID=1250000000 serverless package

建议尝试 dotenvdirenv

工作流

  • 部署服务到 Qcloud:

    serverless deploy

    如果你的服务包含 HTTP 终端点, 部署成功后会显示调用云函数所需的网址.

  • 当你不再需要之前部署的服务后可以选择移除它们:

    serverless remove

    注意: 部分资源可能无法移除, 例如非空的 COS Bucket, 非空的 API 网关, 造成这种情况的原因有很多, 例如部署成功后修改了项目配置 serverless.yml, 例如你有多个项目共享同一个服务名称, 则这些项目会共享 COS Bucket 和 API 网关.

限制

云函数(SCF)

同地域下云函数名称唯一.

每个地域下的最大函数数量不能超过20个, 详见产品文档

对象存储(COS)

同帐号下对象存储名称唯一.

如果部署所用的 Bucket 已经存在, 插件会尝试将 ACL 设为 public-read 并向其中写入内容.

创建北京(bj)区云函数时, 代码只能从对象存储 ap-beijing-1 区读取.

API 网关

服务ID唯一. 服务允许重名. API允许重名.

插件根据区域和服务名搜寻目标服务, 如果不存在则创建, 如果存在会覆盖其中已有的 API, 插件无法处理两个以上的同名服务.

服务内部的 API 按 "方法+路径" 的方式决定唯一性.

License

MIT