-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcloudformation-template.yml
More file actions
137 lines (134 loc) · 3.75 KB
/
cloudformation-template.yml
File metadata and controls
137 lines (134 loc) · 3.75 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
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Lambda to make a phone call by IoT Button request.
Parameters:
ProjectName:
Type: String
Default: IotButtonPhoneCallProject
Description: IoT1Click project name
PlacementName:
Type: String
Default: IotButtonPhoneCallPlacement
Description: IoT1Click placement name
DeviceDsn:
Type: String
Description: Device DSN
NoEcho: true
FunctionName:
Type: String
Default: IotButtonPhoneCallFunction
Description: Lambda function name
TwilioAccount:
Type: String
Description: Twilio account SID
NoEcho: true
TwilioToken:
Type: String
Description: Twilio auth token
NoEcho: true
TwilioTel:
Type: String
Description: Twilio phone number (E.164 format)
NoEcho: true
TargetTel:
Type: String
Description: target phone number (E.164 format)
NoEcho: true
DynamoDbTableName:
Type: String
Default: IotButtonPhoneCall
Description: DynamoDB table name
Message:
Type: String
Default: Hi. How are you? I'm fine. Thank you!
Description: Call message
Resources:
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
Policies:
- PolicyName: IotButtonPhoneCallPolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- dynamodb:*
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: '*'
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Sid: ''
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
IotButtonPhoneCallFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Ref FunctionName
Handler: iot_button_handler.LambdaFunctions::Handler.process
Runtime: ruby2.5
Timeout: 60
MemorySize: 128
Role: !GetAtt LambdaExecutionRole.Arn
Environment:
Variables:
TWILIO_ACCOUNT: !Ref TwilioAccount
TWILIO_TOKEN: !Ref TwilioToken
TWILIO_TEL: !Ref TwilioTel
TARGET_TEL: !Ref TargetTel
TABLE_NAME: !Ref DynamoDbTableName
MESSAGE: !Ref Message
LambdaInvokePermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt IotButtonPhoneCallFunction.Arn
Action: lambda:InvokeFunction
Principal: iot1click.amazonaws.com
IotButtonPhoneCallProject:
Type: AWS::IoT1Click::Project
Properties:
ProjectName: !Ref ProjectName
PlacementTemplate:
DefaultAttributes:
DeviceNo: 0
DeviceTemplates:
IotButtonPhoneCallTemplate:
DeviceType: button
CallbackOverrides:
onClickCallback: !GetAtt IotButtonPhoneCallFunction.Arn
#IotButtonDevice:
# Type: AWS::IoT1Click::Device
# Properties:
# DeviceId: !Ref DeviceDsn
# Enabled: True
IotButtonPhoneCallPlacement:
Type: AWS::IoT1Click::Placement
Properties:
ProjectName: !Ref IotButtonPhoneCallProject
PlacementName: !Ref PlacementName
Attributes:
DeviceNo: 1
AssociatedDevices:
IotButtonPhoneCallTemplate: !Ref DeviceDsn
IotButtonPhoneCallTable:
Type: AWS::Serverless::SimpleTable
Properties:
PrimaryKey:
Name: device_id
Type: String
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: !Ref DynamoDbTableName
Outputs:
IoTProject:
Value: !Ref IotButtonPhoneCallProject
Function:
Value: !Ref IotButtonPhoneCallFunction
Table:
Value: !Ref IotButtonPhoneCallTable