@startuml C4 title Amazon S3 video upload workflow ' Uncomment the line below for "dark mode" styling '!$AWS_DARK = true !include !define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.1/dist !include AWSPuml/AWSCommon.puml !include AWSPuml/AWSC4Integration.puml ' hide the tags render via stereotype hide stereotype left to right direction UpdateBoundaryStyle($bgColor=$AWS_BG_COLOR, $fontColor=$AWS_FG_COLOR, $borderColor=$AWS_COLOR_GRAY) UpdateElementStyle("container", $AWS_BG_COLOR, $AWS_FG_COLOR, $AWS_FG_COLOR) UpdateElementStyle("person", $AWS_BG_COLOR, $AWS_FG_COLOR, $AWS_FG_COLOR) ' Experimental tag based Element formatting !procedure $AWSC4AddElementTag($category, $icon) !$tagborder = $AWSColor($category) !if %variable_exists("$AWS_DARK") && ($AWS_DARK == true) && ($category == "General") !$tagimgext = '_Dark.png' !$tagborder = $AWS_FG_COLOR !else !$tagimgext = '.png' !endif !$tagimg = 'img:' + AWSPuml + '/' + $category + '/' + $icon + $tagimgext AddElementTag("$icon", $fontColor=$AWS_FG_COLOR, $borderColor=$tagborder, $bgColor=$AWS_BG_COLOR, $sprite=$tagimg{scale=0.5}, $legendSprite=$tagimg{scale=0.25}) !endprocedure $AWSC4AddElementTag("General", "User") $AWSC4AddElementTag("Storage", "SimpleStorageServiceBucket") $AWSC4AddElementTag("Compute", "LambdaLambdaFunction") $AWSC4AddElementTag("ApplicationIntegration", "StepFunctions") $AWSC4AddElementTag("MediaServices", "ElementalMediaConvert") $AWSC4AddElementTag("MachineLearning", "Transcribe") Person(user, "User", $tags="User") System_Boundary(softwareSystem, "Video Transcription Service") { Container(s3bucket, "Amazon S3 bucket", $tags="SimpleStorageServiceBucket") Container(objectcreated, "ObjectCreated event handler", $tags="LambdaLambdaFunction") Container(stepfunction, "transcribe workflow", $tags="StepFunctions") Container(extractaudio, "extract audio", $tags="LambdaLambdaFunction") Container(transcribeaudio, "transcribe audio", $tags="LambdaLambdaFunction") Container(mediaconvert, "AWS Elemental MediaConvert", $tags="ElementalMediaConvert") Container(transcribe, "Amazon Transcribe", $tags="Transcribe") Rel(s3bucket, objectcreated, "ObjectCreated event") Rel(objectcreated, stepfunction, "start") Rel(stepfunction, extractaudio, "step 1") Rel(extractaudio, mediaconvert, "start job") Rel(mediaconvert, s3bucket, "save audio") Rel(stepfunction, transcribeaudio, "step 2") Rel(transcribeaudio, transcribe, "start transcription job") Rel(transcribe, s3bucket, "save transcription") } Rel(user, s3bucket, "Uploads") SHOW_LEGEND(false) C4VersionDetails() @enduml