每天创建 Aurora 集群的临时克隆
Create daily temporary clone of Aurora cluster
我想为我的 Aurora MySQL 集群创建一个临时克隆到 运行 每日 ETL(以确保它不影响其他服务),然后在 ETL 完成后终止它完成。
import boto3
client = boto3.client('rds')
old_cluster_identifier = 'test-etl'
new_cluster_identifier = 'test-etl-clone'
response = client.restore_db_cluster_to_point_in_time(
DBClusterIdentifier=new_cluster_identifier,
RestoreType='copy-on-write',
SourceDBClusterIdentifier=old_cluster_identifier,
UseLatestRestorableTime=True,
Port=3306,
DBSubnetGroupName='test-etl',
VpcSecurityGroupIds=[
'sg-xxxx',
],
Tags=[],
EnableIAMDatabaseAuthentication=False,
BacktrackWindow=0,
DeletionProtection=False,
CopyTagsToSnapshot=False
)
reader_endpoint = response['DBCluster']['ReaderEndpoint']
response2 = client.create_db_instance(
DBInstanceClass='db.t2.medium',
Engine='aurora',
DBClusterIdentifier=new_cluster_identifier,
DBInstanceIdentifier=new_cluster_identifier + '-instance-1',
)
print(response2)
这段代码对我来说效果很好,但是当我想从控制台删除克隆集群时,我只需单击实例名称/操作/删除,这会同时删除实例和集群。
我试图在 AWS SDK 中找到等效项,但如果我 运行 函数 delete_db_instance() 它只会删除实例并使集群保持状态 'available' 所以我要做:
- delete_db_instance('test-etl-clone-instance-1')
- 等到它被删除
- delete_db_cluster('test-etl-clone')
有没有办法直接同时删除两者?
或者我是否可以只让克隆的集群始终可用而无需任何实例 运行ning 并且每天只 create/delete 一个新实例?我不确定如果我只有集群而没有任何实例,并且第二天创建新实例时数据是否是最新的,是否会产生额外费用。
谢谢
最后我发现我可以同时删除实例和集群,而无需等待:
import boto3
client = boto3.client('rds')
new_cluster_identifier = 'test-etl-clone'
client.delete_db_instance(
DBInstanceIdentifier=new_cluster_identifier + '-instance-1',
SkipFinalSnapshot=True,
DeleteAutomatedBackups=True
)
client.delete_db_cluster(
DBClusterIdentifier=new_cluster_identifier,
SkipFinalSnapshot=True,
)
我尝试重用现有的集群,但它只包含原始集群的数据,直到它被创建为止。
所以我最后每天都要创建一个新的集群+实例。
我想为我的 Aurora MySQL 集群创建一个临时克隆到 运行 每日 ETL(以确保它不影响其他服务),然后在 ETL 完成后终止它完成。
import boto3
client = boto3.client('rds')
old_cluster_identifier = 'test-etl'
new_cluster_identifier = 'test-etl-clone'
response = client.restore_db_cluster_to_point_in_time(
DBClusterIdentifier=new_cluster_identifier,
RestoreType='copy-on-write',
SourceDBClusterIdentifier=old_cluster_identifier,
UseLatestRestorableTime=True,
Port=3306,
DBSubnetGroupName='test-etl',
VpcSecurityGroupIds=[
'sg-xxxx',
],
Tags=[],
EnableIAMDatabaseAuthentication=False,
BacktrackWindow=0,
DeletionProtection=False,
CopyTagsToSnapshot=False
)
reader_endpoint = response['DBCluster']['ReaderEndpoint']
response2 = client.create_db_instance(
DBInstanceClass='db.t2.medium',
Engine='aurora',
DBClusterIdentifier=new_cluster_identifier,
DBInstanceIdentifier=new_cluster_identifier + '-instance-1',
)
print(response2)
这段代码对我来说效果很好,但是当我想从控制台删除克隆集群时,我只需单击实例名称/操作/删除,这会同时删除实例和集群。
我试图在 AWS SDK 中找到等效项,但如果我 运行 函数 delete_db_instance() 它只会删除实例并使集群保持状态 'available' 所以我要做: - delete_db_instance('test-etl-clone-instance-1') - 等到它被删除 - delete_db_cluster('test-etl-clone')
有没有办法直接同时删除两者?
或者我是否可以只让克隆的集群始终可用而无需任何实例 运行ning 并且每天只 create/delete 一个新实例?我不确定如果我只有集群而没有任何实例,并且第二天创建新实例时数据是否是最新的,是否会产生额外费用。
谢谢
最后我发现我可以同时删除实例和集群,而无需等待:
import boto3
client = boto3.client('rds')
new_cluster_identifier = 'test-etl-clone'
client.delete_db_instance(
DBInstanceIdentifier=new_cluster_identifier + '-instance-1',
SkipFinalSnapshot=True,
DeleteAutomatedBackups=True
)
client.delete_db_cluster(
DBClusterIdentifier=new_cluster_identifier,
SkipFinalSnapshot=True,
)
我尝试重用现有的集群,但它只包含原始集群的数据,直到它被创建为止。 所以我最后每天都要创建一个新的集群+实例。