AWSTemplateFormatVersion: "2010-09-09" Description: S3 trigger Transform: AWS::Serverless-2016-10-31 Parameters: TableName: Type: String InputBucketName: Type: AWS::SSM::Parameter::Value<String> Default: InputBucketName InputBucketRawAudio: Type: AWS::SSM::Parameter::Value<String> Default: InputBucketRawAudio Globals: Function: Runtime: python3.8 MemorySize: 128 Timeout: 15 Resources: FileDropTrigger: Type: "AWS::Serverless::Function" Properties: CodeUri: ../../src/pca Handler: pca-aws-file-drop-trigger.lambda_handler Policies: - arn:aws:iam::aws:policy/AmazonTranscribeReadOnlyAccess - arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess - arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess - arn:aws:iam::aws:policy/AWSStepFunctionsFullAccess FileDropTriggerPermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref FileDropTrigger Action: lambda:InvokeFunction Principal: s3.amazonaws.com SourceAccount: !Ref AWS::AccountId SourceArn: !Sub arn:aws:s3:::${InputBucketName} ConfigureBucketRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: - "sts:AssumeRole" ManagedPolicyArns: - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" Policies: - PolicyName: allow-s3-notification-config PolicyDocument: Statement: Effect: Allow Action: - s3:GetBucketNotification - s3:PutBucketNotification Resource: !Sub arn:aws:s3:::${InputBucketName} ConfigureBucketFunction: Type: "AWS::Lambda::Function" Properties: Code: ../../src/trigger Handler: index.handler Runtime: nodejs12.x Role: !GetAtt ConfigureBucketRole.Arn Environment: Variables: StackName: !Ref AWS::StackName ConfigureBucket: Type: "AWS::CloudFormation::CustomResource" Properties: ServiceToken: !GetAtt ConfigureBucketFunction.Arn BucketName: !Ref InputBucketName Prefix: !Ref InputBucketRawAudio LambdaArn: !GetAtt FileDropTrigger.Arn TranscribeEventbridge: Type: "AWS::Serverless::Function" Properties: CodeUri: ../../src/pca Handler: pca-transcribe-eventbridge.lambda_handler Events: EventBridge: Type: EventBridgeRule Properties: Pattern: detail-type: - "Transcribe Job State Change" source: - aws.transcribe detail: TranscriptionJobStatus: - FAILED - COMPLETED Environment: Variables: TableName: !Ref TableName Policies: - arn:aws:iam::aws:policy/AmazonTranscribeReadOnlyAccess - arn:aws:iam::aws:policy/AWSStepFunctionsFullAccess - arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess