Redshift federated query with Aurora(MySQL)

Thulasiraj Komminar
2 min readOct 15, 2021

--

Redshift federated query lets you query and analyse data across multiple operational databases directly. In this blog I have explained how to setup Redshift to query across multiple Aurora instances cross-account.

Architecture

AWS Resources Setup

I have explained how to setup AWS resources in the below steps.

Prerequisites

VPC Peering should be enabled between the accounts.

Amazon Redshift cluster should have a cluster maintenance version that supports federated queries.

Amazon Redshift cluster should have enhanced VPC routing enabled.

Grant select access to innodb_index_stats & innodb_table_stats for the aurora user in the aurora cluster.

Steps

  • In Account A create a Customer managed KMS key and add a grant to the Account X’s root user(can also be the Redshift role) with Decrypt & DescribeKey operations.
  • In Account A create a secret in the SecretsManager and store the Aurora instance credentials.
  • Allow access to the secret for Account X’s root user(can also be the Redshift role) by adding the below resource policy to the secret.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::${account-X-id}:root"
},
"Action":"secretsmanager:GetSecretValue",
"Resource":"*"
}
]
}
  • In the Aurora cluster security group add inbound rules for Redshift.
  • Add a policy to the Redshift role in Account X to allow access to Account A’s KMS key and SecretManger like below.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"",
"Effect":"Allow",
"Action":"kms:Decrypt",
"Resource":[
"arn:aws:kms:${aws-region}:${account-A-id}:key/*******"
]
},
{
"Sid":"",
"Effect":"Allow",
"Action":[
"secretsmanager:ListSecrets",
"secretsmanager:GetRandomPassword"
],
"Resource":"*"
},
{
"Sid":"",
"Effect":"Allow",
"Action":[
"secretsmanager:ListSecretVersionIds",
"secretsmanager:GetSecretValue",
"secretsmanager:GetResourcePolicy",
"secretsmanager:DescribeSecret"
],
"Resource":[
"arn:aws:secretsmanager:${aws-region}:${account-A-id}:secret:aurora/*******"
]
}
]
}
  • Allow all outbound traffic in the Redshift cluster security group.

Adding Aurora database as external schema in Redshift

Once the AWS resources are setup then you can add the Aurora databases as external schemas in Redshift and start querying.

External schema

CREATE EXTERNAL SCHEMA redshift_schema_name
FROM MYSQL
DATABASE ‘aurora_schema_name’
URI ‘${aurora_cluster_endpoint}’
IAM_ROLE ‘${redshift_role_arn}’
SECRET_ARN ‘${aurora_secret_arn}’;

--

--

Thulasiraj Komminar
Thulasiraj Komminar

Written by Thulasiraj Komminar

Industry 4.0 | Smart Manufacturing | IIoT | Data Platform Engineer | AWS Community Builder | Terraform | MLOps