-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserverless.yml
153 lines (146 loc) · 4.92 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# NOTES
# StateMachine Execution ARN's are stored in the user object so
# the state of long running tasks can be polled by the client side.
# E.G.; Onboarding can show a status component for the soundcloud import.
service: jamout-api
plugins:
- serverless-webpack
- serverless-offline
- serverless-step-functions
- serverless-external-s3-event
custom:
webpackIncludeModules: true
awsAccountId: 533183579694
provider:
name: aws
runtime: nodejs6.10
region: us-west-2
memorySize: 128
profile: jamout # Used on Gabe's machine
# Env vars are set in the console, bro.
environment:
SC_CLIENT_ID: ${file(./serverless.env.yml):${opt:stage}.SC_CLIENT_ID}
STRIPE_PUBLISHABLE: ${file(./serverless.env.yml):${opt:stage}.STRIPE_PUBLISHABLE}
STRIPE_SECRET: ${file(./serverless.env.yml):${opt:stage}.STRIPE_SECRET}
USER_TABLE: ${file(./serverless.env.yml):${opt:stage}.USER_TABLE}
functions:
gql:
handler: gql/index.handler
events:
- http:
path: gql
method: post
cors: true
integration: lambda-proxy
environment:
JWT_SECRET: b5c0b187fe309af-d1sn3yl4ndf0rever-0f4d35982fd961d7e
soundcloudImporterStateMachineArn: ${self:resources.Outputs.SoundCloudImporter.Value}
soundcloudTrackMetadata:
handler: soundcloud/trackMetadata.default
soundcloudTrackFiles:
handler: soundcloud/trackFiles.default
timeout: 60
music-triggerReleaseReadinessChecker:
handler: music/triggerReleaseReadinessChecker.default
events:
- existingS3:
bucket: jamout.music
events:
- s3:ObjectCreated:*
rules:
- suffix: "/audio"
environment:
musicReleaseReadinessCheckerArn: ${self:resources.Outputs.ReleaseReadinessChecker.Value}
music-metadataCheck:
handler: music/metadataCheck.default
music-objectCheck:
handler: music/objectCheck.default
timeout: 60
music-objectCopy:
handler: music/objectCopy.default
stepFunctions:
stateMachines:
SoundCloudImporter:
name: SoundCloudImporter
definition:
Comment: "Imports a track's metdata and files from SoundCloud."
StartAt: Metadata
States:
Metadata:
Type: Task
Resource: arn:aws:lambda:${self:provider.region}:${self:custom.awsAccountId}:function:${self:service}-${opt:stage}-soundcloudTrackMetadata
Next: Files
Catch:
- ErrorEquals:
- States.ALL
Next: Panic
Files:
Type: Task
Resource: arn:aws:lambda:${self:provider.region}:${self:custom.awsAccountId}:function:${self:service}-${opt:stage}-soundcloudTrackFiles
End: true
Catch:
- ErrorEquals:
- States.ALL
Next: Panic
Panic:
Type: Pass
Result: "Panic, Panic, Panic!."
End: true
ReleaseReadinessChecker:
name: ReleaseReadinessChecker
definition:
Comment: "Checks if the audio is release ready when a new audio object is created."
StartAt: MetadataCheck
States:
MetadataCheck:
Type: Task
Resource: arn:aws:lambda:${self:provider.region}:${self:custom.awsAccountId}:function:${self:service}-${opt:stage}-music-metadataCheck
ResultPath: "$.latest"
Next: DidReleaseReady
Catch:
- ErrorEquals:
- States.ALL
Next: Panic
DidReleaseReady:
Type: Choice
Choices:
- Variable: "$.latest.didReleaseReadyCheck"
BooleanEquals: true
Next: Success
- Variable: "$.latest.didReleaseReadyCheck"
BooleanEquals: false
Next: ObjectCheck
Default: Panic
ObjectCheck:
Type: Task
Resource: arn:aws:lambda:${self:provider.region}:${self:custom.awsAccountId}:function:${self:service}-${opt:stage}-music-objectCheck
ResultPath: "$.releaseReadyCheck"
Next: ObjectCopy
Catch:
- ErrorEquals:
- States.ALL
Next: Panic
ObjectCopy:
Type: Task
Resource: arn:aws:lambda:${self:provider.region}:${self:custom.awsAccountId}:function:${self:service}-${opt:stage}-music-objectCopy
End: true
Catch:
- ErrorEquals:
- States.ALL
Next: Panic
Success:
Type: Succeed
Panic:
Type: Pass
Result: "Panic, Panic, Panic!."
End: true
resources:
Outputs:
SoundCloudImporter:
Description: The ARN of the Soundcloud Importer state machine
Value:
Ref: SoundCloudImporter
ReleaseReadinessChecker:
Description: The ARN of the Release Readiness Checker state machine
Value:
Ref: ReleaseReadinessChecker