# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 AWSTemplateFormatVersion: 2010-09-09 Description: Geocode address stored in Amazon Aurora using Amazon Location Service Metadata: 'AWS::CloudFormation::Interface': ParameterGroups: - Label: default: Amazon Aurora PostgreSQL Parameters: - DBCluster ParameterLabels: DBCluster: default: DB cluster Parameters: DBCluster: Description: DB cluster identifier Type: String ConstraintDescription: Cluster identifier for Aurora PostgreSQL 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: PlaceIndex: Type: AWS::Location::PlaceIndex Properties: DataSource: Esri DataSourceConfiguration: IntendedUse: Storage Description: Place index for geocoding addresses IndexName: Fn::Sub: ${AWS::StackName}-placeindex.aurora PricingPlan: RequestBasedUsage GeocodeAddressLambda: Type: AWS::Lambda::Function Properties: Code: S3Bucket: Fn::FindInMap: - RegionBucketMap - Ref: AWS::Region - S3Bucket S3Key: geocode-lambda-aurora.zip Description: Function to geocode address for Amazon Aurora requests FunctionName: Fn::Sub: ${AWS::StackName}-GeocodeAddress-Aurora Handler: lambda_function.lambda_handler Role: Fn::GetAtt: [GeocodeAddressLambdaRole, Arn] Runtime: python3.8 Timeout: 3 Environment: Variables: PLACE_INDEX: Ref: PlaceIndex GeocodeAddressLambdaRole: Type: AWS::IAM::Role Properties: RoleName: Fn::Sub: ${AWS::StackName}-GeocodeAddress-Aurora-role AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: Fn::Sub: ${AWS::StackName}-GeocodeAddress-Aurora-policy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - geo:SearchPlaceIndexForText Resource: - Fn::GetAtt: [PlaceIndex, IndexArn] ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole AuroraLambdaRole: Type: AWS::IAM::Role Properties: RoleName: Fn::Sub: ${AWS::StackName}-Aurora-Lambda-role AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - rds.amazonaws.com Action: - sts:AssumeRole Policies: - PolicyName: Fn::Sub: ${AWS::StackName}-Aurora-Lambda-policy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - lambda:InvokeFunction Resource: Fn::GetAtt: [GeocodeAddressLambda, Arn] ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Outputs: CLICommand: Description: Run this CLI command to add role to Aurora cluster Value: Fn::Sub: 'aws rds add-role-to-db-cluster --db-cluster ${DBCluster} --role-arn ${AuroraLambdaRole.Arn} --feature-name Lambda' GeocodeAddressLambda: Description: Lambda function name to replace placeholder in user-defined function code Value: Ref: GeocodeAddressLambda