-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserverless.local.yml
139 lines (128 loc) · 3.34 KB
/
serverless.local.yml
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
service: candidate-local
custom:
dynamodb:
stages:
- dev
start:
port: 8000
inMemory: true
heapInitial: 200m
heapMax: 1g
migrate: true
seed: true
convertEmptyValues: true
seed:
domain:
sources:
- table: ${self:provider.environment.DYNAMODB_TABLE}
sources: [./src/resources/seedData.json]
provider:
name: aws
runtime: nodejs14.x
region: us-east-1
stage: dev
environment:
DYNAMODB_TABLE: ${opt:stage, self:provider.stage}-candidate-table
S3_BUCKET: ${opt:stage, self:provider.stage}-candidate-bucket
DYNAMODB_INDEX: Candidate-Availability-index
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
functions:
createCandidate:
handler: src/api/create.candidate
events:
- http:
path: candidate
method: post
cors: true
request:
schema:
application/json: ${file(./src/validator/candidate.json)}
createAppointment:
handler: src/api/create.appointment
events:
- http:
path: appointment/{id}
method: put
cors: true
request:
schema:
application/json: ${file(./src/validator/appointment.json)}
listCandidates:
handler: src/api/list.candidates
events:
- http:
path: candidate
method: get
cors: true
listAppointments:
handler: src/api/list.appointments
events:
- http:
path: candidate/{id}
method: get
cors: true
listAvailability:
handler: src/api/list.availability
events:
- http:
path: availability
method: get
cors: true
getAppointment:
handler: src/api/get.appointment
events:
- http:
path: appointment/{id}
method: get
cors: true
getAvailability:
handler: src/api/get.availability
events:
- http:
path: availability/{id}
method: get
cors: true
plugins:
- serverless-plugin-typescript
- serverless-dynamodb-local
- serverless-offline
resources:
Resources:
CandidateDynamoDbTable:
Type: AWS::DynamoDB::Table
DeletionPolicy: Retain
Properties:
TableName: ${self:provider.environment.DYNAMODB_TABLE}
AttributeDefinitions:
- AttributeName: id
AttributeType: S
- AttributeName: date
AttributeType: S
- AttributeName: availability
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
- AttributeName: date
KeyType: RANGE
GlobalSecondaryIndexes:
- IndexName: ${self:provider.environment.DYNAMODB_INDEX}
KeySchema:
- AttributeName: availability
KeyType: HASH
- AttributeName: date
KeyType: RANGE
Projection:
ProjectionType: ALL
StreamSpecification:
StreamViewType: NEW_AND_OLD_IMAGES
BillingMode: PAY_PER_REQUEST