This solution contains a Web UI and associated tools to be used to help adoption and understanding of the AWS implementation of the BBC TAMS API. AWS have created an open source sample implementation of that API here. This solution is designed to be used with that implementation.
NOTE: This solution is not designed to be used in a Production environment. It is designed for dev use cases where a tool is required to help visualise the contents of a TAMS store.
This solution requires a running deployment of the TAMS API.
To build and run the Web UI frontend you will also need:
- npm
- node
The Serverless Application Model Command Line Interface (SAM CLI) is an extension of the AWS CLI that adds functionality for building and testing Lambda applications. It uses Docker to run your functions in an Amazon Linux environment that matches Lambda. It can also emulate your application's build environment and API.
To use the SAM CLI, you need the following tools.
- SAM CLI - Install the SAM CLI
- Docker - Install Docker community edition
To build and deploy the infrastructure for the first time, run the following in your shell:
cd backend
sam build --use-container
sam deploy --guided --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPANDThe first command will build the source of your application. The second command will package and deploy your application to AWS, with a series of prompts:
Note on Authentication: By default, this solution uses Cognito from the TAMS API stack for authentication. The OIDC parameters configure user authentication for the Web UI, while the OAuth parameters configure service-to-service authentication with the TAMS API. Leave all authentication parameters blank to use the default Cognito setup.
- Stack Name: The name of the stack to deploy to CloudFormation. This should be unique to your account and region, and a good starting point would be something matching your project name.
- AWS Region: The AWS region you want to deploy your app to.
- ApiStackName: Supply the name of the CloudFormation stack used to deploy the TAMS API.
- OidcUrl: Optional. The OIDC Authority URL for Web UI user authentication. Leave blank to use Cognito from the TAMS API stack.
- OidcClientId: Optional. The OIDC provider client ID for Web UI user authentication. Leave blank to use Cognito from the TAMS API stack.
- OAuthClientId: Optional. The OAuth provider client ID for service-to-service API authentication. Leave blank to use Cognito from the TAMS API stack.
- OAuthClientSecret: Optional. The OAuth provider client secret for service-to-service API authentication. Leave blank to use Cognito from the TAMS API stack.
- OAuthAuthorizationEndpoint: Optional. The OAuth provider token URL for service-to-service API authentication. Leave blank to use Cognito from the TAMS API stack.
- DeployHlsApi: Defines whether to deploy the HLS component. Leave the default value of
No. - DeployIngestHls: Defines whether to deploy the HLS ingest component. Leave the default value of
No. - DeployIngestFfmpeg: Defines whether to deploy the FFMPEG based transcode component. Leave the default value of
No. - DeployReplication: Defines whether to deploy the replication component. Leave the default value of
No. - DeployLoopRecorder: Defines whether to deploy the loop recorder component. Leave the default value of
No. - Confirm changes before deploy: If set to yes, any change sets will be shown to you before execution for manual review. If set to no, the AWS SAM CLI will automatically deploy application changes.
- Allow SAM CLI IAM role creation: Many AWS SAM templates, including this example, create AWS IAM roles required for the AWS Lambda function(s) included to access AWS services. By default, these are scoped down to minimum required permissions. To deploy an AWS CloudFormation stack which creates or modifies IAM roles, the
CAPABILITY_IAMvalue forcapabilitiesmust be provided. If permission isn't provided through this prompt, to deploy this example you must explicitly pass--capabilities CAPABILITY_IAMto thesam deploycommand. - Save arguments to samconfig.toml: If set to yes, your choices will be saved to a configuration file inside the project, so that in the future you can just re-run
sam deploywithout parameters to deploy changes to your application.
The deployment will only take a short time as with all the components set to No there is no Infrastructure to deploy.
cd ../frontend
npm ci
npm run envLocalThe npm run envLocal command will create an automatically populated .env.local file for you. The values for these variables are retrieved from outputs of two different CloudFormation stacks:
- TAMS API stack - The CloudFormation stack from the separate TAMS API project that you deployed as a prerequisite
- TAMS Tools stack - The CloudFormation stack created when you deployed this tools project
Any optional components not deployed will result in commented out lines and lay also have placeholders for the CloudFormation output names.
The placeholder names in the .env.template file show the corresponding CloudFormation output names between < and > brackets as placeholders (for example, <UserPoolId> corresponds to the UserPoolId output from the TAMS API stack).
The following variables must be configured for basic functionality. Values come from outputs of two different CloudFormation stacks:
- VITE_APP_TAMS_API_ENDPOINT: From TAMS API stack output
ApiEndpoint - VITE_APP_OIDC_AUTHORITY: From TAMS Tools stack output
OidcAuthority - VITE_APP_OIDC_CLIENT_ID: From TAMS Tools stack output
OidcClientId - VITE_APP_OIDC_REDIRECT_URI: The redirect URI for your application (for example,
http://localhost:5173for local development) - VITE_APP_AWS_IDENTITY_POOL_ID: From TAMS Tools stack output
IdentityPoolId - VITE_APP_OMAKASE_EXPORT_EVENT_BUS: From TAMS Tools stack output
OmakaseExportEventBus - VITE_APP_OMAKASE_EXPORT_EVENT_PARAMETER: From TAMS Tools stack output
OmakaseExportEventParameter - VITE_APP_TAMS_AUTH_CONNECTION_ARN: From TAMS Tools stack output
TamsAuthConnectionArn - VITE_APP_AWS_MEDIACONVERT_ROLE_ARN: From TAMS Tools stack output
MediaConvertRoleArn - VITE_APP_AWS_MEDIACONVERT_BUCKET: From TAMS Tools stack output
MediaConvertBucket
Once you have the .env.local file populated. You now have 2 choices:
To do this run the following command:
npm run devTo do this run the following command:
npm run buildThen take the contents of the dist subfolder and place this on the web server of your choosing.
In the initial state the Web App will have a simple interface. This allows you to browse and view the basic data held in your TAMS store. It also includes MediaConvert job management and enhanced export capabilities.
Four optional components can be deployed to the infrastructure to add additional functionality. The deployment of these components is expected to be done from the AWS CloudFormation Console. Changes should be made by updating the stack parameters for the CloudFormation Stack created for the infrastructure.
NOTE: The Web UI is authenticated using the same OIDC provider as the TAMS API. When using Cognito, you will need to create a user in the Cognito User Pool to login.
The solution now includes several core features available without deploying optional components:
- MediaConvert Jobs View: Browse and monitor AWS Elemental MediaConvert jobs that use TAMS as input
- Job Details: View detailed information about MediaConvert job status, progress, and configuration
- Export Integration: Create MediaConvert jobs directly from TAMS content through the export modal
The export modal now supports dynamic, configurable export operations. Export operations are defined in a JSON configuration stored in AWS Systems Manager Parameter Store. See the Export Modal Configuration section for details on how to configure custom export operations.
The solution includes edit-by-reference functionality that allows for non-destructive editing workflows with TAMS content.
This solution includes 5 optional components. They can be deployed by performing an update on the CloudFormation Stack and changing the relevant Yes/No option.
This will deploy a HLS API endpoint to the solution and enable a basic Video player in the WebUI that uses this HLS API to play TAMS content.
Required Environment Variables:
VITE_APP_AWS_HLS_OBJECT_LAMBDA_ACCESS_POINT_ARN= TAMS Tools stack outputHlsObjectLambdaAccessPointArn
This will deploy an option in the WebUI to ingest content into TAMS. It supports ingestion from Elemental Media Live channels (filtered to show only channels with HLS as the first output) and Elemental Media Convert jobs (filtered to show only jobs with HLS as the first output that do not use TAMS as input). It also provides an option to ingest from an external HLS manifest URL.
Required Environment Variables:
VITE_APP_AWS_INGEST_CREATE_NEW_FLOW_ARN= TAMS Tools stack outputIngestCreateNewFlowArnVITE_APP_AWS_HLS_INGEST_ENDPOINT= TAMS Tools stack outputHlsIngestEndpointVITE_APP_AWS_HLS_INGEST_ARN= TAMS Tools stack outputHlsIngestArn
This will deploy an option in the WebUI to enable FFmpeg functionality, it supports both Export and Conversion. Conversions can be done as a Rule (event driven) or as a Job (batch mode).
Required Environment Variables:
VITE_APP_AWS_INGEST_CREATE_NEW_FLOW_ARN= TAMS Tools stack outputIngestCreateNewFlowArnVITE_APP_AWS_FFMPEG_ENDPOINT= TAMS Tools stack outputFfmpegEndpointVITE_APP_AWS_FFMPEG_COMMANDS_PARAMETER= TAMS Tools stack outputFfmpegCommandsParameterVITE_APP_AWS_FFMPEG_BATCH_ARN= TAMS Tools stack outputFfmpegBatchArnVITE_APP_AWS_FFMPEG_EXPORT_ARN= TAMS Tools stack outputFfmpegExportArn
This will deploy replication functionality to the solution, enabling content replication workflows between TAMS stores or external systems.
Required Environment Variables:
VITE_APP_AWS_REPLICATION_CONNECTIONS_PARAMETER= TAMS Tools stack outputReplicationConnectionsParameterVITE_APP_AWS_REPLICATION_BATCH_ARN= TAMS Tools stack outputReplicationBatchArnVITE_APP_AWS_REPLICATION_CREATE_RULE_ARN= TAMS Tools stack outputReplicationCreateRuleArnVITE_APP_AWS_REPLICATION_DELETE_RULE_ARN= TAMS Tools stack outputReplicationDeleteRuleArn
This will deploy the Loop Recorder functionality to the solution. The Loop Recorder is an automated StateMachine that manages flow duration by automatically deleting older segments when flows exceed a specified duration. When a flow has a loop_recorder_duration tag (in seconds), the system monitors segment additions and removes segments from the beginning of the flow to maintain the specified duration limit.
Note: This component includes an Event Bridge rule that triggers for every flows/segments_added event, so it should only be deployed when loop recording functionality is required.
Required Environment Variable:
VITE_APP_AWS_LOOP_RECORDER_ARN= TAMS Tools stack outputLoopRecorderArn
TAMS Tools uses AWS Systems Manager (SSM) parameters for runtime configuration that can be modified post-deployment without requiring CloudFormation updates. These parameters allow you to customize the behavior and capabilities of different components.
| Parameter | Component | CloudFormation Output | Documentation |
|---|---|---|---|
| Export Events Configuration | Core | OmakaseExportEventParameter |
docs/OMAKASE_EXPORT_SCHEMA.md |
| HLS Codec Mappings | HLS API | HlsCodecsParameter |
docs/HLS_CONFIGURATION.md |
| FFmpeg Commands | FFmpeg Ingest | FfmpegCommandsParameter |
docs/FFMPEG_CONFIGURATION.md |
| Replication Connections | Replication | ReplicationConnectionsParameter |
docs/REPLICATION_CONFIGURATION.md |
Parameters are automatically created during deployment and can be found in AWS Systems Manager Parameter Store. Use the CloudFormation output values to reference the exact parameter names in your environment configuration.
For detailed configuration instructions for each parameter, see the linked documentation files above.
The application supports visual customisation to help differentiate between multiple TAMS Tools UI instances:
- Application Title: Customise the application title by setting the
VITE_APP_TITLEenvironment variable. For example, useVITE_APP_TITLE="My Custom TAMS Tools". If not set, defaults to "TAMS Tools". - Header Logo: Customise the logo displayed in the header by setting the
VITE_APP_TITLE_LOGOenvironment variable with the path to your image file. For example, useVITE_APP_TITLE_LOGO="/my-logo.png". If not set, defaults to "/aws.svg". Place your image files in thefrontend/public/directory to make them accessible.
To delete the solution, use the SAM CLI, you can run the following:
sam deleteSee CONTRIBUTING for more information.
This library is licensed under the MIT-0 License. See the LICENSE file.