如何使用Boto3恢复Redshift快照?标识符获取与参数疑问
关于Boto3恢复Redshift快照的问题
问题说明
我尝试用Boto3编程恢复Redshift快照,已经自行设置了Cluster Identifier,但不清楚如何获取快照标识符或ARN(二者选其一即可);同时想确认:除非IAM用户策略里的快照资源元素指定了非*的集群名称,否则除Cluster Identifier外,是不是只需要提供快照标识符/ARN这一个必填参数?
我运行了以下代码,但因缺少快照标识符或ARN报错:
import boto3 redshift = boto3.client('redshift', region_name='us-west-2', aws_access_key_id=KEY, aws_secret_access_key=SECRET) response = redshift.restore_from_cluster_snapshot( ClusterIdentifier=DWH_CLUSTER_IDENTIFIER) #from a config file
解决方案
1. 获取快照标识符或ARN
可以通过Boto3的describe_cluster_snapshots方法查询所有可用的Redshift快照,从中提取所需的快照标识符或ARN:
import boto3 redshift = boto3.client('redshift', region_name='us-west-2', aws_access_key_id=KEY, aws_secret_access_key=SECRET) # 查询所有快照,可添加过滤条件缩小范围 snapshots = redshift.describe_cluster_snapshots() # 遍历快照列表提取关键信息 for snapshot in snapshots['Snapshots']: print(f"快照标识符: {snapshot['SnapshotIdentifier']}") print(f"快照ARN: {snapshot['SnapshotArn']}") print(f"关联集群ID: {snapshot['ClusterIdentifier']}") print("---")
如果只需要查询特定集群的快照,可添加ClusterIdentifier过滤参数:
snapshots = redshift.describe_cluster_snapshots(ClusterIdentifier="你的原集群ID")
2. 必填参数确认
根据Redshift API规范,restore_from_cluster_snapshot方法的必填参数是ClusterIdentifier(新集群的标识符)和SnapshotIdentifier/SnapshotArn(二选一),这和IAM策略的资源配置无关。IAM策略的资源限制仅控制用户是否有权限操作目标快照,不会改变API本身的必填参数要求。
修正后的代码示例:
import boto3 redshift = boto3.client('redshift', region_name='us-west-2', aws_access_key_id=KEY, aws_secret_access_key=SECRET) response = redshift.restore_from_cluster_snapshot( ClusterIdentifier=DWH_CLUSTER_IDENTIFIER, SnapshotIdentifier="你的快照标识符" # 也可以替换为SnapshotArn="你的快照ARN" )
内容的提问来源于stack exchange,提问作者Dev_Reka
相关产品推荐
相关产品推荐

