-
Notifications
You must be signed in to change notification settings - Fork 5
/
template.yaml
142 lines (134 loc) · 3.85 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
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
online-judge
Sample SAM Template for online-judge
Globals:
Function:
MemorySize: 1769
Api:
Cors:
AllowMethods: "'*'"
AllowHeaders: "'*'"
AllowOrigin: "'*'"
Resources:
ExecuteFunction:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
FunctionName:
Fn::If:
- IsNotProdStack
- !Sub "online-judge-ExecuteFunction-${AWS::StackName}"
- online-judge-ExecuteFunction
AutoPublishAlias: live
Timeout: 8
# we should probably not hardcode this...
VpcConfig:
# these settings prevent internet access. only include this in
# production -- I haven't figured out how to get the staging
# environment working with this...
Fn::If:
- IsNotProdStack
- !Ref AWS::NoValue
-
SecurityGroupIds:
- sg-0bc4a61cfc9289d08
SubnetIds:
- subnet-097720d648805d3ed
Metadata:
DockerTag: nodejs14.x-v1
DockerContext: ./execute
Dockerfile: Dockerfile
SubmitFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName:
Fn::If:
- IsNotProdStack
- !Sub "online-judge-SubmitFunction-${AWS::StackName}"
- online-judge-SubmitFunction
CodeUri: submit/
AutoPublishAlias: live
Handler: dist/src/app.lambdaHandler
Runtime: nodejs18.x
Timeout: 10
Policies:
- LambdaInvokePolicy:
FunctionName:
!Ref ExecuteFunction
- DynamoDBCrudPolicy:
TableName:
!Ref StatisticsDynamoDBTable
- DynamoDBCrudPolicy:
TableName:
!Ref DynamoDBTable
Environment:
Variables:
# for now, assume we are either in staging or in production.
# we need to know if we are staging or production to know
# which DynamoDB tables to write to, which functions to call, etc
IS_STAGING: !If [IsNotProdStack, "true", "false"]
Events:
Execute:
Type: Api
Properties:
Path: /execute
Method: post
CreateSubmission:
Type: Api
Properties:
Path: /submissions
Method: post
GetSubmission:
Type: Api
Properties:
Path: /submissions/{submissionID}
Method: get
Metadata:
BuildMethod: makefile
StatisticsDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName:
Fn::If:
- IsNotProdStack
- !Sub "online-judge-statistics-${AWS::StackName}"
- online-judge-statistics
AttributeDefinitions:
- AttributeName: id
AttributeType: S
BillingMode: PAY_PER_REQUEST
KeySchema:
- AttributeName: id
KeyType: HASH
DynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName:
Fn::If:
- IsNotProdStack
- !Sub "online-judge-${AWS::StackName}"
- online-judge
AttributeDefinitions:
- AttributeName: submissionID
AttributeType: S
BillingMode: PAY_PER_REQUEST
KeySchema:
- AttributeName: submissionID
KeyType: HASH
Outputs:
ExecuteFunction:
Description: "Execute Lambda Function ARN"
Value: !GetAtt ExecuteFunction.Arn
SubmitFunction:
Description: "Submit Lambda Function ARN"
Value: !GetAtt SubmitFunction.Arn
StatisticsDynamoDBTable:
Description: "Statistics Dyanmo DB Table ARN"
Value: !GetAtt StatisticsDynamoDBTable.Arn
DynamoDBTable:
Description: "Main Dyanmo DB Table ARN"
Value: !GetAtt DynamoDBTable.Arn
Conditions:
IsNotProdStack: !Not [!Equals [!Ref "AWS::StackName", "online-judge"]]