-
Notifications
You must be signed in to change notification settings - Fork 1
/
serverless.yml
105 lines (98 loc) · 2.77 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
service: webhook-publish
useDotenv: true
plugins:
- serverless-prune-plugin
- serverless-stage-manager
custom:
awsAccount: ${env:AWS_ACCOUNT_ID}
stages:
- dev
- stage
- v1
prune:
automatic: true
includeLayers: true
number: 5
queue:
primary: ${self:service}-${opt:stage, self:provider.stage}-primary
primary-dlq: ${self:service}-${opt:stage, self:provider.stage}-primary--DLQ
provider:
name: aws
runtime: nodejs16.x
stage: dev
region: ap-southeast-2
logRetentionInDays: 30
deploymentBucket:
name: ${env:DEPLOY_BUCKET_PREFIX}-${self:provider.region}
blockPublicAccess: true
stackTags:
service: ${self:service}
env: ${opt:stage, self:provider.stage}
version: ${env:VERSION_NUMBER, 0}
iamRoleStatements:
- Effect: "Allow"
Action:
- "sqs:SendMessage"
- "sqs:GetQueueUrl"
Resource:
- "arn:aws:sqs:${self:provider.region}:${self:custom.awsAccount}:${self:custom.queue.primary}"
- "arn:aws:sqs:${self:provider.region}:${self:custom.awsAccount}:${self:custom.queue.primary-dlq}"
- Effect: "Allow"
Action:
- "sqs:ListQueues"
Resource: "arn:aws:sqs:${self:provider.region}:${self:custom.awsAccount}:*"
environment:
SLS_REGION: ${opt:region, self:provider.region}
SLS_AWS_ACCOUNT: ${self:custom.awsAccount}
SLS_SQS_QUEUE_PRIMARY: ${self:custom.queue.primary}
MOCK_SUBSCRIBER_RESPONSE_CODE: 200
AWS_ACCOUNT_ID: ${env:AWS_ACCOUNT_ID}
HEADER_NAME: ${env:HEADER_NAME}
package:
individually: true
exclude:
- .env
- README.md
- package.json
- package-lock.json
- node_modules/.bin/**
- node_modules/aws-sdk/**
- node_modules/**/aws-sdk/**
- node_modules/serverless/**
functions:
worker:
handler: src/worker.consume
description: Post webhook callbacks and handle retries
timeout: 15
memorySize: 128
events:
- sqs:
arn: "arn:aws:sqs:${self:provider.region}:${self:custom.awsAccount}:${self:custom.queue.primary}"
batchSize: 1
subscriber:
handler: src/subscriber.subscribe
description: Webhook mock subscriber to receive and log posted callbacks
timeout: 10
memorySize: 128
events:
- http:
path: mock-subscriber
method: post
resources:
Resources:
PrimaryQueue:
Type: "AWS::SQS::Queue"
Properties:
QueueName: "${self:custom.queue.primary}"
VisibilityTimeout: 60
RedrivePolicy:
deadLetterTargetArn:
"Fn::GetAtt":
- PrimaryDeadLetterQueue
- Arn
maxReceiveCount: 5
PrimaryDeadLetterQueue:
Type: "AWS::SQS::Queue"
Properties:
QueueName: "${self:custom.queue.primary-dlq}"
MessageRetentionPeriod: 1209600