AWS Serverless Deployment
YAML File
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: hello: Type: 'AWS::Serverless::Function' Properties: Handler: handler.hello Runtime: nodejs14.x CodeUri: . Description: Test Description MemorySize: 512 Timeout: 10 Events: API1: Type: Api Properties: Path: /hello Method: ANY
handler.js
'use strict'; const databaseManager = require('./databaseManager'); const uuidv1 = require('uuid/v1'); exports.hello = async (event) => { console.log(event); switch (event.httpMethod) { case 'DELETE': return deleteItem(event); case 'GET': return getItem(event); case 'POST': return saveItem(event); case 'PUT': return updateItem(event); default: return sendResponse(404, `Unsupported method "${event.httpMethod}"`); } }; function saveItem(event) { const item = JSON.parse(event.body); item.itemId = uuidv1(); return databaseManager.saveItem(item).then(response => { console.log(response); return sendResponse(200, item.itemId); }); } function getItem(event) { const itemId = event.pathParameters.itemId; return databaseManager.getItem(itemId).then(response => { console.log(response); return sendResponse(200, JSON.stringify(response)); }); } function deleteItem(event) { const itemId = event.pathParameters.itemId; return databaseManager.deleteItem(itemId).then(response => { return sendResponse(200, 'DELETE ITEM'); }); } function updateItem(event) { const itemId = event.pathParameters.itemId; const body = JSON.parse(event.body); const paramName = body.paramName; const paramValue = body.paramValue; return databaseManager.updateItem(itemId, paramName, paramValue).then(response => { console.log(response); return sendResponse(200, JSON.stringify(response)); }); } function sendResponse(statusCode, message) { const response = { statusCode: statusCode, body: JSON.stringify(message) }; return response }
Step 1:
Step 2:
Step 3:
Create S3 Bucket
aws s3 mb s3://hexatral-sam
Step 4:
Create packaged-template.yaml File
aws cloudformation package --template-file e:\Hexatral\SAM\template.yml --s3-bucket hexatral-sam --output-template-file e:\Hexatral\SAM\packaged-template.yaml
Step 5:
Step 6:
Deploy CloudFormation Stack
aws cloudformation deploy --template-file e:\Hexatral\SAM\packaged-template.yaml --stack-name hexatral-sam-cloudformation --capabilities CAPABILITY_IAM
Step 7:
Step 8:
Step 9:
Step 10:
Delete CloudFormation Stack
aws cloudformation delete-stack --stack-name hexatral-sam-cloudformation