-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.yaml
162 lines (151 loc) · 4.58 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
TwilioS3UploaderFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs18.x
CodeUri: src/
Environment:
Variables:
BUCKET_NAME: !Ref S3BucketName
Role: !GetAtt TwilioS3UploaderRole.Arn
Events:
ApiEvent:
Type: Api
Properties:
RestApiId: !Ref TwilioVoicemailAPI
Path: /voicemail
Method: post
Tags:
Project: TwilioVoicemailUploader
Environment: Dev
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref S3BucketName
Tags:
- Key: Project
Value: TwilioVoicemailUploader
- Key: Environment
Value: Dev
TwilioS3UploaderRole:
Type: AWS::IAM::Role
Properties:
RoleName: "TwilioS3UploaderRole"
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service: "lambda.amazonaws.com"
Action: "sts:AssumeRole"
TwilioS3UploaderPolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: "TwilioS3UploaderPolicy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "s3:ListBucket"
- "s3:PutObject"
- "s3:PutObjectAcl"
- "s3:GetObject"
Resource:
- !Sub "arn:aws:s3:::${S3BucketName}"
- !Sub "arn:aws:s3:::${S3BucketName}/*"
- Effect: "Allow"
Action:
- "logs:CreateLogGroup"
- "logs:CreateLogStream"
- "logs:PutLogEvents"
Resource:
- !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/TwilioS3UploaderFunction:*"
- !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/TwilioS3UploaderFunction:*:*"
Roles:
- !Ref TwilioS3UploaderRole
DependsOn: TwilioS3UploaderRole
TwilioVoicemailAPI:
Type: AWS::ApiGateway::RestApi
Properties:
Name: TwilioVoicemailAPI
Description: API for uploading Twilio voicemails to S3
EndpointConfiguration:
Types:
- REGIONAL
Tags:
- Key: Project
Value: TwilioVoicemailUploader
- Key: Environment
Value: Dev
VoicemailResource:
Type: AWS::ApiGateway::Resource
Properties:
ParentId: !GetAtt TwilioVoicemailAPI.RootResourceId
PathPart: voicemail
RestApiId: !Ref TwilioVoicemailAPI
ApiMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: NONE
HttpMethod: POST
ResourceId: !Ref VoicemailResource
RestApiId: !Ref TwilioVoicemailAPI
Integration:
IntegrationHttpMethod: POST
Type: AWS_PROXY
Uri: !Sub
- arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${TwilioS3UploaderFunction.Arn}/invocations
- TwilioS3UploaderFunction: !GetAtt TwilioS3UploaderFunction.Arn
DependsOn: TwilioS3UploaderFunction
ApiDeployment:
Type: AWS::ApiGateway::Deployment
Properties:
RestApiId: !Ref TwilioVoicemailAPI
StageName: default
DependsOn:
- ApiMethod
ApiStageDev:
Type: AWS::ApiGateway::Stage
Properties:
StageName: dev
DeploymentId: !Ref ApiDeployment
RestApiId: !Ref TwilioVoicemailAPI
MethodSettings:
- DataTraceEnabled: true
HttpMethod: "*"
LoggingLevel: INFO
ResourcePath: "/*"
MetricsEnabled: true
DependsOn: ApiDeployment
ApiStageProd:
Type: AWS::ApiGateway::Stage
Properties:
StageName: prod
DeploymentId: !Ref ApiDeployment
RestApiId: !Ref TwilioVoicemailAPI
MethodSettings:
- DataTraceEnabled: true
HttpMethod: "*"
LoggingLevel: INFO
ResourcePath: "/*"
MetricsEnabled: true
DependsOn: ApiDeployment
Parameters:
S3BucketName:
Type: String
Description: "The name of the S3 bucket for storing voicemails"
Default: "twilio-voicemail-storage"
Outputs:
FunctionArn:
Description: "ARN of the Lambda function"
Value: !GetAtt TwilioS3UploaderFunction.Arn
S3BucketName:
Description: "Name of the S3 bucket"
Value: !Ref S3BucketName
ApiEndpoint:
Description: "API Gateway endpoint URL for the $default stage"
Value: !Sub "https://${TwilioVoicemailAPI}.execute-api.${AWS::Region}.amazonaws.com/{{default}}/voicemail"