AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: Creates the resources necessary to perform local (AWS based) visualisations. Resources: LambdaExecutionRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - lambda.amazonaws.com Action: "sts:AssumeRole" Path: "/" Policies: - PolicyName: DynamoDBStreamSubscribe PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - dynamodb:DescribeStream - dynamodb:GetRecords - dynamodb:GetShardIterator - dynamodb:ListStreams Resource: Fn::ImportValue: !Sub "${EnvironmentPrefix}DataLake-DataCatalogStreamARN" - PolicyName: CloudwatchLogs PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - logs:* Resource: "*" - PolicyName: ElasticsearchPost PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - "es:ESHttpPost" Resource: !Join - '' - - Fn::ImportValue: !Sub "${EnvironmentPrefix}DataLake-ElasticSearchDomainArn" - /* DataTableStream: Type: AWS::Lambda::EventSourceMapping Properties: BatchSize: 1 # Trigger one lambda per document Enabled: True EventSourceArn: Fn::ImportValue: !Sub "${EnvironmentPrefix}DataLake-DataCatalogStreamARN" FunctionName: Fn::GetAtt: [ SendDataCatalogUpdateToElasticsearch , Arn ] StartingPosition: LATEST # Subscribe from the tail of the stream DependsOn: LambdaExecutionRole SendDataCatalogUpdateToElasticsearch: Type: 'AWS::Serverless::Function' Properties: Handler: sendDataCatalogUpdateToElasticsearch.lambda_handler Runtime: python3.6 CodeUri: ./src/sendDataCatalogUpdateToElasticsearch.py Description: Sends changes in the data catalog to elasticsearch MemorySize: 128 Timeout: 10 Role: !GetAtt [ LambdaExecutionRole, Arn ] Layers: - !FindInMap [CustomLayersMap, !Ref "AWS::Region", PySDK] Environment: Variables: ELASTICSEARCH_ENDPOINT: Fn::ImportValue: !Sub "${EnvironmentPrefix}DataLake-ElasticSearchDomainEndpoint" Parameters: EnvironmentPrefix: Type: String Description: Enter the environment prefix used for the DataLake structure (S3 Buckets and DynamoDB tables ([a-z][a-z0-9-]+) MinLength: 3 MaxLength: 19 AllowedPattern: "[a-z][a-z0-9-]+" Mappings: CustomLayersMap: ## Missing Bahrain region me-south-1 ap-northeast-1: "PySDK": "arn:aws:lambda:ap-northeast-1:249908578461:layer:AWSLambda-Python-AWS-SDK:1" us-east-1: "PySDK": "arn:aws:lambda:us-east-1:668099181075:layer:AWSLambda-Python-AWS-SDK:1" ap-southeast-1: "PySDK": "arn:aws:lambda:ap-southeast-1:468957933125:layer:AWSLambda-Python-AWS-SDK:1" eu-west-1: "PySDK": "arn:aws:lambda:eu-west-1:399891621064:layer:AWSLambda-Python-AWS-SDK:1" us-west-1: "PySDK": "arn:aws:lambda:us-west-1:325793726646:layer:AWSLambda-Python-AWS-SDK:1" ap-east-1: "PySDK": "arn:aws:lambda:ap-east-1:118857876118:layer:AWSLambda-Python-AWS-SDK:1" ap-northeast-2: "PySDK": "arn:aws:lambda:ap-northeast-2:296580773974:layer:AWSLambda-Python-AWS-SDK:1" ap-northeast-3: "PySDK": "arn:aws:lambda:ap-northeast-3:961244031340:layer:AWSLambda-Python-AWS-SDK:1" ap-south-1: "PySDK": "arn:aws:lambda:ap-south-1:631267018583:layer:AWSLambda-Python-AWS-SDK:1" ap-southeast-2: "PySDK": "arn:aws:lambda:ap-southeast-2:817496625479:layer:AWSLambda-Python-AWS-SDK:1" ca-central-1: "PySDK": "arn:aws:lambda:ca-central-1:778625758767:layer:AWSLambda-Python-AWS-SDK:1" eu-central-1: "PySDK": "arn:aws:lambda:eu-central-1:292169987271:layer:AWSLambda-Python-AWS-SDK:1" eu-north-1: "PySDK": "arn:aws:lambda:eu-north-1:642425348156:layer:AWSLambda-Python-AWS-SDK:1" eu-west-2: "PySDK": "arn:aws:lambda:eu-west-2:142628438157:layer:AWSLambda-Python-AWS-SDK:1" eu-west-3: "PySDK": "arn:aws:lambda:eu-west-3:959311844005:layer:AWSLambda-Python-AWS-SDK:1" sa-east-1: "PySDK": "arn:aws:lambda:sa-east-1:640010853179:layer:AWSLambda-Python-AWS-SDK:1" us-east-2: "PySDK": "arn:aws:lambda:us-east-2:259788987135:layer:AWSLambda-Python-AWS-SDK:1" us-west-2: "PySDK": "arn:aws:lambda:us-west-2:420165488524:layer:AWSLambda-Python-AWS-SDK:1" cn-north-1: "PySDK": "arn:aws-cn:lambda:cn-north-1:683298794825:layer:AWSLambda-Python-AWS-SDK:1" cn-northwest-1: "PySDK": "arn:aws-cn:lambda:cn-northwest-1:382066503313:layer:AWSLambda-Python-AWS-SDK:1" us-gov-west-1: "PySDK": "arn:aws-us-gov:lambda:us-gov-west-1:556739011827:layer:AWSLambda-Python-AWS-SDK:1" us-gov-east-1: "PySDK": "arn:aws-us-gov:lambda:us-gov-east-1:138526772879:layer:AWSLambda-Python-AWS-SDK:1"