You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:17:14