-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtemplate.yaml
116 lines (114 loc) · 4.39 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
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
Sample SAM Template demonstrating Step Functions SDK integrations
Resources:
####################################################################################
# PART 1 : RECOGNITZE CELEBRITIES STEP FUNCTIONS
####################################################################################
####################################################################################
# S3 BUCKET TO STORE IMAGES
####################################################################################
CelebBucket:
Type: "AWS::S3::Bucket"
Properties:
# Amazon EventBridge receives notifications for all events in the bucket.
NotificationConfiguration:
EventBridgeConfiguration:
EventBridgeEnabled: true
####################################################################################
# CUSTOM MANAGED POILICY TO ALLOW rekognition:RecognizeCelebrities
####################################################################################
CustomerManagedPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: "rekognition:RecognizeCelebrities"
Resource: "*"
####################################################################################
# RECOGNIZECELEBRITY STATEMACHINE WITH S3 -> EVENTBRDIGE -> SF INVOCATION
####################################################################################
RecognizeCelebrityStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri: statemachine/recognizeCelebrities.asl.json
DefinitionSubstitutions:
DDBTable: !Ref CelebritiesTable
Policies:
- !Ref CustomerManagedPolicy
- DynamoDBCrudPolicy:
TableName: !Ref CelebritiesTable
- S3ReadPolicy:
BucketName: !Ref CelebBucket
- SNSCrudPolicy:
TopicName: "zachjonesnoel.com"
# The Step Functions workflow is triggered each time an object is created in our S3 bucket.
Events:
StateChange:
Type: EventBridgeRule
Properties:
EventBusName: default
Pattern:
source:
- aws.s3
detail-type:
- Object Created
detail:
bucket:
name:
- !Ref CelebBucket
####################################################################################
# DYNAMODB TABLE TO STORE RECOGNIZED CELEBRITIES NAMES
####################################################################################
CelebritiesTable:
Type: AWS::DynamoDB::Table
Properties:
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: pk
AttributeType: S
- AttributeName: sk
AttributeType: S
KeySchema:
- AttributeName: pk
KeyType: HASH
- AttributeName: sk
KeyType: RANGE
GlobalSecondaryIndexes:
- IndexName: sk-index
KeySchema:
- AttributeName: sk
KeyType: HASH
Projection:
ProjectionType: ALL
####################################################################################
# PART 2 : STEP FUNCTIONS TO QUERY CELEBRITIES FROM DYNAMODB
####################################################################################
####################################################################################
# STEP FUNCTION TO QUERY DYNAMODB
####################################################################################
GetItemsStateMachine:
Type: AWS::Serverless::StateMachine
Properties:
DefinitionUri: statemachine/getItems.asl.json
DefinitionSubstitutions:
DDBTable: !Ref CelebritiesTable
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref CelebritiesTable
Outputs:
CelebBucket:
Description: "S3 bucket name"
Value: !Ref CelebBucket
RecognizeCelebrityStateMachine:
Description: "Recognize Celebrity States Machine"
Value: !Ref RecognizeCelebrityStateMachine
CelebritiesTable:
Description: "Celebrities DynamoDB table"
Value: !Ref CelebritiesTable
GetItemsStateMachine:
Description: "Get Celebrities State Machine"
Value: !Ref GetItemsStateMachine