使用快速重置 API 清空 Amazon Neptune 数据库集群 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用快速重置 API 清空 Amazon Neptune 数据库集群

Neptune 快速重置 REST API 允许您快速轻松地重置 Neptune 图形,同时删除其所有数据。

注意

此特征从 Neptune 引擎版本 1.0.4.0 开始推出。

  • 在大多数情况下,快速重置操作会在几分钟内完成。持续时间可能会有所不同,具体取决于启动操作时集群上的负载。

  • 快速重置操作不会导致额外的 I/O。

  • 快速重置后,存储卷大小不会缩小。取而代之的是,当插入新数据时,存储空间会被重复使用。这意味着在快速重置操作之前和之后拍摄的快照的卷大小将相同。使用在快速重置操作之前和之后创建的快照的已还原集群的卷大小也将相同。

  • 作为重置操作的一部分,数据库集群中的所有实例都将重启。

    注意

    在极少数情况下,这些服务器重启也可能导致集群的失效转移。

重要

使用快速重置可能会破坏您的 Neptune 数据库集群与其它服务的集成。例如:

  • 快速重置会从您的数据库中删除所有流数据并完全重置流。这意味着,如果没有新的配置,流使用者可能无法再工作。

  • 快速重置会移除有关 Neptune ML 正在使用的 SageMaker 资源的所有元数据,包括任务和端点。它们继续存在于 SageMaker 中,您可以继续使用现有的 SageMaker 端点进行 Neptune ML 推理查询,但是 Neptune ML 管理 API 不再适用于它们。

  • 诸如与 ElasticSearch 的全文搜索集成之类的集成也会因快速重置而消失,必须手动重新建立这些集成,然后才能再次使用。

使用 API 从 Neptune 数据库集群中删除所有数据
  1. 首先,生成一个令牌,然后可以使用该令牌来执行数据库重置。此步骤旨在帮助防止任何人意外重置数据库。

    为此,您可以向数据库集群的写入器实例上的 /system 端点发送 HTTP POST 请求以指定 initiateDatabaseReset 操作。

    使用 JSON 内容类型的 curl 命令将是:

    curl -X POST \ -H 'Content-Type: application/json' \ https://your_writer_instance_endpoint:8182/system \ -d '{ "action" : "initiateDatabaseReset" }'

    或者,使用 x-www-form-urlencoded 内容类型:

    curl -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ https://your_writer_instance_endpoint:8182/system \ -d 'action=initiateDatabaseReset '

    initiateDatabaseReset 请求在其 JSON 响应中返回重置令牌,如下所示:

    { "status" : "200 OK", "payload" : { "token" : "new_token_guid" } }

    令牌在发出后一小时(60 分钟)内保持有效。

    如果您将请求发送到读取器实例或状态端点,Neptune 将引发 ReadOnlyViolationException

    如果您发送多个 initiateDatabaseReset 请求,则只有最新生成的令牌将对第二步有效,即您实际执行重置操作。

    如果服务器在您的 initiateDatabaseReset 请求后立即重启,则生成的令牌将失效,您需要发送新请求才能获取新令牌。

  2. 接下来,您将使用从 initiateDatabaseReset 中获得的令牌,将 performDatabaseReset 请求发送到数据库集群的写入器实例上的 /system 端点。这将从数据库集群中删除所有数据。

    使用 JSON 内容类型的 curl 命令是:

    curl -X POST \ -H 'Content-Type: application/json' \ https://your_writer_instance_endpoint:8182/system \ -d '{ "action" : "performDatabaseReset", "token" : "token_guid" }'

    或者,使用 x-www-form-urlencoded 内容类型:

    curl -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ https://your_writer_instance_endpoint:8182/system \ -d 'action=performDatabaseReset&token=token_guid'

    该请求会返回 JSON 响应。如果请求被接受,则响应为:

    { "status" : "200 OK" }

    如果您发送的令牌与发出的令牌不匹配,则响应如下所示:

    { "code" : "InvalidParameterException", "requestId":"token_guid", "detailedMessage" : "System command parameter 'token' : 'token_guid' does not match database reset token" }

    如果请求被接受并且重置开始,则服务器将重启并删除数据。在数据库集群重置期间,您无法向其发送任何其它请求。

使用带有 IAM-Auth 的快速重置 API

如果您在数据库集群上启用了 IAM-Auth,则可以使用 awscurl 发送使用 IAM-Auth 进行身份验证的快速重置命令:

使用 awscurl 通过 IAM-Auth 发送快速重置请求
  1. 正确设置 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 环境变量(如果您使用的是临时凭证,也要正确设置 AWS_SECURITY_TOKEN)。

  2. initiateDatabaseReset 请求类似于以下内容:

    awscurl -X POST --service neptune-db "$SYSTEM_ENDPOINT" \ -H 'Content-Type: application/json' --region us-west-2 \ -d '{ "action" : "initiateDatabaseReset" }'
  3. performDatabaseReset 请求类似于以下内容:

    awscurl -X POST --service neptune-db "$SYSTEM_ENDPOINT" \ -H 'Content-Type: application/json' --region us-west-2 \ -d '{ "action" : "performDatabaseReset" }'

快速重置操作的常见错误代码

Neptune 错误代码 HTTP 状态 消息 示例

InvalidParameterException

400

系统命令参数“action”具有不支持的值“XXX

参数无效

InvalidParameterException

400

action 提供的值过多

发送了一个包含多个操作的快速重置请求,其标头为“Content-type:application/x-www-form-urlencoded”

InvalidParameterException

400

重复字段“action”

发送了一个包含多个操作的快速重置请求,其标头为“Content-Type: application/json”

MethodNotAllowedException

400

错误路由:/bad_endpoint

请求发送到错误的端点

MissingParameterException

400

缺少必需参数:[action]

快速重置请求不包含所需的“action”参数

ReadOnlyViolationException

400

不允许对只读副本实例进行写入操作

快速重置请求已发送到读取器或状态端点

AccessDeniedException

403

身份验证令牌缺失

向启用了 IAM-Auth 的数据库端点发送了没有正确签名的快速重置请求

ServerShutdownException

500

数据库重置正在进行中。请在集群可用后重试查询。

当快速重置开始时,现有和传入的 Gremlin/Sparql 查询会失败。