-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.yaml
156 lines (147 loc) · 4.35 KB
/
template.yaml
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
AWSTemplateFormatVersion: "2010-09-09"
Transform:
- AWS::LanguageExtensions
- AWS::Serverless-2016-10-31
Description: sasha
Parameters:
ApplicationName:
Description: resource prefix
Type: String
Default: sasha
ScheduleExpression:
Description: schedule expression for the eventbridge event
Type: String
Default: rate(3 hours)
DaysToRetainLogs:
Description: days to retain logs in CloudWatch
Type: Number
Default: 30
PagesToScrape:
Description: pages to scrape matches
Type: Number
Default: 6
MaxConcurrency:
Description: concurrency of scrape pages
Type: Number
Default: 1
# ScrapingIntervalSeconds:
# Description: interval seconds to start scraping the next page
# Type: Number
# Default: 900
Resources:
SashaStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
Name: !Sub ${ApplicationName}-state-machine
DefinitionUri: statemachine/scraping.asl.json
DefinitionSubstitutions:
PagesToScrape: !Ref PagesToScrape
# ScrapingIntervalSeconds: !Ref ScrapingIntervalSeconds
SashaFunctionArn: !GetAtt SashaFunction.Arn
Logging:
Destinations:
- CloudWatchLogsLogGroup:
LogGroupArn: !GetAtt StateMachineLogGroup.Arn
IncludeExecutionData: true
Level: ALL
Role: !GetAtt StepFunctionRole.Arn
Events:
Schedule:
Type: ScheduleV2
Properties:
Name: !Sub ${ApplicationName}-state-machine-scheduler
ScheduleExpression: !Ref ScheduleExpression
SashaFunction:
Type: AWS::Serverless::Function
Metadata:
BuildMethod: go1.x
Properties:
FunctionName: !Sub ${ApplicationName}-scraper
CodeUri: .
Description: "scrape vlr.gg upcoming matches"
Handler: bootstrap
Runtime: provided.al2023
Architectures:
- x86_64
MemorySize: 128
Timeout: 900
Policies:
DynamoDBCrudPolicy:
TableName: !Ref VlrMatchesTable
Environment:
Variables:
OUTPUT_MODE: dynamodb
VLR_MATCHES_TABLE: !Ref VlrMatchesTable
VlrMatchesTable:
Type: AWS::DynamoDB::Table
DeletionPolicy: Retain
UpdateReplacePolicy: Retain
Properties:
TableName: !Sub ${ApplicationName}-vlr-matches
AttributeDefinitions:
- AttributeName: startDate
AttributeType: S
- AttributeName: id
AttributeType: N
BillingMode: PROVISIONED
DeletionProtectionEnabled: True
KeySchema:
- AttributeName: startDate
KeyType: HASH
- AttributeName: id
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
StateMachineLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub /aws/states/${ApplicationName}-state-machine
RetentionInDays: !Ref DaysToRetainLogs
SashaFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub /aws/lambda/${SashaFunction}
RetentionInDays: !Ref DaysToRetainLogs
StepFunctionRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ${ApplicationName}-stepfunctions-role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service:
- states.amazonaws.com
Action:
- "sts:AssumeRole"
StepFunctionsLoggingPolicy:
Type: AWS::IAM::RolePolicy
Properties:
PolicyName: !Sub ${ApplicationName}-stepfunctions-policy
RoleName: !Ref StepFunctionRole
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- lambda:InvokeFunction
Resource: !Sub "${SashaFunction.Arn}*"
- Effect: Allow
Action:
- logs:CreateLogDelivery
- logs:CreateLogStream
- logs:GetLogDelivery
- logs:UpdateLogDelivery
- logs:DeleteLogDelivery
- logs:ListLogDeliveries
- logs:PutLogEvents
- logs:PutResourcePolicy
- logs:DescribeResourcePolicies
- logs:DescribeLogGroups
Resource: "*"
Outputs:
VlrMatchesTableName:
Description: DynamoDB Table for match list
Value: !Ref VlrMatchesTable