-
Notifications
You must be signed in to change notification settings - Fork 0
/
cloudformation.yaml
230 lines (198 loc) · 5.76 KB
/
cloudformation.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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
AWSTemplateFormatVersion: 2010-09-09
Parameters:
PrivateBucket:
Type: String
PublicBucket:
Type: String
DistributionBaseUrl:
Type: String
BrowseBaseUrl:
Type: String
DefaultResponseTopicArn:
Type: String
DefaultResponseTopicRegion:
Type: String
Default: us-east-1
AllowedValues:
- us-east-2
- us-east-1
- us-west-1
- us-west-2
- ap-south-1
- ap-northeast-2
- ap-southeast-1
- ap-southeast-2
- ap-northeast-1
- ca-central-1
- cn-north-1
- eu-central-1
- eu-west-1
- eu-west-2
- eu-west-3
- sa-east-1
SdsAccountNumber:
Type: CommaDelimitedList
CachedCmrTokenKey:
Type: String
Default: cached-cmr-auth-token
CmrBaseUrl:
Type: String
Default: https://cmr.uat.earthdata.nasa.gov
AllowedValues:
- https://cmr.earthdata.nasa.gov
- https://cmr.uat.earthdata.nasa.gov
LaunchpadCertificateSecretArn:
Type: String
CmrProvider:
Type: String
Outputs:
JobTopic:
Value: !Ref JobTopic
ErrorTopic:
Value: !Ref ErrorTopic
Resources:
StepFunctionStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Ref AWS::StackName
VerifyLambdaArn: !GetAtt VerifyStack.Outputs.LambdaArn
NotifyLambdaArn: !GetAtt NotifyStack.Outputs.LambdaArn
IngestLambdaArn: !GetAtt IngestStack.Outputs.LambdaArn
MetadataConstructionLambdaArn: !GetAtt MetadataConstructionStack.Outputs.LambdaArn
TemplateURL: step-function/cloudformation.yaml
InvokeStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Sub "${AWS::StackName}-invoke"
QueueUrl: !Ref JobQueue
QueueArn: !GetAtt JobQueue.Arn
StepFunctionArn: !GetAtt StepFunctionStack.Outputs.StepFunctionArn
TemplateURL: invoke/cloudformation.yaml
VerifyStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Sub "${AWS::StackName}-verify"
TemplateURL: verify/cloudformation.yaml
MetadataConstructionStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Sub "${AWS::StackName}-metadata-construction"
PrivateBucket: !Ref PrivateBucket
PublicBucket: !Ref PublicBucket
AuxBucket: !Ref AuxBucket
DistributionBaseUrl: !Ref DistributionBaseUrl
BrowseBaseUrl: !Ref BrowseBaseUrl
TemplateURL: metadata-construction/cloudformation.yaml
CmrTokenStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Sub "${AWS::StackName}-cmr-token"
TokenBucket: !Ref AuxBucket
TokenKey: !Ref CachedCmrTokenKey
CertificateSecretArn: !Ref LaunchpadCertificateSecretArn
TemplateURL: cmr-token/cloudformation.yaml
MetadataToCmrStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Sub "${AWS::StackName}-metadata-to-cmr"
ActivityArn: !GetAtt StepFunctionStack.Outputs.CmrActivityArn
AuxBucket: !Ref AuxBucket
CachedCmrTokenKey: !Ref CachedCmrTokenKey
CmrTokenLambda: !GetAtt CmrTokenStack.Outputs.LambdaName
CmrGranuleUrl: !Sub "${CmrBaseUrl}/ingest/providers/${CmrProvider}/granules/"
TemplateURL: metadata-to-cmr/cloudformation.yaml
NotifyStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Sub "${AWS::StackName}-notify"
DefaultResponseTopicArn: !Ref DefaultResponseTopicArn
DefaultResponseTopicRegion: !Ref DefaultResponseTopicRegion
TemplateURL: notify/cloudformation.yaml
IngestStack:
Type: AWS::CloudFormation::Stack
Properties:
Parameters:
Name: !Sub "${AWS::StackName}-ingest"
PublicBucket: !Ref PublicBucket
PrivateBucket: !Ref PrivateBucket
AuxBucket: !Ref AuxBucket
TemplateURL: ingest/cloudformation.yaml
AuxBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "${AWS::StackName}-aux"
ErrorTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Sub "${AWS::StackName}-errors"
ErrorAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmName: !Sub "${AWS::StackName}-errors"
AlarmDescription: Ingest failure alarm
AlarmActions:
- !Ref ErrorTopic
Dimensions:
- Name: StateMachineArn
Value: !GetAtt StepFunctionStack.Outputs.StepFunctionArn
MetricName: ExecutionsFailed
Namespace: AWS/States
ComparisonOperator: GreaterThanOrEqualToThreshold
EvaluationPeriods: 1
Period: 300
Statistic: Sum
Threshold: 1
Unit: Count
TreatMissingData: notBreaching
JobQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: !Sub "${AWS::StackName}-jobs"
MessageRetentionPeriod: 1209600
VisibilityTimeout: 10
JobTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Sub "${AWS::StackName}-jobs"
JobTopicSubscription:
Type: AWS::SNS::Subscription
Properties:
TopicArn: !Ref JobTopic
Protocol: sqs
Endpoint: !GetAtt JobQueue.Arn
JobQueuePolicy:
Type: AWS::SQS::QueuePolicy
Properties:
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service: sns.amazonaws.com
Resource: !GetAtt JobQueue.Arn
Action: sqs:SendMessage
Condition:
ArnEquals:
"aws:SourceArn": !Ref JobTopic
Queues:
- !Ref JobQueue
JobTopicPolicy:
Type: AWS::SNS::TopicPolicy
Properties:
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
AWS: !Ref SdsAccountNumber
Action: sns:Publish
Resource: !Ref JobTopic
Topics:
- !Ref JobTopic