forked from debrajpaul/serverless-cake-ordering-system-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
serverless.yml
124 lines (119 loc) · 3.75 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
service: serverless-cake-ordering-system
plugins:
- serverless-pseudo-parameters
provider:
name: aws
runtime: nodejs10.x
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:PutItem
- dynamodb:GetItem
Resource:
- arn:aws:dynamodb:#{AWS::Region}:#{AWS::AccountId}:table/ordersTable
- Effect: Allow
Action:
- kinesis:PutRecord
Resource:
- arn:aws:kinesis:#{AWS::Region}:#{AWS::AccountId}:stream/order-events
- Effect: Allow
Action:
- ses:SendEmail
Resource:
- "*"
Condition:
StringEquals:
ses:FromAddress:
- Effect: Allow
Action:
- sqs:SendMessage
Resource:
- arn:aws:sqs:#{AWS::Region}:#{AWS::AccountId}:deliveryServiceQueue
- arn:aws:sqs:#{AWS::Region}:#{AWS::AccountId}:customerServiceQueue
functions:
createOrder:
handler: handler.createOrder
events:
- http:
path: /order
method: post
environment:
orderTableName: ordersTable
orderStreamName: order-events
orderFulfillment:
handler: handler.orderFulfillment
events:
- http:
path: /order/fulfill
method: post
environment:
orderTableName: ordersTable
orderStreamName: order-events
notifyExternlParties:
handler: handler.notifyExternlParties
events:
- stream:
arn: arn:aws:kinesis:#{AWS::Region}:#{AWS::AccountId}:stream/order-events
environment:
region: ${self:provider.region}
cakeProducerEmail: [email protected]
orderingSystemEmail: [email protected]
deliveryCompanyQueue:
Ref: deliveryServiceQueue
orderTableName: ordersTable
notifyDeliveryCompany:
handler: handler.notifyDeliveryCompany
events:
- sqs:
arn:
Fn::GetAtt:
- deliveryServiceQueue
- Arn
batchSize: 1
orderDelivered:
handler: handler.orderDelivered
events:
- http:
path: /order/delivered
method: post
environment:
region: ${self:provider.region}
customerServiceQueue:
Ref: customerServiceQueue
orderTableName: ordersTable
notifyCustomerService:
handler: handler.notifyCustomerService
events:
- sqs:
arn:
Fn::GetAtt:
- customerServiceQueue
- Arn
batchSize: 1
resources:
Resources:
orderEventsStream:
Type: AWS::Kinesis::Stream
Properties:
Name: order-events
ShardCount: 1
orderTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ordersTable
AttributeDefinitions:
- AttributeName: "orderId"
AttributeType: "S"
KeySchema:
- AttributeName: "orderId"
KeyType: "HASH"
BillingMode: PAY_PER_REQUEST
deliveryServiceQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: deliveryServiceQueue
customerServiceQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: customerServiceQueue