AWSTemplateFormatVersion: "2010-09-09" Description: "(SO0164) Content Localization on AWS Version %%VERSION%% - Deploys the Content Localization on AWS Application over an existing Media Insights on AWS stack." Parameters: MieStackName: Description: Name of the Media Insights on AWS framework stack Type: String AdminEmail: Description: Email address of the Content Analysis Administrator Type: String OpensearchNodeSize: Description: "The node type to be provisioned for the Opensearch cluster" Type: String Default: "t3.small.search" AllowedValues: - "t3.small.search" - "m4.large.search" - "m4.xlarge.search" - "c4.large.search" - "c4.xlarge.search" - "r4.large.search" - "r4.xlarge.search" Mappings: Application: SourceCode: GlobalS3Bucket: "%%GLOBAL_BUCKET_NAME%%" TemplateKeyPrefix: "content-localization-on-aws/%%VERSION%%" RegionalS3Bucket: "%%REGIONAL_BUCKET_NAME%%" CodeKeyPrefix: "content-localization-on-aws/%%VERSION%%" Version: "%%VERSION%%" Solution: Data: SolutionId: "SO0164" SolutionName: "Content Localization on AWS" ApplicationType: "AWS-Solutions" AppRegistryApplicationName: "ContentLocalizationOnAws" Resources: # Deploy Opensearch OpensearchStack: Type: "AWS::CloudFormation::Stack" Properties: TemplateURL: !Join - "" - - "https://" - !FindInMap - Application - SourceCode - GlobalS3Bucket - ".s3.amazonaws.com/" - !FindInMap - Application - SourceCode - TemplateKeyPrefix - "/content-localization-on-aws-opensearch.template" Parameters: AnalyticsStreamArn: Fn::ImportValue: !Sub "${MieStackName}:AnalyticsStreamArn" MieDataplaneBucket: Fn::ImportValue: !Sub "${MieStackName}:DataplaneBucket" NodeType: !Ref OpensearchNodeSize MieKMSArn: Fn::ImportValue: !Sub "${MieStackName}:MieKMSArn" # Deploy Auth stack AuthStack: Type: "AWS::CloudFormation::Stack" Properties: TemplateURL: !Join - "" - - "https://" - !FindInMap - Application - SourceCode - GlobalS3Bucket - ".s3.amazonaws.com/" - !FindInMap - Application - SourceCode - TemplateKeyPrefix - "/content-localization-on-aws-auth.template" Parameters: AdminEmail: !Ref AdminEmail WorkflowApiId: Fn::ImportValue: !Sub "${MieStackName}:WorkflowApiId" DataplaneApiId: Fn::ImportValue: !Sub "${MieStackName}:DataplaneApiId" SearchDomainArn: !GetAtt OpensearchStack.Outputs.DomainArn DataplaneBucket: Fn::ImportValue: !Sub "${MieStackName}:DataplaneBucket" ParentStackName: !Ref AWS::StackId MieKMSArn: Fn::ImportValue: !Sub "${MieStackName}:MieKMSArn" # Deploy Video Workflow VideoWorkflow: Type: "AWS::CloudFormation::Stack" Properties: TemplateURL: !Join - "" - - "https://" - !FindInMap - Application - SourceCode - GlobalS3Bucket - ".s3.amazonaws.com/" - !FindInMap - Application - SourceCode - TemplateKeyPrefix - "/content-localization-on-aws-video-workflow.template" Parameters: WorkflowCustomResourceArn: Fn::ImportValue: !Sub "${MieStackName}:WorkflowCustomResourceArn" OperatorLibraryStack: Fn::ImportValue: !Sub "${MieStackName}:OperatorLibraryStack" WebStack: Type: "AWS::CloudFormation::Stack" Properties: TemplateURL: !Join - "" - - "https://" - !FindInMap - Application - SourceCode - GlobalS3Bucket - ".s3.amazonaws.com/" - !FindInMap - Application - SourceCode - TemplateKeyPrefix - "/content-localization-on-aws-web.template" Parameters: DataplaneEndpoint: Fn::ImportValue: !Sub "${MieStackName}:DataplaneApiEndpoint" WorkflowEndpoint: Fn::ImportValue: !Sub "${MieStackName}:WorkflowApiEndpoint" SearchEndpoint: !GetAtt OpensearchStack.Outputs.DomainEndpoint DataplaneBucket: Fn::ImportValue: !Sub "${MieStackName}:DataplaneBucket" UserPoolId: !GetAtt AuthStack.Outputs.UserPoolId IdentityPoolId: !GetAtt AuthStack.Outputs.IdentityPoolId PoolClientId: !GetAtt AuthStack.Outputs.UserPoolClientId # AppRegistry Application: Type: AWS::ServiceCatalogAppRegistry::Application Properties: Description: !Sub - Service Catalog application to track and manage all your resources. The Solution ID is ${solutionId} and Solution Version is ${solutionVersion}. - solutionId: !FindInMap - Solution - Data - SolutionId solutionVersion: !FindInMap - Application - SourceCode - Version Name: !Join - "-" - - !FindInMap [Solution, Data, "AppRegistryApplicationName"] - !Ref AWS::Region - !Ref AWS::AccountId - !Ref AWS::StackName Tags: { 'Solutions:SolutionID': !FindInMap [Solution, Data, "SolutionId"], 'Solutions:SolutionName': !FindInMap [Solution, Data, "SolutionName"], 'Solutions:SolutionVersion': !FindInMap [Application, SourceCode, "Version"], 'Solutions:ApplicationType': !FindInMap [Solution, Data, "ApplicationType"], } AppRegistryApplicationStackAssociation: Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation Properties: Application: !GetAtt Application.Id Resource: !Ref AWS::StackId ResourceType: CFN_STACK DefaultApplicationAttributes: Type: AWS::ServiceCatalogAppRegistry::AttributeGroup Properties: Name: !Join ['-', [!Ref 'AWS::Region', !Ref 'AWS::StackName']] Description: Attribute group for solution information. Attributes: { "ApplicationType" : !FindInMap [Solution, Data, "ApplicationType"], "Version": !FindInMap [Application, SourceCode, "Version"], "SolutionID": !FindInMap [Solution, Data, "SolutionId"], "SolutionName": !FindInMap [Solution, Data, "SolutionName"] } AppRegistryApplicationAttributeAssociation: Type: AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation Properties: Application: !GetAtt Application.Id AttributeGroup: !GetAtt DefaultApplicationAttributes.Id AppRegistryApplicationStackAssociationOpenSearchStack: Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation Properties: Application: !GetAtt Application.Id Resource: !Ref OpensearchStack ResourceType: CFN_STACK AppRegistryApplicationStackAssociationAuthStack: Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation Properties: Application: !GetAtt Application.Id Resource: !Ref AuthStack ResourceType: CFN_STACK AppRegistryApplicationStackAssociationWebStack: Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation Properties: Application: !GetAtt Application.Id Resource: !Ref WebStack ResourceType: CFN_STACK AppRegistryApplicationStackAssociationVideoWorkflowStack: Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation Properties: Application: !GetAtt Application.Id Resource: !Ref VideoWorkflow ResourceType: CFN_STACK Outputs: ContentLocalizationSolution: Value: !GetAtt WebStack.Outputs.CloudfrontUrl SearchEndpoint: Value: !GetAtt OpensearchStack.Outputs.DomainEndpoint UserPoolId: Value: !GetAtt AuthStack.Outputs.UserPoolId IdentityPoolId: Value: !GetAtt AuthStack.Outputs.IdentityPoolId UserPoolClientId: Value: !GetAtt AuthStack.Outputs.UserPoolClientId