寻求AWS QuickSight资产(数据源、数据集、仪表板)自动化迁移方案
自动化迁移AWS QuickSight资产方案
下面直接给你用Python boto3实现QuickSight数据源、数据集、仪表板跨账户自动化迁移的实操步骤和代码示例:
1. 前置准备
- 源、目标账户都得配好IAM权限,要能调用QuickSight相关API,比如
quicksight:DescribeDataSource、quicksight:CreateDataSource、quicksight:DescribeDataSet、quicksight:CreateDataSet这些核心操作权限 - 提前搞定源资产依赖的资源(比如S3、Redshift)在目标账户的访问权限,或者配置好跨账户访问策略
2. 迁移数据源(DataSources)
导出源账户数据源配置
import boto3 # 初始化源账户QuickSight客户端 source_quicksight = boto3.client('quicksight', region_name='us-east-1') source_account_id = '你的源账户ID' def export_data_source(data_source_id): # 获取数据源详情 response = source_quicksight.describe_data_source( AwsAccountId=source_account_id, DataSourceId=data_source_id ) # 清理不必要的元数据,只留核心配置 ds_config = response['DataSource'] del ds_config['DataSourceId'] del ds_config['Arn'] del ds_config['CreatedTime'] del ds_config['LastUpdatedTime'] del ds_config['CreatedBy'] del ds_config['LastUpdatedBy'] return ds_config
导入到目标账户
# 初始化目标账户QuickSight客户端 target_quicksight = boto3.client('quicksight', region_name='us-east-1') target_account_id = '你的目标账户ID' def import_data_source(source_config, new_ds_id): # 在目标账户创建数据源 response = target_quicksight.create_data_source( AwsAccountId=target_account_id, DataSourceId=new_ds_id, Name=source_config['Name'], Type=source_config['Type'], DataSourceParameters=source_config['DataSourceParameters'], # 示例给Admin用户配置全权限,可按需调整 Permissions=[ { 'Principal': f'arn:aws:iam::{target_account_id}:user/Admin', 'Actions': ['quicksight:DescribeDataSource', 'quicksight:UpdateDataSource', 'quicksight:DeleteDataSource'] } ] ) return response['Arn']
3. 迁移数据集(Dataset)
导出源账户数据集配置
def export_data_set(data_set_id): response = source_quicksight.describe_data_set( AwsAccountId=source_account_id, DataSetId=data_set_id ) ds_config = response['DataSet'] # 清理元数据 del ds_config['DataSetId'] del ds_config['Arn'] del ds_config['CreatedTime'] del ds_config['LastUpdatedTime'] del ds_config['CreatedBy'] del ds_config['LastUpdatedBy'] # 替换数据源引用为目标账户的数据源ARN(先完成数据源迁移) for table in ds_config['PhysicalTableMap'].values(): if 'RelationalTable' in table: table['RelationalTable']['DataSourceArn'] = '目标账户刚创建的数据源ARN' return ds_config
导入到目标账户
def import_data_set(source_config, new_ds_id): response = target_quicksight.create_data_set( AwsAccountId=target_account_id, DataSetId=new_ds_id, Name=source_config['Name'], PhysicalTableMap=source_config['PhysicalTableMap'], LogicalTableMap=source_config.get('LogicalTableMap', {}), ImportMode=source_config['ImportMode'], # 配置权限,按需调整 Permissions=[ { 'Principal': f'arn:aws:iam::{target_account_id}:user/Admin', 'Actions': ['quicksight:DescribeDataSet', 'quicksight:UpdateDataSet', 'quicksight:DeleteDataSet'] } ] ) return response['Arn']
4. 迁移仪表板(Dashboard)
导出源账户仪表板定义
def export_dashboard(dashboard_id): # 获取仪表板的定义内容 def_response = source_quicksight.describe_dashboard_definition( AwsAccountId=source_account_id, DashboardId=dashboard_id ) # 获取仪表板基本信息(名称、权限) info_response = source_quicksight.describe_dashboard( AwsAccountId=source_account_id, DashboardId=dashboard_id )['Dashboard'] return { 'Name': info_response['Name'], 'Definition': def_response['DashboardDefinition'], 'Permissions': info_response['Permissions'] }
导入到目标账户
def import_dashboard(source_config, new_db_id): # 替换数据集引用为目标账户的数据集ARN(先完成数据集迁移) for sheet in source_config['Definition']['Sheets']: for visual in sheet['Visuals']: if 'DataSetIdentifier' in visual['VisualConfiguration']: # 如果源和目标数据集ID一致,直接用;不一致就手动映射 visual['VisualConfiguration']['DataSetIdentifier'] = new_ds_id # 创建仪表板 response = target_quicksight.create_dashboard( AwsAccountId=target_account_id, DashboardId=new_db_id, Name=source_config['Name'], DashboardDefinition=source_config['Definition'], # 配置权限,按需调整 Permissions=[ { 'Principal': f'arn:aws:iam::{target_account_id}:user/Admin', 'Actions': ['quicksight:DescribeDashboard', 'quicksight:UpdateDashboard', 'quicksight:DeleteDashboard'] } ] ) return response['Arn']
关键注意事项
- 要是源资产用到了自定义IAM角色,得在目标账户提前创建相同权限的角色,配置好信任关系
- 迁移顺序必须是:数据源 → 数据集 → 仪表板,不然会因为依赖缺失创建失败
- 加密的资产要确保目标账户有对应KMS密钥的访问权限
- 跨区域迁移的话,得确认数据源在目标区域是可用的,比如Redshift集群得在目标区域有对应实例
内容的提问来源于stack exchange,提问作者Tam
相关产品推荐
相关产品推荐

