-
Notifications
You must be signed in to change notification settings - Fork 0
/
serverless.js
108 lines (88 loc) · 3.13 KB
/
serverless.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// serverless.js
const DeployFunction = require('./src/deployFunction')
const RemoveFunction = require('./src/removeFunction')
const Package = require('./src/package')
const { Component } = require('@serverless/core')
const util = require('util')
const { prepareInputs } = require('./src/utils')
class BaiduCLoudFunction extends Component {
/*
* Default (必须)
* - default 是用来执行、准备和更新你的组建的函数
* - 执行命令 `$ serverless` 会运行此函数
* - You can run this function by running the "$ serverless" command
*/
async default(inputs = {}) {
inputs = prepareInputs(inputs, this);
this.credentials = {
ak: process.env.BAIDU_ACCESS_KEY_ID,
sk: process.env.BAIDU_SECRET_ACCESS_KEY
}
console.log('Starting deploy cfc component...')
const cfc = new DeployFunction(this.credentials.ak, this.credentials.sk, inputs.region)
if (!inputs.exclude) {
inputs.exclude = []
}
if (!inputs.include) {
inputs.include = []
}
const defaultExclude = ['.serverless', '.temp_env', '.git/**','.gitignore']
for (let i = 0; i < defaultExclude.length; i++) {
if (inputs.exclude.indexOf(defaultExclude[i]) == -1) {
inputs.exclude.push(defaultExclude[i])
}
}
const zipOutput = util.format('%s/%s.zip', this.context.instance.stateRoot, inputs.name)
await Package.package(inputs.src, zipOutput, inputs.include, inputs.exclude)
inputs.src = zipOutput
const oldFuncObject = await cfc.getFunction(inputs.name)
const outpout = {
FunctionName: inputs.name,
Runtime: inputs.runtime,
Handler: inputs.handler,
MemorySize: inputs.memorySize,
Timeout: inputs.timeout,
Region: inputs.region,
Description: inputs.description,
}
console.log('deploy function...')
const funcObject = await cfc.deploy(inputs, oldFuncObject)
console.log('successfully deploy a function.')
outpout.FunctionBrn = funcObject.body.FunctionBrn
outpout.CodeSha256 = funcObject.body.CodeSha256
outpout.SourceTag = funcObject.body.SourceTag
// Update state
this.state.name = inputs.name
this.state.brn = outpout.FunctionBrn
this.state.region = inputs.region
await this.save()
return {
outpout
}
}
/*
* Remove (可选)
* - 如果组件需要删除基础设施,推荐添加该方法
* - 执行命令 `$ serverless remove` 会运行此函数
*/
async remove(inputs = {}) {
if (!this.state.name) {
console.log(`No state found. Function has been removed already. Aborting.`)
return
}
//console.log(inputs)
this.credentials = {
ak: process.env.BAIDU_ACCESS_KEY_ID,
sk: process.env.BAIDU_SECRET_ACCESS_KEY
}
const { name, region } = this.state
const cfcClient = new RemoveFunction(this.credentials.ak, this.credentials.sk, region)
console.log(`Removing function ${name} from the ${region} region.`)
await cfcClient.remove(name)
console.log(`Successfully removed function ${name} from the ${region} region.`)
this.state = {}
await this.save()
return {}
}
}
module.exports = BaiduCLoudFunction