· 4 years ago · May 30, 2021, 05:44 PM
1AWSTemplateFormatVersion: '2010-09-09'
2Transform: AWS::Serverless-2016-10-31
3Description: >
4 todo-list-aws
5
6 Sample SAM Template for todo-list-aws
7
8# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
9Globals:
10 Function:
11 Timeout: 3
12 Runtime: python3.7
13 Timeout: 180
14 Variables:
15 DYNAMODB_TABLE: !Sub "todosTable-${Stage}"
16 ENVIRONMENT: !Ref Stage
17
18Parameters:
19 Stage:
20 Type: String
21 Default: default
22 AllowedValues:
23 - default
24 - staging
25 - production
26 Description: Enter staging or production. Default is default
27
28Resources:
29 CreateFunction:
30 Type: 'AWS::Serverless::Function' # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
31 Properties:
32 CodeUri: src/
33 Handler: create.create
34 Policies: AWSLambdaDynamoDBExecutionRole
35 Events:
36 Create:
37 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
38 Properties:
39 Path: /todos
40 Method: post
41 Policies:
42 - Version: '2012-10-17'
43 Statement:
44 - Effect: Allow
45 Action:
46 - 'dynamodb:Query'
47 - 'dynamodb:Scan'
48 - 'dynamodb:GetItem'
49 - 'dynamodb:PutItem'
50 - 'dynamodb:UpdateItem'
51 - 'dynamodb:DeleteItem'
52 Resource:
53 'Fn::Join':
54 - ''
55 - - 'arn:aws:dynamodb:'
56 - Ref: 'AWS::Region'
57 - ':'
58 - Ref: 'AWS::AccountId'
59 - ':table/todosTable-'
60 - Ref: Stage
61
62 ListFunction:
63 Type: 'AWS::Serverless::Function' # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
64 Properties:
65 CodeUri: src/
66 Handler: list.list
67 Policies: AWSLambdaDynamoDBExecutionRole
68 Events:
69 List:
70 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
71 Properties:
72 Path: /todos
73 Method: post
74 Policies:
75 - Version: '2012-10-17'
76 Statement:
77 - Effect: Allow
78 Action:
79 - 'dynamodb:Query'
80 - 'dynamodb:Scan'
81 - 'dynamodb:GetItem'
82 - 'dynamodb:PutItem'
83 - 'dynamodb:UpdateItem'
84 - 'dynamodb:DeleteItem'
85 Resource:
86 'Fn::Join':
87 - ''
88 - - 'arn:aws:dynamodb:'
89 - Ref: 'AWS::Region'
90 - ':'
91 - Ref: 'AWS::AccountId'
92 - ':table/todosTable-'
93 - Ref: Stage
94
95 GetFunction:
96 Type: 'AWS::Serverless::Function' # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
97 Properties:
98 CodeUri: src/
99 Handler: get.get
100 Policies: AWSLambdaDynamoDBExecutionRole
101 Events:
102 Get:
103 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
104 Properties:
105 Path: /todos/{id}
106 Method: get
107 Policies:
108 - Version: '2012-10-17'
109 Statement:
110 - Effect: Allow
111 Action:
112 - 'dynamodb:Query'
113 - 'dynamodb:Scan'
114 - 'dynamodb:GetItem'
115 - 'dynamodb:PutItem'
116 - 'dynamodb:UpdateItem'
117 - 'dynamodb:DeleteItem'
118 Resource:
119 'Fn::Join':
120 - ''
121 - - 'arn:aws:dynamodb:'
122 - Ref: 'AWS::Region'
123 - ':'
124 - Ref: 'AWS::AccountId'
125 - ':table/todosTable-'
126 - Ref: Stage
127
128 UpdateFunction:
129 Type: 'AWS::Serverless::Function' # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
130 Properties:
131 CodeUri: src/
132 Handler: update.update
133 Policies: AWSLambdaDynamoDBExecutionRole
134 Events:
135 Update:
136 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
137 Properties:
138 Path: /todos/{id}
139 Method: put
140 Policies:
141 - Version: '2012-10-17'
142 Statement:
143 - Effect: Allow
144 Action:
145 - 'dynamodb:Query'
146 - 'dynamodb:Scan'
147 - 'dynamodb:GetItem'
148 - 'dynamodb:PutItem'
149 - 'dynamodb:UpdateItem'
150 - 'dynamodb:DeleteItem'
151 Resource:
152 'Fn::Join':
153 - ''
154 - - 'arn:aws:dynamodb:'
155 - Ref: 'AWS::Region'
156 - ':'
157 - Ref: 'AWS::AccountId'
158 - ':table/todosTable-'
159 - Ref: Stage
160
161 DeleteFunction:
162 Type: 'AWS::Serverless::Function' # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
163 Properties:
164 CodeUri: src/
165 Handler: delete.delete
166 Policies: AWSLambdaDynamoDBExecutionRole
167 Events:
168 Delete:
169 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
170 Properties:
171 Path: /todos/{id}
172 Method: delete
173 Policies:
174 - Version: '2012-10-17'
175 Statement:
176 - Effect: Allow
177 Action:
178 - 'dynamodb:Query'
179 - 'dynamodb:Scan'
180 - 'dynamodb:GetItem'
181 - 'dynamodb:PutItem'
182 - 'dynamodb:UpdateItem'
183 - 'dynamodb:DeleteItem'
184 Resource:
185 'Fn::Join':
186 - ''
187 - - 'arn:aws:dynamodb:'
188 - Ref: 'AWS::Region'
189 - ':'
190 - Ref: 'AWS::AccountId'
191 - ':table/todosTable-'
192 - Ref: Stage
193
194 TranslateFunction:
195 Type: 'AWS::Serverless::Function' # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
196 Properties:
197 CodeUri: src/
198 Handler: getTranslate.get
199 Policies: AWSLambdaDynamoDBExecutionRole
200 Events:
201 Translate:
202 Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
203 Properties:
204 Path: /todos/{id}/{lang}
205 Method: get
206 Policies:
207 - Version: '2012-10-17'
208 Statement:
209 - Effect: Allow
210 Action:
211 - 'dynamodb:Query'
212 - 'dynamodb:Scan'
213 - 'dynamodb:GetItem'
214 - 'dynamodb:PutItem'
215 - 'dynamodb:UpdateItem'
216 - 'dynamodb:DeleteItem'
217 Resource:
218 'Fn::Join':
219 - ''
220 - - 'arn:aws:dynamodb:'
221 - Ref: 'AWS::Region'
222 - ':'
223 - Ref: 'AWS::AccountId'
224 - ':table/todosTable-'
225 - Ref: Stage
226
227 todosTable:
228 Type: 'AWS::DynamoDB::Table'
229 Properties:
230 TableName: !Sub "todosTable-${Stage}"
231 AttributeDefinitions:
232 - AttributeName: id
233 AttributeType: S
234 KeySchema:
235 - AttributeName: id
236 KeyType: HASH
237 ProvisionedThroughput:
238 ReadCapacityUnits: 1
239 WriteCapacityUnits: 1
240
241
242Outputs:
243 # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
244 # Find out more about other implicit resources you can reference within SAM
245 # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
246 Create:
247 Description: "API Gateway endpoint URL for Prod stage for Create function"
248 Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/todos/"
249 CreateFunction:
250 Description: "Create Lambda Function ARN"
251 Value: !GetAtt CreateFunction.Arn
252 CreateFunctionIamRole:
253 Description: "Implicit IAM Role created for Createfunction"
254 Value: !GetAtt CreateFunctionRole.Arn
255 List:
256 Description: "API Gateway endpoint URL for Prod stage for List function"
257 Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/todos/"
258 ListFunction:
259 Description: "List Lambda Function ARN"
260 Value: !GetAtt ListFunction.Arn
261 ListFunctionIamRole:
262 Description: "Implicit IAM Role created for Listfunction"
263 Value: !GetAtt ListFunctionRole.Arn
264 Get:
265 Description: "API Gateway endpoint URL for Prod stage for Get function"
266 Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/todos/{id}"
267 GetFunction:
268 Description: "Get Lambda Function ARN"
269 Value: !GetAtt GetFunction.Arn
270 GetFunctionIamRole:
271 Description: "Implicit IAM Role created for Getfunction"
272 Value: !GetAtt GetFunctionRole.Arn
273 Update:
274 Description: "API Gateway endpoint URL for Prod stage for Update function"
275 Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/todos/{id}"
276 UpdateFunction:
277 Description: "Update Lambda Function ARN"
278 Value: !GetAtt UpdateFunction.Arn
279 UpdateFunctionIamRole:
280 Description: "Implicit IAM Role created for Updatefunction"
281 Value: !GetAtt UpdateFunctionRole.Arn
282 Delete:
283 Description: "API Gateway endpoint URL for Prod stage for Delete function"
284 Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/todos/{id}"
285 DeleteFunction:
286 Description: "Delete Lambda Function ARN"
287 Value: !GetAtt DeleteFunction.Arn
288 DeleteFunctionIamRole:
289 Description: "Implicit IAM Role created for Deletefunction"
290 Value: !GetAtt DeleteFunctionRole.Arn
291 Translate:
292 Description: "API Gateway endpoint URL for Prod stage for Translate function"
293 Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/todos/{id}/{lang}"
294 TranslateFunction:
295 Description: "Translate Lambda Function ARN"
296 Value: !GetAtt TranslateFunction.Arn
297 TranslateFunctionIamRole:
298 Description: "Implicit IAM Role created for Translatefunction"
299 Value: !GetAtt TranslateFunctionRole.Arn
300