-
Notifications
You must be signed in to change notification settings - Fork 12
/
serverless.js
96 lines (79 loc) · 2.28 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
const AWS = require('aws-sdk')
const { mergeDeepRight } = require('ramda')
const { Component } = require('@serverless/components')
const { configChanged, createRoutesApi, updateRoutesApi, deleteApi, createApi } = require('./utils')
const defaults = {
name: 'serverless',
region: 'us-east-1'
}
class AwsApiGateway extends Component {
async default(inputs = {}) {
const config = mergeDeepRight(defaults, inputs)
const apig = new AWS.APIGateway({
region: config.region,
credentials: this.context.credentials.aws
})
const { name, template, routes, region } = config
let outputs
if (template) {
} else if (routes) {
const awsIamRole = await this.load('@serverless/aws-iam-role')
config.role =
config.role || (await awsIamRole({ ...config, service: 'apigateway.amazonaws.com' }))
if (!configChanged(this.state, config)) {
outputs = this.state
} else if (inputs.name && !this.state.name) {
this.cli.status('Creating')
outputs = await createRoutesApi({
apig,
name,
role: config.role,
routes,
stage: this.context.stage,
region
})
} else {
this.cli.status('Updating')
outputs = await updateRoutesApi({
apig,
name,
role: config.role,
routes,
id: this.state.id,
stage: this.context.stage,
region
})
}
} else {
// create simple API
if (!this.state.id) {
outputs = await createApi({ apig, name })
}
}
this.state = outputs
await this.save()
this.cli.outputs(outputs)
return outputs
}
async remove(inputs = {}) {
const { id } = this.state
if (!id) {
return
}
const config = mergeDeepRight(defaults, inputs)
const awsIamRole = await this.load('@serverless/aws-iam-role')
// there's no need to pass names as input
// since it's saved in the child component state
await awsIamRole.remove()
const apig = new AWS.APIGateway({
region: config.region,
credentials: this.context.credentials.aws
})
this.cli.status('Removing')
await deleteApi({ apig, id })
this.state = {}
await this.save()
return {}
}
}
module.exports = AwsApiGateway