-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtemplate.yaml
More file actions
184 lines (184 loc) · 6.12 KB
/
template.yaml
File metadata and controls
184 lines (184 loc) · 6.12 KB
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
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
OriginalFiles:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${AWS::StackName}-originalf-${AWS::AccountId}
CorsConfiguration:
CorsRules:
- AllowedOrigins: ['*']
AllowedMethods: [PUT, POST, GET, DELETE]
AllowedHeaders: ['*']
TranslatedFiles:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${AWS::StackName}-translate-${AWS::AccountId}
TranslateFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub ${AWS::StackName}-TranslateFunction
Description: !Sub
- Stack ${StackTagName} Environment ${EnvironmentTagName} Function ${ResourceName}
- ResourceName: TranslateFunction
CodeUri: src/TranslateFunction
Handler: index.handler
Runtime: nodejs12.x
MemorySize: 3008
Timeout: 900
Tracing: Active
Policies:
- AWSXrayWriteOnlyAccess
- S3CrudPolicy:
BucketName: !Ref TranslatedFiles
- Version: 2012-10-17
Statement:
- Effect: Allow
Resource: !Sub arn:aws:s3:::${AWS::StackName}-originalf-${AWS::AccountId}/*
Action:
- s3:GetObject
- Version: 2012-10-17
Statement:
- Effect: Allow
Resource: '*'
Action:
- translate:TranslateText
- DynamoDBCrudPolicy:
TableName: !Ref TranslationsTable
Events:
OriginalFiles:
Type: S3
Properties:
Bucket: !Ref OriginalFiles
Events:
- s3:ObjectCreated:*
Environment:
Variables:
BUCKET_NAME: !Ref TranslatedFiles
BUCKET_ARN: !GetAtt TranslatedFiles.Arn
TABLE_NAME: !Ref TranslationsTable
TABLE_ARN: !GetAtt TranslationsTable.Arn
TranslationsTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: Key
AttributeType: S
BillingMode: PAY_PER_REQUEST
KeySchema:
- AttributeName: Key
KeyType: HASH
StreamSpecification:
StreamViewType: NEW_AND_OLD_IMAGES
TableName: !Sub ${AWS::StackName}-TranslationsTable
Frontend:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${AWS::StackName}-frontend-${AWS::AccountId}
WebsiteConfiguration:
IndexDocument: index.html
Api:
Type: AWS::Serverless::Api
Properties:
Name: !Sub
- ${ResourceName} From Stack ${StackTagName} Environment ${EnvironmentTagName}
- ResourceName: Api
StageName: !Ref EnvironmentAPIGatewayStageName
DefinitionBody:
swagger: '2.0'
info: {}
paths:
/translations:
get:
x-amazon-apigateway-integration:
httpMethod: POST
type: aws_proxy
uri: !Sub arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${GetTranslationsFunction.Arn}/invocations
responses: {}
EndpointConfiguration: REGIONAL
TracingEnabled: true
Cors:
AllowHeaders: '''Authorization,Content-Type'''
AllowOrigin: '''*'''
GetTranslationsFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub ${AWS::StackName}-GetTranslationsFunction
Description: !Sub
- Stack ${StackTagName} Environment ${EnvironmentTagName} Function ${ResourceName}
- ResourceName: GetTranslationsFunction
CodeUri: src/GetTranslationsFunction
Handler: index.handler
Runtime: nodejs12.x
MemorySize: 3008
Timeout: 30
Tracing: Active
Policies:
- AWSXrayWriteOnlyAccess
- DynamoDBCrudPolicy:
TableName: !Ref TranslationsTable
Events:
ApiGETtranslations:
Type: Api
Properties:
Path: /translations
Method: GET
RestApiId: !Ref Api
Environment:
Variables:
TABLE_NAME: !Ref TranslationsTable
TABLE_ARN: !GetAtt TranslationsTable.Arn
PopulateFrontend:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub ${AWS::StackName}-PopulateFrontend
Description: !Sub
- Stack ${StackTagName} Environment ${EnvironmentTagName} Function ${ResourceName}
- ResourceName: PopulateFrontend
CodeUri: src/PopulateFrontend
Handler: index.handler
Runtime: nodejs12.x
MemorySize: 3008
Timeout: 900
Tracing: Active
Policies:
- AWSXrayWriteOnlyAccess
- S3CrudPolicy:
BucketName: !Ref Frontend
- S3CrudPolicy:
BucketName: !Ref OriginalFiles
Environment:
Variables:
API_URL: !Sub https://${Api}.execute-api.${AWS::Region}.amazonaws.com/${Api.Stage}
FRONTEND_BUCKET_NAME: !Ref Frontend
ACCESS_KEY_ID: !Ref EnvConfigaccessKeyIdAsString
SECRET: !Ref EnvConfigsecretAsString
ORIGINAL_FILES_BUCKET_NAME: !Ref OriginalFiles
PopulateFrontendDeployTrigger:
Type: Custom::FunctionDeployTrigger
Properties:
ServiceToken: !GetAtt PopulateFrontend.Arn
DeploymentTimestamp: !Ref DeploymentTimestamp
Parameters:
StackTagName:
Type: String
Description: Stack Name (injected by Stackery at deployment time)
EnvironmentTagName:
Type: String
Description: Environment Name (injected by Stackery at deployment time)
EnvironmentAPIGatewayStageName:
Type: String
Description: Environment name used for API Gateway Stage names (injected by Stackery at deployment time)
EnvConfigaccessKeyIdAsString:
Type: AWS::SSM::Parameter::Value<String>
Default: /<EnvironmentName>/accessKeyId
EnvConfigsecretAsString:
Type: AWS::SSM::Parameter::Value<String>
Default: /<EnvironmentName>/secret
DeploymentTimestamp:
Type: Number
Description: Deployment preparation timestamp in milliseconds Since Epoch (injected by Stackery at deployment time)
Metadata:
EnvConfigParameters:
EnvConfigaccessKeyIdAsString: accessKeyId
EnvConfigsecretAsString: secret