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