每天创建 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,
)

我尝试重用现有的集群,但它只包含原始集群的数据,直到它被创建为止。 所以我最后每天都要创建一个新的集群+实例。