-
Notifications
You must be signed in to change notification settings - Fork 0
/
serverless.yml
166 lines (159 loc) · 4.35 KB
/
serverless.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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
service: order-service
frameworkVersion: "2"
provider:
name: aws
region: eu-west-1
runtime: nodejs12.x
stage: ${opt:stage, "dev"}
lambdaHashingVersion: 20201221
environment:
STRIPE_SECRET_KEY: sk_test_51IHqhuEKthtArr3SXYScDHIOczJts6WLSVezPRwEu1ri7Yaka6fVjdkdIm4upAwTuZ2MSHchRcSKJgla0zt3TqbN00e2eqyOr2
DYNAMODB_CONFIG_FILE_PATH: configs/${self:provider.stage}-dynamo.yml
SNS_CONFIG_FILE_PATH: configs/${self:provider.stage}-sns.yml
TO_PAY_ORDERS_TABLE_NAME: ${self:provider.stage}-orders-to-pay
PAYED_ORDERS_TABLE_NAME: ${self:provider.stage}-orders-payed
apiGateway:
shouldStartNameWithService: true
iam:
role:
statements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- sns:Publish
Resource: '*'
plugins:
- serverless-webpack
- serverless-dynamodb-local
- serverless-dynamodb-seed
- serverless-offline
package:
individually: true
functions:
newOrder:
handler: src/endpoints/newOrder.default
events:
- http:
path: orders
method: POST
cors: true
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
getOrder:
handler: src/endpoints/getOrder.default
events:
- http:
path: orders/{ID}
method: GET
cors: true
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
getOrders:
handler: src/endpoints/getOrders.default
events:
- http:
path: orders
method: GET
cors: true
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
fulfillOrder:
handler: src/endpoints/fulfillOrders.default
events:
- http:
path: orders/{ID}
method: PATCH
cors: true
authorizer:
type: COGNITO_USER_POOLS
authorizerId:
Ref: ApiGatewayAuthorizer
processPaymentOutcome:
handler: src/endpoints/processPaymentOutcome.default
events:
- http:
path: stripe-hook
method: POST
cors: true
custom:
webpack:
webpackConfig: ./webpack.config.js
includeModules: true
dynamodb:
stages:
- dev
start:
port: 8000
inMemory: true
migrate: true
seed: true
convertEmptyValues: true
migration:
dir: ./offline
seed:
test:
sources:
- table: dev-orders-payed
sources: [ offline/seeds/orders.json ]
resources:
Resources:
OrdersToPayTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:provider.environment.TO_PAY_ORDERS_TABLE_NAME}
AttributeDefinitions:
- AttributeName: paymentId
AttributeType: S
KeySchema:
- AttributeName: paymentId
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
OrdersPayedTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:provider.environment.PAYED_ORDERS_TABLE_NAME}
AttributeDefinitions:
- AttributeName: customerId
AttributeType: S
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
GlobalSecondaryIndexes:
- IndexName: userIdIndex
KeySchema:
- AttributeName: customerId
KeyType: HASH
Projection:
ProjectionType: ALL
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
ProvisionedThroughput:
ReadCapacityUnits: 3
WriteCapacityUnits: 3
ApiGatewayAuthorizer:
Type: AWS::ApiGateway::Authorizer
Properties:
AuthorizerResultTtlInSeconds: 300
IdentitySource: method.request.header.Authorization
Name: ${self:provider.stage}-address-authorizer
RestApiId:
Ref: ApiGatewayRestApi
Type: COGNITO_USER_POOLS
ProviderARNs:
- !ImportValue ${self:provider.stage}-user-pool-arn