-
Notifications
You must be signed in to change notification settings - Fork 102
/
Copy pathtemplate.yaml
145 lines (133 loc) · 4.28 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
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
DeployTestResources:
Description: The parameter instructs the template whether or not to deploy test resources to your environment.
Default: "True"
Type: String
AllowedValues:
- "True"
- "False"
ConstraintDescription: Allowed values are True and False
Conditions:
CreateTestResources: !Equals [!Ref DeployTestResources, "True"]
Resources:
SourceBucket:
Type: AWS::S3::Bucket
UpdateReplacePolicy: Delete
Properties:
BucketName:
!Sub "async-lambda-dynamodb-source-${AWS::AccountId}"
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
DestinationBucket:
Type: AWS::S3::Bucket
UpdateReplacePolicy: Delete
Properties:
BucketName:
!Sub "async-lambda-dynamodb-destination-${AWS::AccountId}"
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
RecordTransformationTable:
Type: AWS::DynamoDB::Table
Condition: CreateTestResources
Properties:
TableName:
!Sub "async-lambda-dynamodb-record-transformation-${AWS::AccountId}"
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
TimeToLiveSpecification:
AttributeName: time_to_live
Enabled: true
ProvisionedThroughput:
ReadCapacityUnits: 2
WriteCapacityUnits: 2
ToUpperCaseHandlerFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: java17
Handler: com.amazon.aws.sample.ToUpperCaseHandler::handleRequest
Timeout: 60
MemorySize: 1024
Environment:
Variables:
DESTINATION_BUCKET_NAME: !Sub "async-lambda-dynamodb-destination-${AWS::AccountId}"
Policies:
- S3ReadPolicy:
BucketName:
!Sub "async-lambda-dynamodb-source-${AWS::AccountId}"
- S3WritePolicy:
BucketName:
!Sub "async-lambda-dynamodb-destination-${AWS::AccountId}"
Events:
FileUpload:
Type: S3
Properties:
Bucket: !Ref SourceBucket
Events: s3:ObjectCreated:*
Filter:
S3Key:
Rules:
- Name: suffix
Value: '.txt'
TransformationHandlerFunction:
Type: AWS::Serverless::Function
Condition: CreateTestResources
Properties:
Runtime: java17
Handler: com.amazon.aws.sample.TransformationHandler::handleRequest
Timeout: 60
MemorySize: 1024
Environment:
Variables:
RECORD_TRANSFORMATION_TABLE_NAME: !Sub "async-lambda-dynamodb-record-transformation-${AWS::AccountId}"
Policies:
- S3ReadPolicy:
BucketName:
!Sub "async-lambda-dynamodb-destination-${AWS::AccountId}"
- DynamoDBWritePolicy:
TableName: !Ref RecordTransformationTable
Events:
FileUpload:
Type: S3
Properties:
Bucket: !Ref DestinationBucket
Events: s3:ObjectCreated:*
Filter:
S3Key:
Rules:
- Name: suffix
Value: '.txt'
Outputs:
SourceBucketName:
Description: "Source bucket for asynchronous testing sample"
Value: !Ref SourceBucket
DestinationBucketName:
Description: "Destination bucket for asynchronous testing sample"
Value: !Ref DestinationBucket
TransformationHandlerFunctionName:
Condition: CreateTestResources
Description: "Lambda Function to listen for test results"
Value: !Ref TransformationHandlerFunction
RecordTransformationTable:
Condition: CreateTestResources
Description: "DynamoDB table to persist test results"
Value: !Ref RecordTransformationTable