AWS restore_db_cluster_from_snapshot 尚未有实例

AWS restore_db_cluster_from_snapshot 尚未有实例

我正在编写一个 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

相关内容