-
Notifications
You must be signed in to change notification settings - Fork 2
/
serverless.yml
138 lines (129 loc) · 3.95 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
service: polly-slack-bot
plugins:
- serverless-plugin-typescript
- serverless-dynamodb-local
- serverless-offline
useDotenv: true
custom:
prod:
schedule: "cron(0 * * * ? *)"
dev:
schedule: "cron(* * * * ? *)"
dynamodb:
stages:
- dev
start:
port: 8000
inMemory: true
migrate: true
# Comment if you don't have a DynamoDB running locally
noStart: true
migration:
dir: dynamodb/migrations
provider:
name: aws
runtime: nodejs14.x
region: eu-central-1
tags:
TTL: 2025-12-31
Project: Polly-Slack-Bot
iam:
role:
statements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- dynamodb:BatchWriteItem
Resource:
- "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}"
- "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}/index/*"
- "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}-votes"
- "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}-votes/index/*"
- "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}-schedules"
- "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.DYNAMODB_TABLE}-schedules/index/*"
environment:
CLIENT_SIGNING_SECRET: ${env:CLIENT_SIGNING_SECRET}
BOT_TOKEN: ${env:BOT_TOKEN}
WEBHOOK_URI: /api/messages
DYNAMODB_TABLE: ${self:service}-${sls:stage}
functions:
pollyBot:
handler: src/app.handler
events:
- http:
path: slack/events
method: post
scheduler:
handler: src/scheduler/scheduler.handler
events:
- schedule:
rate: ${self:custom.${sls:stage}.schedule}
enabled: true
resources:
Description: CloudFormation Stack for the Polly Poll Bot
Resources:
PollDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
TableName: ${self:provider.environment.DYNAMODB_TABLE}
Tags:
- Key: TTL
Value: 2025-12-31
- Key: Project
Value: Polly-Slack-Bot
SchedulesDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
TableName: ${self:provider.environment.DYNAMODB_TABLE}-schedules
Tags:
- Key: TTL
Value: 2025-12-31
- Key: Project
Value: Polly-Slack-Bot
VotesDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: S
- AttributeName: PollId
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
BillingMode: PAY_PER_REQUEST
GlobalSecondaryIndexes:
- IndexName: "PollIdIndex"
KeySchema:
- AttributeName: PollId
KeyType: HASH
Projection:
ProjectionType: ALL
TableName: ${self:provider.environment.DYNAMODB_TABLE}-votes
Tags:
- Key: TTL
Value: 2025-12-31
- Key: Project
Value: Polly-Slack-Bot