

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

# 使用 Amazon Neptune 无服务器
<a name="neptune-serverless-using"></a>

您可以将新的 Neptune 数据库集群创建为无服务器集群，或者在某些情况下，可以将现有数据库集群转换为使用无服务器。也可以将无服务器数据库集群中的数据库实例与无服务器实例相互转换。你只能在支持 Neptune Serverless AWS 区域 的地方使用 Neptune Serverless，还有其他一些限制（参见）。[Amazon Neptune 无服务器约束](neptune-serverless.md#neptune-serverless-limitations)

也可以使用 [Neptune CloudFormation 堆栈](get-started-cfn-create.md)创建 Neptune 无服务器数据库集群。

## 创建使用无服务器的新数据库集群
<a name="neptune-serverless-create"></a>

要创建使用无服务器的 Neptune 数据库集群，您可以[通过 AWS 管理控制台](manage-console-launch-console.md)，使用与创建预调配集群相同的方法来创建。不同之处在于，在**数据库实例大小**下，您需要将**数据库实例类**设置为**无服务器**。当您这样做时，您需要为集群[设置无服务器容量范围](neptune-serverless-capacity-scaling.md)。

您也可以使用如下所 AWS CLI 示的 with 命令创建无服务器数据库集群（在 Windows 上，将 '\\' 替换为 '^'）：

```
aws neptune create-db-cluster \
  --region {{(an AWS 区域 region that supports serverless)}} \
  --db-cluster-identifier {{(ID for the new serverless DB cluster)}} \
  --engine neptune \
  --engine-version {{(optional: 1.2.0.1 or above)}} \
  --serverless-v2-scaling-configuration "MinCapacity={{1.0}}, MaxCapacity={{128.0}}"
```

也可以指定 `serverless-v2-scaling-configuration` 参数，如下所示：

```
  --serverless-v2-scaling-configuration '{"MinCapacity":{{1.0}}, "MaxCapacity":{{128.0}}}'
```

然后，您可以对 `ServerlessV2ScalingConfiguration` 属性运行 `describe-db-clusters` 命令，该命令应返回您指定的容量范围设置：

```
"ServerlessV2ScalingConfiguration": {
    "MinCapacity": {{(the specified minimum number of NCUs)}},
    "MaxCapacity": {{(the specified maximum number of NCUs)}}
}
```

## 将现有数据库集群或实例转换为无服务器
<a name="neptune-conversion-to-serverless"></a>

如果您的 Neptune 数据库集群使用引擎版本 1.2.0.1 或更高版本，则可以将其转换为无服务器。此过程确实会导致一些停机时间。

第一步是向现有集群添加容量范围。你可以使用或使用这样的 AWS CLI 命令来做到这一点（在 Windows 上，用 '^' 替换 '\\'）： AWS 管理控制台

```
aws neptune modify-db-cluster \
  --db-cluster-identifier {{(your DB cluster ID)}} \
  --serverless-v2-scaling-configuration \
      MinCapacity={{(minimum number of NCUs, such as  2.0)}}, \
      MaxCapacity={{(maximum number of NCUs, such as 24.0)}}
```

下一步是创建一个新的无服务器数据库实例，以替换集群中现有的主实例（写入器）。同样，您可以使用 AWS 管理控制台 或来执行此操作以及所有后续步骤 AWS CLI。在任一种情况下，将数据库实例类指定为无服务器。 AWS CLI 命令看起来像这样（在 Windows 上，将 '\\' 替换为 '^'）：

```
aws neptune create-db-instance \
  --db-instance-identifier {{(an instance ID for the new writer instance)}} \
  --db-cluster-identifier {{(ID of the DB cluster)}} \
  --db-instance-class db.serverless \
  --engine neptune
```

当新的写入器实例变为可用时，执行失效转移以使其成为集群的写入器实例：

```
aws neptune failover-db-cluster \
  --db-cluster-identifier {{(ID of the DB cluster)}} \
  --target-db-instance-identifier {{(instance ID of the new serverless instance)}}
```

接下来，删除旧的写入器实例：

```
aws neptune delete-db-instance \
  --db-instance-identifier {{(instance ID of the old writer instance)}} \
  --skip-final-snapshot
```

最后，执行同样的操作，创建一个新的无服务器实例，以取代您想要变为无服务器实例的每个现有预调配读取器实例，然后删除现有的预调配实例（读取器实例不需要失效转移）。

## 修改现有无服务器数据库集群的容量范围
<a name="neptune-modify-capacity-range"></a>

您可以像这样使用 AWS CLI 来更改 Neptune 无服务器数据库集群的容量范围（在 Windows 上，将 '\\' 替换为 '^'）：

```
aws neptune modify-db-cluster \
  --region {{(an AWS region that supports serverless)}} \
  --db-cluster-identifier {{(ID of the serverless DB cluster)}} \
  --apply-immediately \
  --serverless-v2-scaling-configuration MinCapacity={{4.0}}, MaxCapacity={{32}}
```

更改容量范围会导致某些配置参数的默认值发生更改。Neptune 可以立即应用其中一些新的默认值，但是某些动态参数更改只有在重启后才会生效。`pending-reboot` 状态表示需要重启才能应用一些参数更改。

## 将无服务器数据库实例更改为预调配
<a name="neptune-conversion-to-provisioned"></a>

要将 Neptune 无服务器实例转换为预调配实例，您只需将其实例类更改为预调配的实例类之一。请参阅[修改 Neptune 数据库实例（并立即应用）](manage-console-instances-modify.md)。

## 为无服务器配置 Gremlin 客户端
<a name="neptune-serverless-client-config"></a>

在 Neptune Serverless 中使用 Gremlin WebSocket 客户端时，您需要适当配置客户端的心跳间隔，以便在扩展事件期间保持稳定的连接。有关 Java、Go、 JavaScript /Node.js 和 Python 客户端的详细配置说明，请参阅[Neptune 无服务器的心跳配置](best-practices-gremlin-heartbeat-serverless.md)。

## 使用 Amazon 监控无服务器容量 CloudWatch
<a name="neptune-serverless-monitoring"></a>

您可以使用 CloudWatch 来监控数据库集群中 Neptune 无服务器实例的容量和利用率。有两个 CloudWatch 指标可以让您跟踪集群级别和实例级别的当前无服务器容量：
+ **`ServerlessDatabaseCapacity`**— 作为实例级别的指标，`ServerlessDatabaseCapacity`报告当前的实例容量，在。 NCUs作为集群级指标，它报告集群中所有数据库实例的所有 `ServerlessDatabaseCapacity` 值的平均值。
+ **`NCUUtilization`** – 此指标报告可能使用的容量百分比。计算方法为：当前容量 `ServerlessDatabaseCapacity`（实例级或集群级）除以数据库集群的最大容量设置。

  如果该指标在集群级接近 100%，这意味着集群已尽可能高地扩展，则可以考虑增加最大容量设置。

  如果读取器实例的容量接近 100%，而写入器实例的容量未接近最大容量，则可以考虑添加更多读取器实例来分配读取工作负载。

请注意，对于无服务器实例，`CPUUtilization` 和 `FreeableMemory` 指标的含义与对于预调配实例的含义略有不同。在无服务器环境中，`CPUUtilization` 是一个百分比，其计算方法是当前使用的 CPU 量除以在最大容量基础上提供的 CPU 量。同样，`FreeableMemory` 报告实例达到最大容量时可用的可释放内存量。

以下示例说明如何 AWS CLI 在 Linux 上使用来检索给定数据库实例的最小、最大和平均容量值，这些值在一小时内每 10 分钟测量一次。Linux `date` 命令指定相对于当前日期和时间的开始时间和结束时间。`--query` 参数中的 `sort_by` 函数根据 `Timestamp` 字段按时间顺序对结果进行排序：

```
aws cloudwatch get-metric-statistics \
  --metric-name "ServerlessDatabaseCapacity" \
  --start-time "$(date -d '1 hour ago')" \
  --end-time "$(date -d 'now')" \
  --period 600 \
  --namespace "AWS/Neptune"
  --statistics Minimum Maximum Average \
  --dimensions Name=DBInstanceIdentifier,Value={{(instance ID)}} \
  --query 'sort_by(Datapoints[*].{min:Minimum,max:Maximum,avg:Average,ts:Timestamp},&ts)' \
  --output table
```