Last active
April 15, 2020 22:54
-
-
Save ccortezb/ec093d084004488222eafea7f67f5b48 to your computer and use it in GitHub Desktop.
Create AWS Step Functions Demo - Call Center Example - awsugperu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Demo AWS UG PE - Step Functions - Day 1 | |
Paso 1: Step Functions Demo - State Language - awsugperu | |
{ | |
"Comment": "A simple AWS Step Functions state machine that automates a call center support session.", | |
"StartAt": "Open Case", | |
"States": { | |
"Open Case": { | |
"Type": "Task", | |
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", | |
"Next": "Assign Case" | |
}, | |
"Assign Case": { | |
"Type": "Task", | |
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", | |
"Next": "Work on Case" | |
}, | |
"Work on Case": { | |
"Type": "Task", | |
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", | |
"Next": "Is Case Resolved" | |
}, | |
"Is Case Resolved": { | |
"Type" : "Choice", | |
"Choices": [ | |
{ | |
"Variable": "$.Status", | |
"NumericEquals": 1, | |
"Next": "Close Case" | |
}, | |
{ | |
"Variable": "$.Status", | |
"NumericEquals": 0, | |
"Next": "Escalate Case" | |
} | |
] | |
}, | |
"Close Case": { | |
"Type": "Task", | |
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", | |
"End": true | |
}, | |
"Escalate Case": { | |
"Type": "Task", | |
"Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME", | |
"Next": "Fail" | |
}, | |
"Fail": { | |
"Type": "Fail", | |
"Cause": "Engage Tier 2 Support." } | |
} | |
} | |
Paso 2: IAM Role - step_functions_basic_execution | |
Paso 3: Elegir el IAM role en la creacion del Step Function | |
Paso 4: Crear los Lambdas: | |
4.1: OpenCaseFunction: | |
Name – OpenCaseFunction | |
Runtime – Node.js 4.3 | |
Role – Create custom role | |
exports.handler = (event, context, callback) => { | |
// Create a support case using the input as the case ID, then return a confirmation message | |
var myCaseID = event.inputCaseID; | |
var myMessage = "Case " + myCaseID + ": opened..."; | |
var result = {Case: myCaseID, Message: myMessage}; | |
callback(null, result); | |
}; | |
4.2: AssignCase | |
exports.handler = (event, context, callback) => { | |
// Assign the support case and update the status message | |
var myCaseID = event.Case; | |
var myMessage = event.Message + "assigned..."; | |
var result = {Case: myCaseID, Message: myMessage}; | |
callback(null, result); | |
}; | |
4.3: WorkOnCaseFunction | |
exports.handler = (event, context, callback) => { | |
// Generate a random number to determine whether the support case has been resolved, then return that value along with the updated message. | |
var min = 0; | |
var max = 1; | |
var myCaseStatus = Math.floor(Math.random() * (max - min + 1)) + min; | |
var myCaseID = event.Case; | |
var myMessage = event.Message; | |
if (myCaseStatus == 1) { | |
// Support case has been resolved | |
myMessage = myMessage + "resolved..."; | |
} else if (myCaseStatus == 0) { | |
// Support case is still open | |
myMessage = myMessage + "unresolved..."; | |
} | |
var result = {Case: myCaseID, Status : myCaseStatus, Message: myMessage}; | |
callback(null, result); | |
}; | |
4.4: CloseCaseFunction | |
exports.handler = (event, context, callback) => { | |
// Close the support case | |
var myCaseStatus = event.Status; | |
var myCaseID = event.Case; | |
var myMessage = event.Message + "closed."; | |
var result = {Case: myCaseID, Status : myCaseStatus, Message: myMessage}; | |
callback(null, result); | |
}; | |
4.5: EscalateCaseFunction | |
exports.handler = (event, context, callback) => { | |
// Escalate the support case | |
var myCaseID = event.Case; | |
var myCaseStatus = event.Status; | |
var myMessage = event.Message + "escalating."; | |
var result = {Case: myCaseID, Status : myCaseStatus, Message: myMessage}; | |
callback(null, result); | |
}; | |
Paso 5: Actualizar el workflow con los ARN de los Lambdas | |
Paso 6: Ejecutar el workflow | |
Input: | |
{ | |
"inputCaseID": "001" | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment