# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 AWSTemplateFormatVersion: 2010-09-09 Description: Calculated routes stored in Amazon Redshift using Amazon Location Service Metadata: 'AWS::CloudFormation::Interface': ParameterGroups: - Label: default: Amazon Redshift Parameters: - RedshiftCluster ParameterLabels: RedshiftCluster: default: Redshift cluster Parameters: RedshiftCluster: Description: Redshift cluster identifier Type: String ConstraintDescription: Cluster identifier for Amazon Redshift Mappings: RegionBucketMap: us-east-1: S3Bucket: amazon-location-service-lambda-udf us-east-2: S3Bucket: amazon-location-service-lambda-udf.us-east-2 us-west-1: S3Bucket: amazon-location-service-lambda-udf.us-west-1 us-west-2: S3Bucket: amazon-location-service-lambda-udf.us-west-2 ca-central-1: S3Bucket: amazon-location-service-lambda-udf.ca-central-1 eu-central-1: S3Bucket: amazon-location-service-lambda-udf.eu-central-1 eu-north-1: S3Bucket: amazon-location-service-lambda-udf.eu-north-1 eu-west-1: S3Bucket: amazon-location-service-lambda-udf.eu-west-1 eu-west-2: S3Bucket: amazon-location-service-lambda-udf.eu-west-2 eu-west-3: S3Bucket: amazon-location-service-lambda-udf.eu-west-3 sa-east-1: S3Bucket: amazon-location-service-lambda-udf.sa-east-1 ap-northeast-1: S3Bucket: amazon-location-service-lambda-udf.ap-northeast-1 ap-northeast-2: S3Bucket: amazon-location-service-lambda-udf.ap-northeast-2 ap-northeast-3: S3Bucket: amazon-location-service-lambda-udf.ap-northeast-3 ap-south-1: S3Bucket: amazon-location-service-lambda-udf.ap-south-1 ap-southeast-1: S3Bucket: amazon-location-service-lambda-udf.ap-southeast-1 ap-southeast-2: S3Bucket: amazon-location-service-lambda-udf.ap-southeast-2 Resources: RouteCalculator: Type: AWS::Location::RouteCalculator Properties: DataSource: Esri Description: Route Calculator for calculating route CalculatorName: Fn::Sub: ${AWS::StackName}-routecalculator.redshift CalculateRoutesLambda: Type: AWS::Lambda::Function Properties: Code: S3Bucket: Fn::FindInMap: - RegionBucketMap - Ref: AWS::Region - S3Bucket S3Key: route-lambda-redshift.zip Description: Function to calculate route for Amazon Redshift requests FunctionName: Fn::Sub: ${AWS::StackName}-CalculateRoutes-Redshift Handler: lambda_function.lambda_handler Role: Fn::GetAtt: [CalculateRoutesLambdaRole, Arn] Runtime: python3.8 Timeout: 300 Environment: Variables: ROUTE_CALCULATOR: Ref: RouteCalculator CalculateRoutesLambdaRole: Type: AWS::IAM::Role Properties: RoleName: Fn::Sub: ${AWS::StackName}-CalculateRoutes-Redshift-role AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: Fn::Sub: ${AWS::StackName}-CalculateRoutes-Redshift-policy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - geo:CalculateRoute Resource: - Fn::GetAtt: [RouteCalculator, CalculatorArn] ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole RedshiftLambdaRole: Type: AWS::IAM::Role Properties: RoleName: Fn::Sub: ${AWS::StackName}-Redshift-Lambda-role AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - redshift.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: Fn::Sub: ${AWS::StackName}-Redshift-Lambda-policy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - lambda:InvokeFunction Resource: Fn::GetAtt: [CalculateRoutesLambda, Arn] ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Outputs: CLICommand: Description: Run this CLI command to add role to Redshift cluster Value: Fn::Sub: 'aws redshift modify-cluster-iam-roles --cluster-identifier ${RedshiftCluster} --add-iam-roles ${RedshiftLambdaRole.Arn}' CalculateRoutesLambda: Description: Lambda function name to replace placeholder in user-defined function code Value: Ref: CalculateRoutesLambda RedshiftLambdaRole: Description: IAM role to replace placeholder in user-defined function code Value: Fn::GetAtt: [RedshiftLambdaRole, Arn]