我正在编写一个 AWS lambda 函数来获取我们生产数据库的最新快照并将其恢复为新数据库。这在作为 RDS 实例时运行良好,但我们最近将主数据库切换到 Aurora,它是一个集群而不是实例。
我查看了 API,并能够重新利用旧逻辑。我大部分情况instance
下都替换了单词cluster
,它看起来可以工作,它创建了一个新集群等。然而,新集群显示 0 个实例,而它所源自的数据库显示 1 个。我认为这阻止了我像原始数据库集群那样远程连接到它。
我仍然不太清楚什么是集群,但是我是否必须单独启动一个实例才能启用远程连接?
以下是 Python 脚本的一部分 -
def byTimestamp(snap):
if 'SnapshotCreateTime' in snap:
return datetime.datetime.isoformat(snap['SnapshotCreateTime'])
else:
return datetime.datetime.isoformat(datetime.datetime.now())
def restore_db():
client = boto3.client('rds', region_name=region)
source_snaps = client.describe_db_cluster_snapshots(DBClusterIdentifier = 'main-production')['DBClusterSnapshots']
source_snap = sorted(source_snaps, key=byTimestamp, reverse=True)[0]['DBClusterSnapshotIdentifier']
response = client.restore_db_cluster_from_snapshot(
DBClusterIdentifier='main-development',
SnapshotIdentifier=source_snap,
Port=port,
Engine='aurora-postgresql')
答案1
是的,您必须在集群中启动一个实例。
Aurora 集群包含一个包含数据的 Aurora 存储卷,以及 0 个或多个可以访问该数据的实例。除非集群中至少有 1 个实例,否则您实际上无法访问集群的数据。
这种抽象的原因是,与传统数据库服务器不同,在传统数据库服务器中,数据“在服务器上”,并且您有一个主服务器,有时还有一个或多个副本,每个副本都有数据的副本,而 Aurora 主服务器和副本则从同一个存储中写入和读取,并且如果主服务器发生故障,任何副本都可以提升为主服务器。
如果您从控制台配置 Aurora,控制台会向您隐藏其中的一些内容。
答案2
以下是 AWS 官方文档恢复数据库集群:
笔记
此操作仅恢复数据库群集,而不是该数据库群集的数据库实例。您必须调用 CreateDBInstance 操作来为已还原的数据库群集创建数据库实例,并在 DBClusterIdentifier 中指定已还原的数据库群集的标识符。 只有在 RestoreDBClusterFromSnapshot 操作完成并且数据库群集可用后,您才能创建数据库实例。
现在,你可能需要添加一个服务员事件,以便您的RestoreDBClusterFromSnapshot
操作在调用CreateDBInstance
操作之前完成。请参阅可用RDS 服务员了解更多详情。如果您找不到现成的服务员,那么您可以自己创建自定义服务员.py