@startuml Amazon S3 Upload Workflow 'Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. 'SPDX-License-Identifier: MIT (For details, see https://github.com/awslabs/aws-icons-for-plantuml/blob/master/LICENSE) title Amazon S3 video upload workflow ' Uncomment the line below for "dark mode" styling '!$AWS_DARK = true !define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v23.1/dist !include AWSPuml/AWSCommon.puml !include AWSPuml/AWSExperimental.puml !include AWSPuml/Groups/all.puml !include AWSPuml/Compute/LambdaLambdaFunction.puml !include AWSPuml/General/Documents.puml !include AWSPuml/General/Multimedia.puml !include AWSPuml/General/Tapestorage.puml !include AWSPuml/General/User.puml !include AWSPuml/MediaServices/ElementalMediaConvert.puml !include AWSPuml/ArtificialIntelligence/Transcribe.puml !include AWSPuml/Storage/SimpleStorageService.puml $AWSGroupColoring(S3BucketGroup, $AWSColor(Storage)) !define S3BucketGroup(g_alias, g_label="Amazon S3 bucket") $AWSDefineGroup(g_alias, g_label, SimpleStorageService, S3BucketGroup) ' Groups are rectangles with a custom style using stereotype - need to hide hide stereotype skinparam linetype ortho skinparam rectangle { BorderColor transparent } rectangle "$UserIMG()\nUser" as user AWSCloudGroup(cloud) { RegionGroup(region, "Region (us-east-1)") { S3BucketGroup(s3) { rectangle "$MultimediaIMG()\nvideo\t" as video rectangle "\t $TapestorageIMG()\n\taudio\t" as audio rectangle "\t $DocumentsIMG()\n\t transcript\t" as transcript user -r-> video: <$Callout_1>\l//upload// video -r-> audio audio -r-> transcript } rectangle "$LambdaLambdaFunctionIMG()\nObjectCreated\nevent handler" as e1 rectangle "$ElementalMediaConvertIMG()\nAWS Elemental\nMediaConvert" as mediaconvert rectangle "$TranscribeIMG()\nAmazon Transcribe\n" as transcribe video -d-> e1: <$Callout_2>  e1 -[hidden]r-> mediaconvert mediaconvert -[hidden]r-> transcribe mediaconvert -u-> audio: <$Callout_3>  transcribe -u-> transcript: <$Callout_4>  StepFunctionsWorkflowGroup(sfw) { rectangle "$LambdaLambdaFunctionIMG()\nextract audio" as sfw1 rectangle "$LambdaLambdaFunctionIMG()\ntranscribe audio" as sfw2 e1 -r-> sfw1: //Start//\n//Execution// sfw1 -r-> sfw2 sfw1 -u-> mediaconvert sfw2 -u-> transcribe } } } @enduml