Quicksight previously had offered variety of APIs to move assets between different accounts for example between dev, test and prod AWS accounts. To make things quicker and easier they have introduced new API's using a concept called Asset as Bundle. So all our Quicksight assets namely Datasets, Analysis & Dashboards and this also includes themes, Vpc configurations are packed together as a bundle and that makes it easy to move those assets between different accounts without having to move every asset separately which was the case previously.
you could use any programming language to automate the Quicksight APIs
The new APIs allows you to interact with all the assets in a lift-and-shift manner for deployment across QuickSight accounts. These APIs can also be used for backing up assets and restoring them when needed. BIOps teams will benefit from this capability allowing them to automate Quicksight assets backup and deployment
The two types of APIs are:
- Export APIS
- Import APIS
Export APIS- This can be used to initiate, track and describe export jobs. When you initiate the export job it creates a bundle file as a zip file (.qs extension) which basically has all your quicksight assets.
StartAssetBundleExportJob - Asynchronous API to export an asset bundle file.
DescribeAssetBundleExportJob - Synchronous API to get the status of your export job. When successful, this API call response will have a presigned URL to fetch the asset bundle.
ListAssetBundleExportJobs - Synchronous API to list past export jobs. The list will contain both finished and running jobs from the past 15 days.
Import APIS- his can be used to initiate, track and describe import jobs. These apis can be used on the target quicksight account.
StartAssetBundleImportJob - Asynchronous API to import an asset bundle file.
DescribeAssetBundleImportJob - Synchronous API to get the status of your import job.
ListAssetBundleImportJobs- Synchronous API to list past import jobs. The list will contain both finished and running jobs from the past 15 days.
Steps for Export job:
- Use the StartAssetBundleExportJob API and export assets into a bundle file.
- Use DescribeAssetBundleExportJob API to view the status and presigned URL that you will use to put it into a S3 bucket.
- Place the bundle file in a S3 bucket.
- Use ListAssetBundleExportJobs API to list what assets have been exported.
Steps for Import job:
- Use the StartAssetBundleImportJob API and get the assets from S3 bucket overriding the source details.
- Use DescribeAssetBundleImportJob API to view the status of the import.
- Use ListAssetBundleImportJobsAPI to list what assets have been imported.
Python code sample to automate assets deployments:
import boto3
import re
import json
import time
import requests
SourceAccountID=
SourceAnalysisName=
SourceAnalysisId=
SourceRoleName='QuickSightFullAccess'
SourceRegion=
Resource_Arns_Dashboard=
Resource_Arns_Analysis=
account_id=
analysis_id=
region=
dashboardId=
client = boto3.client('quicksight', region)
client_s3 = boto3.client('s3', region)
Call describe_analysis() to retrieve the analysis details
try:
response=client.start_asset_bundle_export_job(
AwsAccountId=SourceAccountID ,
AssetBundleExportJobId= 'job-1',
ResourceArns= Resource_Arns_Analysis,
ExportFormat='QUICKSIGHT_JSON',
IncludeAllDependencies=IncludeDependencies
)
print(response)
time.sleep(60)
res=client.**describe_asset_bundle_export_job**(
AwsAccountId=SourceAccountID,
AssetBundleExportJobId='job-1'
)
print(res)
# save the exported asset bundle file into S3
for key,value in res.items():
if (key=='DownloadUrl'):
download_url=value;
print(download_url)
r=requests.get(download_url, allow_redirects=True)
open('job-1.zip','wb').write(r.content)
#target_s3_client=targetsession.client('s3')
bucket_name="assetbundle-" + SourceAccountID + "-" + SourceRegion
uploading file to s3 bucket
client_s3.upload_file(
Filename='job-1.zip',
Bucket="qsbackup",
Key='Imported/job-1.zip'
)
# import dashboard back to target account
res_import=client.**start_asset_bundle_import_job**(
AwsAccountId=SourceAccountID,
AssetBundleImportJobId='Test_Import',
AssetBundleImportSource={"S3Uri":"s3://assetbundle-" +SourceAccountID+ "-" +SourceRegion+"/Imported/job-1.zip"},
OverrideParameters={
'Analyses': [
{
'AnalysisId': <Analysis ID>,
'Name': 'NEWLY_IMPORTED_USING_API'
},
]
}
)
print(res_import)
time.sleep(60)
res_import_describe=client.**describe_asset_bundle_import_job**(
AwsAccountId=SourceAccountID,
AssetBundleImportJobId='Test_Import'
)
print(res_import_describe)
# update permissions
res_update_permissions=client.**update_analysis_permissions**(
AwsAccountId=SourceAccountID,
AnalysisId=SourceAnalysisId,
GrantPermissions= [
{
'Principal':<principal ARN> ,
'Actions': [
"quicksight:RestoreAnalysis",
"quicksight:UpdateAnalysisPermissions",
"quicksight:DeleteAnalysis",
"quicksight:QueryAnalysis",
"quicksight:DescribeAnalysisPermissions",
"quicksight:DescribeAnalysis",
"quicksight:UpdateAnalysis"
]
}
]
)
print(res_update_permissions)
#analysis_name = response['Analysis']['Name']
dashboard = response
print(dashboard)
except TypeError as e:
print('Caught TypeError:', e)
print('End')
Top comments (0)