

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 Amazon Neptune
<a name="neptune-setup"></a>

Amazon Neptune 是一項全受管圖形資料庫服務，可讓您輕鬆建置和執行使用高度連線資料集的應用程式。為了協助您開始使用 Neptune，文件的本節涵蓋各種主題，從選擇正確的執行個體類型和儲存組態，到安全地連線至 Neptune 叢集、載入資料和監控效能。本節涵蓋的關鍵領域如下：
+ 執行個體類型： 文件概述了 Neptune 可用的各種執行個體類型，以及其規格和考量事項，以協助您為工作負載選擇最適合的選項。
+ 儲存類型：它也涵蓋 Neptune 支援的不同儲存類型，以及如何選擇正確儲存組態的指引。
+ 叢集建立： 文件提供建立新 Neptune 叢集的step-by-step說明，包括如何設定所需的 VPC 設定。
+ 連線和安全性：涵蓋如何安全地連線至 Neptune 叢集、設定 VPC 存取，以及設定必要的安全措施來保護您的資料。
+ 資料載入： 文件提供將資料載入 Neptune 叢集的指引，包括使用各種工具和 APIs 大量載入和串流資料的選項。
+ 監控和故障診斷：它還包含監控 Neptune 環境、存取日誌以及對操作期間可能發生的常見問題進行故障診斷的相關資訊。

**注意**  
如需 AWS 圖形資料庫參考架構和參考部署架構，請參閱 [Amazon Neptune 資源](https://aws.amazon.com/neptune/developer-resources/)。這些資源可協助您了解所選的圖形資料模型及查詢語言，加速您的部署過程。

# 選擇 Amazon Neptune 的執行個體類型
<a name="instance-types"></a>

Amazon Neptune 提供許多不同的執行個體大小和系列，提供適合於不同圖形工作負載的不同功能。本節旨在協助您選擇符合需求的最佳執行個體類型。

如需這些系列中每個執行個體類型的定價，請參閱 [Neptune 定價頁面](https://aws.amazon.com/neptune/pricing/)。

## 執行個體資源配置的概觀
<a name="instance-resources"></a>

Neptune 中使用的每個 Amazon EC2 執行個體類型和大小都會提供定義的運算 (vCPU) 和系統記憶體數量。Neptune 的主要儲存體位於叢集中的資料庫執行個體外部，可讓運算和儲存容量彼此獨立擴展。

本節專注於運算資源的擴展方式，以及各種不同執行個體系列之間的差異。

在所有執行個體系列中，都會配置 vCPU 資源以支援每個 vCPU 兩 (2) 個查詢執行執行緒。此支援是由執行個體大小決定。確定給定 Neptune 資料庫執行個體的適當大小時，您需要考慮應用程式可能的並行性，以及查詢的平均延遲。您可以按照以下方式估計所需的 vCPU 數目，其中延遲是以平均查詢延遲來測量 (以秒為單位)，而並行性是以每秒的目標查詢數目來測量：

```
vCPUs = (latency x concurrency) / 2
```

**注意**  
使用 DFE 查詢引擎的 SPARQL 查詢、OpenCypher 查詢和 Gramlin 讀取查詢，可以在某些情況下每個查詢使用多個執行緒。在最初調整資料庫叢集的大小時，請先假設每個查詢每次執行都會取用單一執行緒，並且如果您觀察到有背壓進入查詢佇列，則會縱向擴展。這可以使用 `/gremlin/status`、`/oc/status` 或 `/sparql/status` API 觀察到此情況，也可以使用 `MainRequestsPendingRequestsQueue` CloudWatch 指標來觀察。

每個執行個體上的系統記憶體分為兩個主要配置：緩衝集區快取和查詢執行緒記憶體。

執行個體中約有三分之二的可用記憶體會配置給緩衝集區快取。緩衝集區快取用來快取圖形的最近使用元件，以便重複存取這些元件的查詢可以進行更快的存取。具有較大系統記憶體數量的執行個體擁有較大的緩衝集區快取，可在本機儲存更多圖形。使用者可以透過監控 CloudWatch 中可用的緩衝區快取命中和遺漏指標，來調校適當的緩衝集區快取數量。

如果快取命中率始終在一段時間內掉至 99.9% 以下，您可能會想要增加執行個體的大小。這表明緩衝集區不夠大，而且引擎必須頻繁地從基礎儲存磁碟區擷取資料。

剩餘的三分之一系統記憶體會平均分佈在查詢執行緒之間，還有一些記憶體留給作業系統和小型動態集區，供執行緒視需要使用。每個執行緒可用的記憶體會從一個執行個體大小略為增加到下一個執行個體大小，直到 `8xl` 執行個體類型，此大小會使每個執行緒配置的記憶體達到上限。

新增更多執行緒記憶體的時機，就是您遇到 `OutOfMemoryException` (OOM)。當一個執行緒需要超過配置給它的記憶體上限時，就會發生 OOM 例外狀況 (這與整個執行個體耗盡記憶體不同)。

## `t3` 和 `t4g` 執行個體類型
<a name="instance-type-t3-t4g"></a>

執行個體的 `t3` 和 `t4g` 系列提供低成本選項，用於開始使用圖形資料庫，也可用於初始開發和測試。這些執行個體符合 Neptune [免費方案優惠](https://aws.amazon.com/neptune/free-trial/)的資格，可讓新客戶在獨立 AWS 帳戶中使用的前 750 個執行個體小時內免費使用 Neptune，或在 Organization AWS with Consolidated Billing （付款人帳戶） 下彙總。

`t3` 和 `t4g` 執行個體僅以中型組態 ( `t3.medium` 和 `t4g.medium`) 提供。

它們不適用於生產環境。

因為這些執行個體具有的資源非常有限，所以不建議用於測試查詢執行時間或整體資料庫效能。若要評估查詢效能，請升級至其他執行個體系列之一。

## 執行個體類型的 `r4` 系列
<a name="instance-type-r4"></a>

*已棄用* – `r4` 系列是在 Neptune 於 2018 年推出時提供的，但現在有較新的執行個體類型可提供更好的價格/效能。從引擎 [1.1.0.0](engine-releases-1.1.0.0.md) 版開始，Neptune 不再支援 `r4` 執行個體類型。

## 執行個體類型的 `r5` 系列
<a name="instance-type-r5"></a>

`r5` 系列包含記憶體優化執行個體類型，適用於大多數圖形使用案例。`r5` 系列包含從 `r5.large` 最高可至 `r5.24xlarge` 的執行個體。隨著大小的增加，它們會以線性方式擴展運算效能。例如，`r5.xlarge` (4 個 vCPU 和 32GiB 記憶體) 具有的 vCPU 和記憶體是 `r5.large` (2 個 vCPU 和 16GiB 記憶體) 的兩倍，而 `r5.2xlarge` (8 個 vCPU 和 64GiB 記憶體) 具有的 vCPU 和記憶體是 `r5.xlarge` 的兩倍 您可以預期查詢效能會隨著運算容量直接最高擴展至 `r5.12xlarge` 執行個體類型。

`r5` 執行個體系列具有雙插槽 Intel CPU 架構。`r5.12xlarge` 和較小的類型會使用單插槽和該單插槽處理器所擁有的系統記憶體。`r5.16xlarge` 和 `r5.24xlarge` 類型會使用這兩個插槽和可用記憶體。因為雙插槽架構中的兩個實體處理器之間需要一些記憶體管理負荷，所以從 `r5.12xlarge` 擴展到 `r5.16xlarge` 或 `r5.24xlarge` 執行個體類型的效能提升並不像您以較小的大小縱向擴展那樣呈線性提升。

## 執行個體類型的 `r5d` 系列
<a name="instance-type-r5d"></a>

Neptune 具有[查詢快取功能](feature-overview-lookup-cache.md)，可以用來改善需要擷取和傳回大量屬性值和常值之查詢的效能。此功能主要是由需要使用查詢傳回許多屬性的客戶使用。查詢快取會本機擷取這些屬性值，而不是在 Neptune 索引儲存區中反覆查詢每個屬性值，藉此提升這些查詢的效能。

查詢快取是使用 `r5d` 執行個體類型上 NVMe 連接的 EBS 磁碟區來實作。它是使用叢集的參數群組來啟用。從 Neptune 索引儲存區擷取資料時，會在此 NVMe 磁碟區內快取屬性值和 RDF 常值。

如果您不需要查詢快取功能，請使用標準 `r5` 執行個體類型，而非 `r5d`，以避免更高成本的 `r5d`。

`r5d` 系列具有與 `r5` 系列大小相同的執行個體類型 (從 `r5d.large` 到 `r5d.24xlarge`)。

## 執行個體類型的 `r6g` 系列
<a name="instance-type-r6g"></a>

AWS 已開發自己的 ARM 型處理器，稱為 [Graviton](https://aws.amazon.com/ec2/graviton/)，可提供比 Intel 和 AMD 同等產品更好的價格/效能。`r6g` 系列使用 Graviton2 處理器。在我們的測試中，Graviton2 處理器可為 OLTP 樣式 (受限) 圖形查詢提供 10-20％ 的效能提升。不過，由於記憶體分頁效能的表現稍差，因此使用 Graviton2 處理器時，較大的 OLAP-ish 查詢效能可能會略低於 Intel 處理器的查詢效能。

另外務必要注意的是，`r6g` 系列具有單插槽架構，這意味著效能會隨著運算容量以線性方式從 `r6g.large` 擴展到 `r6g.16xlarge` (系列中最大的類型)。

## 執行個體類型的 `r6i` 系列
<a name="instance-type-r6i"></a>

[Amazon R6i 執行個體](https://aws.amazon.com/ec2/instance-types/r6i/)是由第三代 Intel Xeon 可擴展處理器 (名為 Ice Lake 的程式碼) 提供，非常適合於記憶體密集型工作負載。一般而言，與同類 R5 執行個體類型相比，每個 vCPU 可提升高達 15% 的運算價格效能，以及高達 20% 的記憶體頻寬。

## 執行個體類型的 `x2g` 系列
<a name="instance-type-x2g"></a>

當執行個體具有較大的緩衝集區快取時，某些圖形使用案例可以看到更好的效能。推出 `x2g` 系列是為了更好地支援這些使用案例。`x2g` 系列具有的記憶體與 vCPU 比率大於 `r5` 或 `r6g` 系列。`x2g` 執行個體也會使用 Graviton2 處理器，並具有許多與 `r6g` 執行個體類型相同的效能特性，以及較大的緩衝集區快取。

如果您使用的 `r5`或 `r6g`執行個體類型具有低 CPU 使用率和高緩衝集區快取遺漏率，請嘗試改用 `x2g` 系列。如此一來，您將取得所需的額外記憶體，而無需支付更多 CPU 容量。

## 執行個體類型的 `x2iezn` 系列
<a name="instance-type-x2iezn"></a>

`x2iezn` 系列提供採用 Intel Xeon 可擴充處理器且具有高頻率效能的記憶體最佳化執行個體。這些執行個體提供高memory-to-vCPU比率 （每個 vCPU 32 GiB)，非常適合記憶體密集型圖形工作負載，而這些工作負載受益於高單一執行緒效能。

主要功能包括高達 4.5 GHz 的全核心渦輪頻率，以及大小從 2xlarge 到 12xlarge 的可用性。

## 執行個體類型的 `x2iedn` 系列
<a name="instance-type-x2iedn"></a>

`x2iedn` 系列提供具有本機 NVMe SSD 儲存體的記憶體最佳化執行個體。這些執行個體結合了高記憶體容量 （每個 vCPU 32 GiB) 和快速本機儲存，因此非常適合受益於大型記憶體內快取和高效能本機磁碟快取的圖形工作負載。

這些執行個體採用第三代 Intel Xeon 可擴充處理器，提供 xlarge 到 32xlarge 的大小，並針對需要記憶體和儲存效能的大型圖形資料庫進行最佳化。

## 執行個體類型的 `r8g` 系列
<a name="instance-type-r8g"></a>

`r8g` 系列包含採用 AWS Graviton4 處理器的記憶體最佳化執行個體類型。相較於前幾代，這些執行個體提供了顯著的效能改善，使其非常適合記憶體密集型圖形工作負載。相較於 r7g 執行個體，r8g 執行個體可為圖形查詢提供大約 15-20% 更好的效能。

`r8g` 系列使用雙插槽平台。從 `r8g.large` 到 在單一通訊端`r8g.24xlarge`上執行的執行個體類型，這表示效能會隨著該範圍的運算容量線性擴展。`r8g.48xlarge` 使用兩個通訊端， 是系列中最大的執行個體類型；如同其他雙通訊端系列一樣，從 擴展`r8g.24xlarge`到 時，由於跨通訊端記憶體管理額外負荷，`r8g.48xlarge`效能可能不會完美線性。

`r8g` 系列的主要功能包括：
+ 採用 AWS Graviton4 ARM 型處理器
+ 相較於前幾代，每個 vCPU 的記憶體頻寬更高
+ OLTP 型 （受限） 圖形查詢和 OLAP 型分析工作負載的卓越價格/效能比率
+ 改善記憶體管理功能，有利於複雜的圖形周遊

`r8g` 系列非常適合需要高記憶體容量和一致效能的生產工作負載。它們對於具有高查詢並行需求的應用程式特別有效。

## 執行個體類型的 `r7g` 系列
<a name="instance-type-r7g"></a>

`r7g` 系列使用 AWS Graviton3 處理器，可提供比先前Graviton2-based執行個體更好的價格/效能。在測試中，相較於 r6g 執行個體，Graviton3 處理器可為 OLTP 樣式的圖形查詢提供 25-30% 更好的效能。

與 `r6g` 系列相同， `r7g` 系列具有單一插槽架構，這表示效能會隨著運算容量從 線性擴展`r7g.large`至 `r7g.16xlarge`（系列中最大的類型）。

`r7g` 系列的主要功能包括：
+ 採用 AWS Graviton3 ARM 型處理器
+ 相較於 r6g 改善記憶體分頁效能，同時受益於 OLTP 和 OLAP 工作負載
+ 增強的緩衝集區快取效率
+ 降低記憶體密集型操作的延遲

`r7g` 系列非常適合具有各種查詢模式的生產環境，對於受益於改善記憶體頻寬的工作負載特別有效。

## 執行個體類型的 `r7i` 系列
<a name="instance-type-r7i"></a>

`r7i` 系列採用第四代 Intel Xeon 可擴充處理器 （名為 Sapphire Rapids 的程式碼），可大幅改善 r6i 執行個體。相較於類似的 r6i 執行個體類型，這些執行個體可提供大約 15% 的運算價格/效能，以及每個 vCPU 高達 20% 的記憶體頻寬。

`r7i` 執行個體系列具有 2 個插槽的 Intel CPU 架構，類似於 `r5` 系列。`r7i.12xlarge` 和較小的類型會使用單插槽和該單插槽處理器所擁有的系統記憶體。`r7i.16xlarge` 和 `r7i.24xlarge` 類型會使用這兩個插槽和可用記憶體。因為雙插槽架構中的兩個實體處理器之間需要一些記憶體管理負荷，所以從 `r7i.12xlarge` 擴展到 `r7i.16xlarge` 或 `r7i.24xlarge` 執行個體類型的效能提升並不像您以較小的大小縱向擴展那樣呈線性提升。

`r7i` 系列的主要功能包括：
+ 採用第四代 Intel Xeon 可擴充處理器
+ 效能會隨著運算容量線性擴展，最高可達 r7i.12xlarge
+ 2 插槽架構中實體處理器之間的增強記憶體管理
+ 改善記憶體密集型圖形操作的效能

對於所有這些執行個體系列，您可以使用先前提到的相同公式來估計所需的 vCPUs 數量：

```
vCPUs = (latency x concurrency) / 2
```

其中延遲測量為平均查詢延遲，以秒為單位，並行測量為每秒的目標查詢數。

## `serverless` 執行個體類型
<a name="instance-type-serverless"></a>

[Neptune Serverless](neptune-serverless.md) 功能可以根據工作負載的資源需求動態擴展執行個體大小。Neptune Serverless 可讓您為資料庫叢集中的執行個體[設定運算容量的下限和上限](neptune-serverless-capacity-scaling.md) (以 Neptune 容量單位測量)，而不是計算您的應用程式需要多少 vCPU。具有不同使用率的工作負載可以使用無伺服器而不是佈建的執行個體進行成本最佳化

您可以在相同的資料庫叢集中同時設定佈建執行個體和無伺服器執行個體，以實現最佳的成本效能組態。

# 選擇 Amazon Neptune 的儲存類型
<a name="storage-types"></a>

Neptune 提供兩種不同定價模式的儲存類型：
+ **標準儲存** — 標準儲存體可為中至低 I/O 使用量的應用程式提供具經濟效益的資料庫儲存。
+ **I/O 最佳化儲存**   –   使用引擎 1.3.0.0 版提供的 I/O 最佳化儲存體，您只需為正在使用的儲存體和執行個體付費。儲存成本高於標準儲存體，而執行個體成本也高於標準執行個體。您無需為所使用的 I/O 付費。如果您的 I/O 使用量很高，佈建的 IOP 儲存可以大幅降低成本。

  I/O 最佳化儲存旨在以可預測的成本滿足 I/O 密集型圖形工作負載的需求。您每 30 天只能在 I/O 最佳化和標準儲存類型之間切換一次。

  如需 I/O 優化儲存的定價資訊，請參閱 [Neptune 定價頁面](https://aws.amazon.com/neptune/pricing/)。下節說明如何為 Neptune 資料庫叢集設定 I/O 優化儲存。

## 選擇適用於 Neptune 資料庫叢集的 I/O 優化儲存
<a name="provisioned-iops-storage"></a>

依預設，Neptune 資料庫叢集使用標準儲存體。您可以在建立資料庫叢集時在該叢集上啟用 I/O 優化儲存，如下所示：

以下範例說明如何在使用 AWS CLI建立叢集時啟用 I/O 優化儲存：

```
aws neptune create-db-cluster \  
  --db-cluster-identifier (an ID for the cluster) \
  --engine neptune \
  --engine-version (the Neptune engine version) \
  --storage-type iopt1
```

然後，您建立的任何執行個體都會自動啟用 I/O 優化儲存：

```
aws neptune create-db-instance \
  --db-cluster-identifier (the ID of the new cluster) \
  --db-instance-identifier (an ID for the new instance) \
  --engine neptune \
  --db-instance-class db.r5.large
```

您也可以修改現有的資料庫叢集，以啟用 I/O 優化儲存體，如下所示：

```
aws neptune modify-db-cluster \
  --db-cluster-identifier (the ID of a cluster without I/O–Optimized storage) \
  --storage-type iopt1 \
  --apply-immediately
```

您可以在啟用 I/O 優化儲存體的情況下將備份快照還原到資料庫叢集：

```
aws neptune restore-db-cluster-from-snapshot \
  --db-cluster-identifier (an ID for the restored cluster) \
  --snapshot-identifier (the ID of the snapshot to restore from) \
  --engine neptune \
  --engine-version (the Neptune engine version) \
  --storage-type iopt1
```

您可以使用任何 `describe-` 呼叫來判斷叢集是否正在使用 I/O 優化儲存體。如果已啟用 I/O 優化儲存，呼叫會傳回設定為 `iop1` 的儲存類型欄位。

# 建立 Amazon Neptune 叢集
<a name="get-started-create-cluster"></a>

建立新 Amazon Neptune 資料庫叢集的最簡單方法是使用 範本，該 CloudFormation 範本會為您建立所有必要的資源，而無需手動執行所有操作。 CloudFormation 範本會為您執行大部分的設定，包括建立 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體：

**使用 CloudFormation 範本啟動新的 Neptune 資料庫叢集**

1. 建立新的 IAM 使用者，其具有您使用 Neptune 資料庫叢集所需的許可，如 [IAM 使用者許可](manage-console-iam-user.md) 中所述。

1. 設定使用 CloudFormation 範本所需的其他先決條件，如 中所述[使用 設定 Amazon Neptune 的先決條件 AWS CloudFormation](get-started-prereqs.md)。

1. 叫用 CloudFormation 堆疊，如中所述[使用 建立 Amazon Neptune 叢集 AWS CloudFormation](get-started-cfn-create.md)。

您也可以建立跨越多個 的 [Neptune 全域資料庫](neptune-global-database.md) AWS 區域，啟用低延遲全域讀取，並在中斷影響整個 的罕見情況下提供快速復原 AWS 區域。

如需使用 手動建立 Amazon Neptune 叢集的詳細資訊 AWS 管理主控台，請參閱 [使用 啟動 Neptune 資料庫叢集 AWS 管理主控台](manage-console-launch-console.md)。

您也可以使用 CloudFormation 範本來建立 Lambda 函數，以搭配 Neptune 使用 （請參閱 [使用 CloudFormation 建立要在 Neptune 中使用的 Lambda 函數](get-started-cfn-lambda.md))。

如需有關在 Neptune 中管理叢集和執行個體的一般資訊，請參閱 [管理 Amazon Neptune 資料庫](manage-console.md)。

# 使用 設定 Amazon Neptune 的先決條件 AWS CloudFormation
<a name="get-started-prereqs"></a>

使用 CloudFormation 範本建立 Amazon Neptune 叢集之前，您需要具備下列項目：
+ 一個 Amazon EC2 金鑰對。
+ 使用 所需的許可 CloudFormation。

## 建立用於使用 啟動 Neptune 叢集的 Amazon EC2 金鑰對 CloudFormation
<a name="cfn-ec2-key-pair"></a>

若要使用 CloudFormation 範本啟動 Neptune 資料庫叢集，您必須在建立 CloudFormation 堆疊的區域中擁有可用的 Amazon EC2key對 （及其相關聯的 PEM 檔案）。

如果您需要建立金鑰對，請參閱《[Amazon EC2 使用者指南》中的使用 Amazon EC2 建立金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair)，或《Amazon EC2 使用者指南》中的[使用 Amazon EC2 建立金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair)。 Amazon EC2 

## 新增 IAM 政策以授予使用 CloudFormation 範本所需的許可
<a name="cfn-iam-perms"></a>

首先，您需要設定 IAM 使用者，讓其具有使用 Neptune 所需的許可，如 [建立具有 Neptune 許可的 IAM 使用者](manage-console-iam-user.md) 中所述。

然後，您需要將 AWS 受管政策 `AWSCloudFormationReadOnlyAccess`新增至該使用者。

最後，您需要建立下列客戶受管政策，並將其新增至該使用者：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/*",
            "Condition": {
                "StringEquals": {
                    "iam:passedToService": "rds.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::*:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "rds.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:ListTopics",
                "sns:ListSubscriptions",
                "sns:Publish"
            ],
            "Resource": "arn:aws:sns:*:111122223333:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:ListRetirableGrants",
                "kms:ListKeys",
                "kms:ListAliases",
                "kms:ListKeyPolicies"
            ],
            "Resource": "arn:aws:kms:*:111122223333:key/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "arn:aws:cloudwatch:*:111122223333:service/*-*",
            "Condition": {
                "StringLike": {
                    "cloudwatch:namespace": "AWS/Neptune"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeVpcs",
                "ec2:DescribeAccountAttributes",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcAttribute"
            ],
            "Resource": [
                "arn:aws:ec2:*:111122223333:vpc/*",
                "arn:aws:ec2:*:111122223333:subnet/*",
                "arn:aws:ec2:*:111122223333:security-group/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBCluster",
                "rds:CreateDBInstance",
                "rds:AddTagsToResource",
                "rds:ListTagsForResource",
                "rds:RemoveTagsFromResource",
                "rds:RemoveRoleFromDBCluster",
                "rds:ResetDBParameterGroup",
                "rds:CreateDBSubnetGroup",
                "rds:ModifyDBParameterGroup",
                "rds:DownloadDBLogFilePortion",
                "rds:CopyDBParameterGroup",
                "rds:AddRoleToDBCluster",
                "rds:ModifyDBInstance",
                "rds:ModifyDBClusterParameterGroup",
                "rds:ModifyDBClusterSnapshotAttribute",
                "rds:DeleteDBInstance",
                "rds:CopyDBClusterParameterGroup",
                "rds:CreateDBParameterGroup",
                "rds:DescribeDBSecurityGroups",
                "rds:DeleteDBSubnetGroup",
                "rds:DescribeValidDBInstanceModifications",
                "rds:ModifyDBCluster",
                "rds:CreateDBClusterSnapshot",
                "rds:DeleteDBParameterGroup",
                "rds:CreateDBClusterParameterGroup",
                "rds:RemoveTagsFromResource",
                "rds:PromoteReadReplicaDBCluster",
                "rds:RestoreDBClusterFromSnapshot",
                "rds:DescribeDBSubnetGroups",
                "rds:DescribePendingMaintenanceActions",
                "rds:DescribeDBParameterGroups",
                "rds:FailoverDBCluster",
                "rds:DescribeDBInstances",
                "rds:DescribeDBParameters",
                "rds:DeleteDBCluster",
                "rds:ResetDBClusterParameterGroup",
                "rds:RestoreDBClusterToPointInTime",
                "rds:DescribeDBClusterSnapshotAttributes",
                "rds:AddTagsToResource",
                "rds:DescribeDBClusterParameters",
                "rds:CopyDBClusterSnapshot",
                "rds:DescribeDBLogFiles",
                "rds:DeleteDBClusterSnapshot",
                "rds:ListTagsForResource",
                "rds:RebootDBInstance",
                "rds:DescribeDBClusterSnapshots",
                "rds:DeleteDBClusterParameterGroup",
                "rds:ApplyPendingMaintenanceAction",
                "rds:DescribeDBClusters",
                "rds:DescribeDBClusterParameterGroups",
                "rds:ModifyDBSubnetGroup"
            ],
            "Resource": [
                "arn:aws:rds:*:111122223333:cluster-snapshot:*",
                "arn:aws:rds:*:111122223333:cluster:*",
                "arn:aws:rds:*:111122223333:pg:*",
                "arn:aws:rds:*:111122223333:cluster-pg:*",
                "arn:aws:rds:*:111122223333:secgrp:*",
                "arn:aws:rds:*:111122223333:db:*",
                "arn:aws:rds:*:111122223333:subgrp:*"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine": [
                        "graphdb",
                        "neptune"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:GetLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Resource": [
                "arn:aws:logs:*:111122223333:log-group:*:log-stream:*",
                "arn:aws:logs:*:111122223333:log-group:*"
            ]
        }
    ]
}
```

------

**注意**  
刪除堆疊僅需下列許可：`iam:DeleteRole`、`iam:RemoveRoleFromInstanceProfile`、`iam:DeleteRolePolicy`、`iam:DeleteInstanceProfile`、及 `ec2:DeleteVpcEndpoints`。  
亦請注意 `ec2:*Vpc`授予 `ec2:DeleteVpc` 許可。

# 使用 建立 Amazon Neptune 叢集 AWS CloudFormation
<a name="get-started-cfn-create"></a>

您可以使用 CloudFormation 範本來設定 Neptune 資料庫叢集。

1. 若要在 CloudFormation 主控台上啟動 CloudFormation 堆疊，請選擇下表中的其中一個**啟動堆疊**按鈕。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/get-started-cfn-create.html)

1.  在 **Select Template** (選取範本) 頁面上，請選擇 **Next** (下一步)。

1. 在 **Specify Details (指定詳細資訊)** 頁面中，選擇 **EC2SSHKeyPairName** 的金鑰對。

   存取 EC2 執行個體需要用到這個金鑰對。確認您具有所選金鑰對的 PEM 檔案。

1. 選擇**下一步**。

1. 在**選項**頁面上，選擇**下一步**。

1. 在**檢閱**頁面上，選取第一個核取方塊以確認 CloudFormation 將建立 IAM 資源。選取第二個核取方塊，確認新堆疊 `CAPABILITY_AUTO_EXPAND`。
**注意**  
`CAPABILITY_AUTO_EXPAND` 明確確認在建立堆疊時，無需事先檢閱，即可擴充巨集。使用者通常會在處理過的範本中建立變更集，以便在實際建立堆疊之前，檢閱巨集所做的變更。如需詳細資訊，請參閱 CloudFormation [CreateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html) API。

   然後選擇 **Create (建立)**。

**注意**  
您也可以使用 CloudFormation 範本來[升級資料庫叢集的引擎版本。](cfn-engine-update.md)

# 設定 Amazon Neptune 資料庫叢集所在的 Amazon VPC
<a name="get-started-vpc"></a>

*只能*在 Amazon Virtual Private Cloud (Amazon VPC) 中建立的 Amazon Neptune 資料庫叢集。其端點可在該 VPC 內存取，而且如果啟用 [Neptune 公有端點](neptune-public-endpoints.md)，也可以在 VPC 外部和網際網路存取。

有許多不同的方法可以設定 VPC，取決於您想要存取資料庫叢集的方式。

設定 Neptune 資料庫叢集所在的 VPC 時，要謹記以下幾點：
+ 您的 VPC 必須至少要有兩個[子網路](#security-vpc-add-subnets)。這些子網路必須位於兩個不同的可用區域 (AZ)。透過將叢集執行個體分散到至少兩個 AZ，Neptune 可協助確保即使在不大可能發生可用區域失敗的情況下，您的資料庫叢集內始終都有執行個體可用。Neptune 資料庫叢集的叢集磁碟區一律橫跨三個可用區域，以提供資料遺失可能性極低的耐久性儲存體。
+ 每個子網路中的 CIDR 區塊必須大到足以提供在維護活動、容錯移轉和擴展期間 Neptune 可能需要的 IP 地址。
+ VPC 必須具有一個資料庫子網路群組，其中包含您已建立的子網路。Neptune 會選擇子網路群組中的其中一個子網路，以及該子網路內的 IP 地址，以與資料庫叢集內的資料庫執行個體建立關聯。然後，資料庫執行個體位於與子網路相同的可用區域中。
+ VPC 應該[已啟用 DNS](#get-started-vpc-dns) (DNS 主機名稱和 DNS 解析)。
+ 您的 VPC 必須具有 [VPC 安全群組](#security-vpc-security-group)，允許存取您的資料庫叢集。
+ Neptune VPC 中的租用應設定為**預設值**。

## 將子網路新增至 Neptune 資料庫叢集所在的 VPC
<a name="security-vpc-add-subnets"></a>

子網路是您的 VPC 中的 IP 位址範圍。您可以將 Neptune 資料庫叢集或 EC2 執行個體等資源啟動至特定子網路。建立子網時，您需為該子網指定 IPv4 CIDR 區塊，其即是 VPC CIDR 區塊的子網。每個子網路必須完全位於某一可用區域 (AZ) 內，而且不得跨越多個區域。藉由在單獨的可用區域中啟動執行個體，您可以保護應用程式免於在單一區域發生失敗。如需詳細資訊，請參閱 [VPC 子網路文件](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html)。

一個 Neptune 資料庫叢集需要至少兩個 VPC 子網路。

**將子網路新增至 VPC**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)：// 開啟 Amazon VPC 主控台。

1. 在導覽窗格中，選擇 **Subnets** (子網)。

1. 在 **VPC 儀表板**中選擇**子網路**，然後選擇**建立子網路**。

1. 在**建立子網路**頁面上，選擇要在其中建立子網路的 VPC。

1. 在**子網路設定**下，進行下列選擇：

   1. 在**子網路名稱**下輸入新子網路的名稱。

   1. 選擇子網路的可用區域 (AZ)，或保留**無偏好設定**中的選擇。

   1. 在 **IPv4 CIDR 區塊**下輸入子網路的 IP 地址區塊。

   1. 如有需要，請將標籤新增至子網路。

   1. 選擇 

1. 如果您想要同時建立另一個子網路，請選擇**新增子網路**。

1. 選擇**建立子網路**以建立新的子網路。

## 在 Amazon Neptune 中設定 VPC
<a name="security-vpc-add-subnet-group"></a>

建立子網路群組。

**建立 Neptune 子網路群組**

1. 登入 AWS 管理主控台，並在 [https://console.aws.amazon.com/neptune/home](https://console.aws.amazon.com/neptune/home)：// 開啟 Amazon Neptune 主控台。

1. 選擇 **Subnet groups** (子網路群組)，然後選擇 **Create DB Subnet Group** (建立資料庫子網路群組)。

1. 輸入新子網路群組的名稱和描述 (描述是必要的)。

1. 在 **VPC** 下，選擇您要在其中放置此子網路群組的 VPC。

1. 在**可用區域**下，選擇您要在其中放置此子網路群組的 AZ。

1. 在**子網路**下，將此可用區域中的一或多個子網路新增至此子網路群組。

1. 選擇**建立**來建立新的子網路群組。

## 使用 VPC 主控台建立安全群組
<a name="security-vpc-security-group"></a>

安全群組提供 VPC 中 Neptune 資料庫叢集的存取權。其作用就像相關聯資料庫叢集的防火牆，從執行個體層級控制傳入和傳出流量。根據預設，建立的資料庫執行個體具有防火牆和預設安全群組，可防止對其進行任何存取。若要啟用存取，您必須擁有具備其他規則的 VPC 安全群組。

下列程序說明如何新增自訂的 TCP 規則，指定 Amazon EC2 執行個體用來存取 Neptune 資料庫叢集的連接埠範圍和 IP 地址。您可以使用指派給 EC2 執行個體的 VPC 安全群組，而不是其 IP 地址。

**在主控台上建立 Neptune 的 VPC 安全群組**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)：// 開啟 Amazon VPC 主控台。

1. 在主控台的右上角，選擇您要為 Neptune 建立 VPC 安全群組 AWS 的區域。在該區域的 Amazon VPC 資源清單中，應該會顯示至少一個 VPC 和多個子網路。如果沒有，表示您在該區域中沒有預設 VPC。

1. 在導覽窗格中，於**安全**下，選擇**安全群組**。

1. 選擇**建立安全群組**。在**建立安全群組**視窗中，輸入**安全群組名稱**、**描述**，以及 Neptune 資料庫叢集將位於其中之 VPC 的識別符。

1. 為要連線至 Neptune 資料庫叢集之 Amazon EC2 執行個體的安全群組新增傳入規則：

   1. 在**傳入規則**區域中，選擇**新增規則**。

   1. 在**類型**清單中，保持選取**自訂 TCP**。

   1. 在**連接埠範圍**方塊中，輸入 **8182**，這是 Neptune 的預設連接埠值。

   1. 在**來源**下，輸入您要從中存取 Neptune 的 IP 地址範圍 (CIDR 值)，或選擇現有的安全群組名稱。

   1. 如果需要新增更多 IP 地址或不同的連接埠範圍，請再次選擇**新增規則**。

1. 在 [傳出規則] 區域中，您也可以在需要時新增一或多個傳出規則。

1. 完成後，請選擇 **Create security group (建立安全群組)**。

當建立新的 Neptune 資料庫叢集時，您可以使用此新的 VPC 安全群組。

如果您使用預設 VPC，系統已經為您建立橫跨所有 VPC 子網路的預設子網路群組。當您在 Neptune 主控台中選擇**建立資料庫**時，除非您指定不同的 VPC，否則會使用預設 VPC。

## 確定您在 VPC 中具有 DNS 支援
<a name="get-started-vpc-dns"></a>

網域名稱系統 (DNS) 是一種在網際網路上用於解析為對應 IP 地址的標準名稱。DNS 主機名稱為獨特的電腦名稱並由主機名稱和網域名稱組成。DNS 伺服器會將 DNS 主機名稱解析為對應的 IP 地址。

請檢查以確定 VPC 中已同時啟用 DNS 主機名稱和 DNS 解析。VPC 網路屬性 `enableDnsHostnames` 和 `enableDnsSupport` 必須設定為 `true`. 要查看和修改這些屬性，請移至位於 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 VPC 主控台。

如需詳細資訊，請參閱[以 VPC 使用 DNS](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。

**注意**  
如果您使用的是 Route 53，請確認您的組態不會覆寫 VPC 中的 DNS 網路屬性。

# 連線至 Amazon Neptune 叢集
<a name="get-started-connecting"></a>

建立 Neptune 叢集之後，您可以設定連線方法來存取它。

## 設定 `curl` 或 awscurl 以與 Neptune 端點通訊
<a name="get-started-access-graph-curl"></a>

如本文件中的許多範例所示，具有將查詢提交至 Neptune 資料庫叢集的命令列工具非常方便。[curl](https://curl.haxx.se/) 命令列工具是在未啟用 IAM 身分驗證時與 Neptune 端點通訊的絕佳選項。從 7.75.0 開始的版本支援在啟用 IAM 身分驗證時簽署請求的 `--aws-sigv4` 選項。

對於已啟用 IAM 身分驗證的端點**，您還可以使用 [awscurl](https://github.com/okigan/awscurl)，其會使用與 `curl` 幾乎完全相同的語法，但支援簽署 IAM 身分驗證所需的請求。由於 IAM 身分驗證提供了新增的安全性，因此啟用它通常是個好主意。

 如需如何使用 `curl` (`awscurl`) 的相關資訊，請參閱 [curl man 頁面](https://curl.haxx.se/docs/manpage.html)和 *[Everything curl](https://ec.haxx.se/)* 一書。

若要使用 Neptune 需要的 HTTPS 進行連線，`curl` 需要存取適當的憑證。只要 `curl` 可以找到適當的憑證，它處理 HTTPS 連線的方式就跟 HTTP 連線一樣，無需額外參數。`awscurl` 也是一樣。此文件的範例是以該案例為基礎。

若要了解如何取得這類憑證，以及如何將它們正確格式化為 `curl` 可以使用的憑證授權機構 (CA) 憑證存放區，請參閱 `curl` 文件中的 [SSL 憑證驗證](https://curl.haxx.se/docs/sslcerts.html)。

然後，您可以使用 `CURL_CA_BUNDLE` 環境變數來指定此 CA 憑證存放區的位置。在 Windows 上，`curl` 會自動在名為 `curl-ca-bundle.crt` 的檔案中尋找它。它會先在和 `curl.exe` 相同的目錄中尋找，然後再尋找路徑的其他位置。如需詳細資訊，請參閱 [SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html)。

## 連線至 Neptune 資料庫叢集的不同方式
<a name="get-started-connect-ways"></a>

*只能*在 Amazon Virtual Private Cloud (Amazon VPC) 中建立的 Amazon Neptune 資料庫叢集。除非您為資料庫叢集啟用和設定 [Neptune 公有端點](neptune-public-endpoints.md)，否則其端點只能在該 VPC 內存取。

有數種不同的方法，可在其 VPC 中設定對 Neptune 資料庫叢集的存取。
+ [從同一 VPC 中的 Amazon EC2 執行個體連線](get-started-connect-ec2-same-vpc.md)
+ [從另一個 VPC 中的 Amazon EC2 執行個體連線](get-started-connect-ec2-other-vpc.md)
+ [從私有網路連線](get-started-connect-private-net.md)
+ [從公有端點連線](neptune-public-endpoints.md)

# 將 Amazon EC2 執行個體連接到相同 VPC 中的 Amazon Neptune 叢集
<a name="get-started-connect-ec2-same-vpc"></a>

連線至 Neptune 資料庫的最常見方法之一，就是從與 Neptune 資料庫叢集相同的 VPC 中的 Amazon EC2 執行個體連線。例如，EC2 執行個體可能正在執行與網際網路連線的 Web 伺服器。在此情況下，只有 EC2 執行個體才能存取 Neptune 資料庫叢集，而網際網路只能存取 EC2 執行個體：

![\[從相一 VPC 中的 EC2 執行個體存取 Neptune 叢集的圖表。\]](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/images/VPC-connection-01.png)


若要啟用此組態，您必須設定正確的 VPC 安全群組和子網路群組。Web 伺服器是在公有子網路中託管，以便它可以連線公有網際網路，而您的 Neptune 叢集執行個體是在私有子網路中託管，以確保其安全。請參閱 [設定 Amazon Neptune 資料庫叢集所在的 Amazon VPC](get-started-vpc.md)。

為了讓 Amazon EC2 執行個體連線至您的 Neptune 端點 (例如連接埠 `8182`)，您需要設定安全群組來執行此動作。例如，如果您的 Amazon EC2 執行個體使用名為 `db-sg1` 的安全群組，您需要建立另一個 Amazon EC2 安全群組 (假設是 `ec2-sg1`)，其中具有連接埠 `8182` 的傳入規則，以及具有 `ec2-sg1` 作為其來源。然後，將 `db-sg1` 新增至您的 Neptune 叢集以允許連線。

在建立 Amazon EC2 執行個體之後，您可以使用 SSH 登入該執行個體，然後連線至您的 Neptune 資料庫叢集。如需使用 SSH 連線至 EC2 執行個體的資訊，請參閱《*Amazon EC2 使用者指南*》中的[連線至 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)。

如果您使用 Linux 或 macOS 命令列連線到 EC2 執行個體，您可以從 CloudFormation 堆疊的**輸出**區段中的 **SSHAccess** 項目貼上 SSH 命令。您必須有目前目錄的 PEM 檔案，而且此 PEM 檔案許可必須設定為 400 (`chmod 400 keypair.pem`)。

**建立含私有和公有子網路的 VPC**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)：// 開啟 Amazon VPC 主控台。

1. 在 的右上角 AWS 管理主控台，選擇要在其中建立 VPC 的區域。

1. 在 **VPC 儀表板**中，選擇**啟動 VPC 精靈**。

1. 完成**建立 VPC** 頁面的 **VPC 設定** 區域：

   1. 在 **Resources to create** (建立資源) 下，選擇 **VPC, subnets, etc.** (VPC、子網路等)。

   1. 保持預設名稱標籤不變，或輸入您選擇的名稱，或取消勾選**自動產生**核取方塊以停用產生名稱標籤。

   1. 將 IPv4 CIDR 區塊值保留為 `10.0.0.0/16`。

   1. 將 IPv6 CIDR 區塊值保留為**沒有 IPv6 CIDR 區塊**。

   1. 將**租用**保留為**預設值**。

   1. 將**可用區域 (AZ)** 的數目保留為 **2**。

   1. 除非您需要一或多個 NAT 閘道，否則將 **NAT 閘道 (\$1)** 保留為**無**。

   1. 除非您要使用 Amazon S3，否則將 **VPC 端點**設定為**無**。

   1. 應該同時勾選**啟用 DNS 主機名稱**和**啟用 DNS 解析**。

1. 選擇**建立 VPC**。

# 將 Amazon EC2 執行個體連接到不同 VPC 中的 Amazon Neptune 叢集
<a name="get-started-connect-ec2-other-vpc"></a>

Amazon Neptune 資料庫叢集*只能在* Amazon Virtual Private Cloud (Amazon VPC) 中建立，而且其端點可在該 VPC 內存取，通常是從在該 VPC 中執行的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體存取。或者，您可以使用公有端點來存取。如需公有端點的詳細資訊，請參閱 [Neptune 公有端點](neptune-public-endpoints.md)。

當您的資料庫叢集與您用來存取它的 EC2 執行個體不在相同 VPC 中時，您可以使用 [對等互連](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)來進行連線。

![\[從不同 VPC 存取 Neptune 叢集的圖表。\]](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/images/VPC-connection-02.png)


VPC 對等互連連線是兩個 VPC 之間的聯網連線，其會以私有方式在它們之間路由流量，以便任一 VPC 中的執行個體可以如同它們在同一個網路內進行通訊。您可以在帳戶中VPCs、帳戶中 AWS 的 VPC 與另一個帳戶中的 VPC AWS ，或不同 AWS 區域中的 VPC 之間建立 VPC 對等互連。

AWS 使用 VPC 的現有基礎設施來建立 VPC 對等互連。它既不是閘道，也不是 AWS Site-to-Site連接，也不依賴單獨的實體硬體。它不會有通訊的單一故障點或頻寬瓶頸問題。

如需如何使用 VPC 對等互連的詳細資訊，請參閱 [Amazon VPC 對等互連指南](https://docs.aws.amazon.com/vpc/latest/peering/)。

# 透過私有網路連線至 Amazon Neptune 叢集
<a name="get-started-connect-private-net"></a>

您可以使用兩種不同的方式從私有網路存取 Neptune 資料庫叢集：
+ 使用 [AWS 站台對站台 VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 連線。
+ 使用 [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/) 連線。

上面連結具有這些連線方法以及如何設定它們的相關資訊。an AWS Site-to-Site 連線的組態可能如下所示：

![\[從私有網路存取 Neptune 叢集的圖表。\]](http://docs.aws.amazon.com/zh_tw/neptune/latest/userguide/images/VPC-connection-04.png)


# Neptune 公有端點
<a name="neptune-public-endpoints"></a>

## 概觀
<a name="neptune-public-endpoints-overview"></a>

Amazon Neptune 叢集通常部署在您的 VPC 內，並且只能從該 VPC 內存取。這需要設定 VPC 內的應用程式和開發環境，或使用代理服務連接到 VPC，這會增加設定時間和成本。

公有端點允許透過網際網路直接連線至 Neptune 來簡化此體驗，讓您更輕鬆地開始使用圖形資料庫，而無需專門的網路知識。

## 何時使用公有端點
<a name="neptune-public-endpoints-when-to-use"></a>

在下列案例中考慮使用公有端點：
+ 您想要在沒有複雜網路組態的情況下，在開發或測試環境中快速測試 Neptune
+ 您沒有專業的 AWS 聯網知識
+ 您應用程式的安全狀態不需要私有 VPC
+ 您需要從本機開發環境連線至 Neptune

## 安全考量
<a name="neptune-public-endpoints-security"></a>

使用公有端點時，請謹記下列安全性考量事項：
+ 啟用公有端點的叢集需要 IAM 身分驗證。
+ 對資料庫的存取是由其使用的安全群組所控制。
+ 您可以限制哪些 IP 地址可以連接到您的叢集。
+ 您可以使用 IAM 政策來控制誰可以建立或修改具有公有存取權的叢集。請參閱：[限制公有存取建立](#neptune-public-endpoints-restrict-access)

## 啟用公有端點
<a name="neptune-public-endpoints-enabling"></a>

根據預設，新的 Neptune 資料庫會在公有端點停用的情況下建立。建立或修改叢集時，您必須明確啟用公有存取。

Neptune 引擎版本 1.4.6.x 支援公有端點。您需要將現有叢集升級至至少此版本，才能使用此功能。

公有端點設定可在 Neptune 執行個體上使用，而非 Neptune 叢集。因此，Neptune 叢集可以存在一些具有公有端點的執行個體，而有些則不存在。不過，我們不建議使用這類設定。如需詳細資訊，請參閱：[公有端點的運作方式](#neptune-public-endpoints-how-they-work)

## 先決條件
<a name="neptune-public-endpoints-prerequisites"></a>

### Neptune 叢集上的 IAM 身分驗證設定
<a name="neptune-public-endpoints-iam-auth"></a>

在 Neptune 執行個體上啟用公有端點之前，請確定您的叢集支援 IAM 身分驗證。如果沒有，請使用下列命令將其啟用：

```
aws neptune modify-db-cluster \
  --region us-west-2 \
  --engine graphdb \
  --engine-version 1.4.6.x \
  --db-cluster-identifier neptune-public-endpoint \
  --enable-iam-database-authentication
```

### 網路設定
<a name="neptune-public-endpoints-network-settings"></a>

1. 確保您的 VPC 具有啟用公有路由的子網路 （子網路路由表中的網際網路閘道項目）。如果您在建立叢集時未提供`db-subnet-group-name`參數，則會選擇預設子網路群組來建立叢集。

1. 確定連接到叢集的安全群組允許允許允許 IP 範圍和允許連接埠的傳入流量。例如，如果您想要允許來自所有 IPs TCP 流量連線到連接埠 8182 上執行的 Neptune 執行個體，傳入規則應具有：

   1. 類型：所有 TCP

   1. Protocol (通訊協定)：TCP

   1. 連接埠範圍：8182

   1. CIDR 區塊：0.0.0.0/0

**注意**  
雖然您可以將 CIDR 區塊範圍設定為 0.0.0.0/0，但我們建議將此範圍減少為用戶端應用程式的特定 IP 範圍，以獲得更好的安全狀態。

## 使用公有端點建立新的執行個體
<a name="neptune-public-endpoints-creating-instance"></a>

您可以使用 AWS 管理主控台、 AWS CLI 或 AWS SDK，使用公有端點建立新的 Neptune 執行個體。

使用 AWS CLI：

```
aws neptune create-db-instance \
  --region us-west-2 \
  --engine graphdb \
  --engine-version 1.4.6.x \
  --db-cluster-identifier neptune-public-endpoint \
  --publicly-accessible
```

## 修改現有執行個體以進行公開存取
<a name="neptune-public-endpoints-modifying-instance"></a>

若要修改現有的 Neptune 執行個體以啟用公有存取：

```
aws neptune modify-db-instance \
  --region us-west-2 \
  --engine graphdb \
  --engine-version 1.4.6.x \
  --db-instance-identifier neptune-public-endpoint \
  --publicly-accessible
```

**注意**  
公有存取是在執行個體層級啟用，而非叢集層級。為了確保您的叢集一律可透過公有端點存取，叢集中的所有執行個體都必須啟用公有存取。

## 使用公有端點
<a name="neptune-public-endpoints-using"></a>

若要檢查您的資料庫是否可連線，請使用 CLI `NeptuneData` API AWS 檢查狀態：

```
aws neptunedata get-engine-status \
  --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
```

如果可以存取資料庫，回應如下：

```
{
    "status": "healthy",
    "startTime": "Sun Aug 10 06:54:15 UTC 2025",
    "dbEngineVersion": "1.4.6.0.R1",
    "role": "writer",
    "dfeQueryEngine": "viaQueryHint",
    "gremlin": {
        "version": "tinkerpop-3.7.1"
    },
    "sparql": {
        "version": "sparql-1.1"
    },
    "opencypher": {
        "version": "Neptune-9.0.20190305-1.0"
    },
    "labMode": {
        "ObjectIndex": "disabled",
        "ReadWriteConflictDetection": "enabled"
    },
    "features": {
        "SlowQueryLogs": "disabled",
        "InlineServerGeneratedEdgeId": "disabled",
        "ResultCache": {
            "status": "disabled"
        },
        "IAMAuthentication": "disabled",
        "Streams": "disabled",
        "AuditLog": "disabled"
    },
    "settings": {
        "StrictTimeoutValidation": "true",
        "clusterQueryTimeoutInMs": "120000",
        "SlowQueryLogsThreshold": "5000"
    }
}
```

## 如何查詢資料庫的範例
<a name="neptune-public-endpoints-examples"></a>

### AWS CLI
<a name="neptune-public-endpoints-aws-cli"></a>

```
aws neptunedata execute-open-cypher-query \
--open-cypher-query "MATCH (n) RETURN n LIMIT 10" \
--endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
```

### Python
<a name="neptune-public-endpoints-python"></a>

```
import boto3
import json
from botocore.config import Config

# Configuration - Replace with your actual Neptune cluster details
cluster_endpoint = "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com"
port = 8182
region = "my-region"

# Configure Neptune client
# This disables retries and sets the client timeout to infinite 
#     (relying on Neptune's query timeout)
endpoint_url = f"https://{cluster_endpoint}:{port}"
config = Config(
    region_name=region,
    retries={'max_attempts': 1},
    read_timeout=None
)

client = boto3.client("neptunedata", config=config, endpoint_url=endpoint_url)

cypher_query = "MATCH (n) RETURN n LIMIT 5"
try:
    response = client.execute_open_cypher_query(openCypherQuery=cypher_query)
    print("openCypher Results:")
    for item in response.get('results', []):
        print(f"  {item}")
except Exception as e:
    print(f"openCypher query failed: {e}")
```

### JavaScript
<a name="neptune-public-endpoints-javascript"></a>

```
import {
    NeptunedataClient,
    GetPropertygraphSummaryCommand
} from "@aws-sdk/client-neptunedata";
import { inspect } from "util";
import { NodeHttpHandler } from "@smithy/node-http-handler";

/**
 * Main execution function
 */
async function main() {
    // Configuration - Replace with your actual Neptune cluster details
    const clusterEndpoint = 'my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com';
    const port = 8182;
    const region = 'my-region';

    // Configure Neptune client
    // This disables retries and sets the client timeout to infinite 
    //     (relying on Neptune's query timeout)
    const endpoint = `https://${clusterEndpoint}:${port}`;
    const clientConfig = {
        endpoint: endpoint,
        sslEnabled: true,
        region: region,
        maxAttempts: 1,  // do not retry
        requestHandler: new NodeHttpHandler({
            requestTimeout: 0  // no client timeout
        })
    };

    const client = new NeptunedataClient(clientConfig);
    try {
        try {
            const command = new GetPropertygraphSummaryCommand({ mode: "basic" });
            const response = await client.send(command);
            console.log("Graph Summary:", inspect(response.payload, { depth: null }));
        } catch (error) {
            console.log("Property graph summary failed:", error.message);
        }    
    } catch (error) {
        console.error("Error in main execution:", error);
    }
}

// Run the main function
main().catch(console.error);
```

### Go
<a name="neptune-public-endpoints-go"></a>

```
package main
import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/neptunedata"
    "os"
    "encoding/json"
    "net/http"
)

func main() {    
    // Configuration - Replace with your actual Neptune cluster details
    clusterEndpoint := "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com"
    port := 8182
    region := "my-region"
    
    // Configure Neptune client
    // Configure HTTP client with no timeout
    //    (relying on Neptune's query timeout)
    endpoint := fmt.Sprintf("https://%s:%d", clusterEndpoint, port)
    // Load AWS SDK configuration
    sdkConfig, _ := config.LoadDefaultConfig(
        context.TODO(),
        config.WithRegion(region),
        config.WithHTTPClient(&http.Client{Timeout: 0}),
    )
    
    // Create Neptune client with custom endpoint
    client := neptunedata.NewFromConfig(sdkConfig, func(o *neptunedata.Options) {
        o.BaseEndpoint = aws.String(endpoint)
        o.Retryer = aws.NopRetryer{} // Do not retry calls if they fail
    })

    gremlinQuery := "g.addV('person').property('name','charlie').property(id,'charlie-1')"
    serializer := "application/vnd.gremlin-v1.0+json;types=false"
    
    gremlinInput := &neptunedata.ExecuteGremlinQueryInput{
        GremlinQuery: &gremlinQuery,
        Serializer:   &serializer,
    }
    gremlinResult, err := client.ExecuteGremlinQuery(context.TODO(), gremlinInput)
    if err != nil {
        fmt.Printf("Gremlin query failed: %v\n", err)
    } else {
        var resultMap map[string]interface{}
        err = gremlinResult.Result.UnmarshalSmithyDocument(&resultMap)
        if err != nil {
            fmt.Printf("Error unmarshaling Gremlin result: %v\n", err)
        } else {
            resultJSON, _ := json.MarshalIndent(resultMap, "", "  ")
            fmt.Printf("Gremlin Result: %s\n", string(resultJSON))
        }
    }
}
```

## 公有端點的運作方式
<a name="neptune-public-endpoints-how-they-work"></a>

當 Neptune 執行個體可公開存取時：
+ 其 DNS 端點會從資料庫叢集的 VPC 內解析為私有 IP 地址。
+ 它會從叢集的 VPC 外部解析為公有 IP 地址。
+ 存取是由指派給叢集的安全群組所控制。
+ 只有可公開存取的執行個體才能透過網際網路存取。

### 讀取器端點行為
<a name="neptune-public-endpoints-reader-behavior"></a>
+ 如果所有讀取器執行個體都可公開存取，讀取器端點一律會透過公有網際網路解析。
+ 如果只有某些讀取器執行個體可供公開存取，則只有在讀取器端點選取可公開存取的執行個體來提供讀取查詢時，讀取器端點才會公開解析。

### 叢集端點行為
<a name="neptune-public-endpoints-cluster-behavior"></a>
+ 資料庫叢集端點一律會解析為寫入器的執行個體端點。
+ 如果在寫入器執行個體上啟用公有端點，叢集端點將可公開存取，否則將無法公開存取。

### 叢集容錯移轉之後的行為
<a name="neptune-public-endpoints-failover-behavior"></a>
+ Neptune 叢集可以在不同的可公開存取設定上擁有執行個體。
+ 如果叢集具有公有寫入器和非公有讀取器，請發佈叢集容錯移轉，新的寫入器 （先前的讀取器） 會變成非公有，而新的讀取器 （先前的寫入器） 會變成公有。

## 網路組態需求
<a name="neptune-public-endpoints-network-requirements"></a>

若要讓公有端點正常運作：

1. Neptune 執行個體必須位於 VPC 內的公有子網路中。

1. 與這些子網路相關聯的路由表必須具有 0.0.0.0/0 的網際網路閘道路由。

1. 安全群組必須允許從您要授予存取權的公有 IP 地址或 CIDR 範圍進行存取。

## 限制建立公有存取
<a name="neptune-public-endpoints-restrict-access"></a>

您可以使用 IAM 政策來限制誰可以建立或修改具有公有存取權的 Neptune 叢集。下列範例政策拒絕建立具有公有存取權的 Neptune 執行個體：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "rds:CreateDBInstance",
        "rds:ModifyDBInstance",
        "rds:RestoreDBInstanceFromDBSnapshot",
        "rds:RestoreDBInstanceToPointInTime"
      ],
      "Resource": "*",
      "Condition": {
        "Bool": {
          "rds:PubliclyAccessible": true
        }
      }
    }
  ]
}
```

------

IAM `rds:PublicAccessEnabled` 條件金鑰的詳細資訊：[Amazon RDS Service 授權參考](https://docs.aws.amazon.com//service-authorization/latest/reference/list_amazonrds.html#amazonrds-rds_PubliclyAccessible)

## CloudFormation 支援
<a name="neptune-public-endpoints-cloudformation"></a>

您可以使用 在 CloudFormation 範本中指定 `PubliclyAccessible` 參數， CloudFormation 以啟用公有端點來啟動 Neptune 叢集。

## 與 Neptune 功能的相容性
<a name="neptune-public-endpoints-compatibility"></a>

啟用公有端點的叢集支援僅限 VPC 叢集支援的所有 Neptune 功能，包括：
+ Neptune 工作台
+ 全文搜尋整合
+ Neptune 串流
+ 自訂端點
+ Neptune Serverless
+ 圖形總管

## 定價
<a name="neptune-public-endpoints-pricing"></a>

除了標準 Neptune 定價之外，可免費使用公有端點。不過，透過公有 IP 從本機環境連線至 Neptune 可能會增加資料傳輸成本。

# 保護對 Amazon Neptune 叢集的存取
<a name="get-started-security"></a>

有多種方式可供您保護 Amazon Neptune 叢集。

## 使用 IAM 政策來限制對 Neptune 資料庫叢集的存取
<a name="get-started-security-iam-policies"></a>

若要控制誰可以在 Neptune 資料庫叢集和資料庫執行個體上執行 Neptune 管理動作，請使用 AWS Identity and Access Management (IAM)。

當您使用 IAM 帳戶存取 Neptune 主控台時，您必須先 AWS 管理主控台 使用您的 IAM 帳戶登入 ，才能開啟位於 [https://console.aws.amazon.com/neptune/home](https://console.aws.amazon.com/neptune/home)：// 的 Neptune 主控台。

當您 AWS 使用 IAM 登入資料連線至 時，您的 IAM 帳戶必須具有授予執行 Neptune 管理操作所需許可的 IAM 政策。如需詳細資訊，請參閱[使用不同種類的 IAM 政策來控制對 Neptune 的存取](security-iam-access-manage.md#iam-auth-policy)。

## 使用 VPC 安全群組限制對 Neptune 資料庫叢集的存取
<a name="get-started-security-groups"></a>

必須在 Amazon Virtual Private Cloud (Amazon VPC) 中建立 Neptune 資料庫叢集。若要控制哪些裝置和 EC2 執行個體可以開放對 VPC 中 Neptune 資料庫叢集之資料庫執行個體端點和連接埠的連線，您可以使用 VPC 安全群組。如需 VPCs 的詳細資訊，請參閱「[使用 VPC 主控台建立安全群組](get-started-vpc.md#security-vpc-security-group)」。

**注意**  
 若要連線至 Neptune 叢集，您必須公開叢集的資料庫連接埠 （預設為 8182)，以允許傳入和傳出規則的適當連線。

## 使用 IAM 身分驗證來限制對 Neptune 資料庫叢集的存取
<a name="get-started-security-iam-auth"></a>

如果您在 Neptune 資料庫叢集中啟用 AWS Identity and Access Management (IAM) 身分驗證，則必須先驗證存取資料庫叢集的任何人。如需設定 IAM 身分驗證的相關資訊，請參閱 [使用 驗證您的 Amazon Neptune 資料庫 AWS Identity and Access Management](iam-auth.md)。

如需使用臨時登入資料進行身分驗證的資訊，包括 AWS CLI AWS Lambda和 Amazon EC2 的範例，請參閱 [使用臨時登入資料連線至 Amazon Neptune](iam-auth-temporary-credentials.md)。

下列連結提供有關使用 IAM 身分驗證搭配個別查詢語言，來連線至 Neptune 的其他資訊：

**使用 Gremlin 搭配 IAM 身分驗證**
+ [使用 IAM 身分驗證搭配 Gremlin 主控台連線至 Amazon Neptune 資料庫](iam-auth-connecting-gremlin-console.md)
+ [使用 IAM 搭配 Gremlin Java 連線至 Amazon Neptune 資料庫](iam-auth-connecting-gremlin-java.md)
+ [使用 IAM 身分驗證搭配 Python 連線至 Amazon Neptune 資料庫](iam-auth-connecting-python.md)
**注意**  
此範例適用於 Gremlin 和 SPARQL。

**使用 openCypher 搭配 IAM 身分驗證**
+ [使用 IAM 身分驗證搭配 Gremlin 主控台連線至 Amazon Neptune 資料庫](iam-auth-connecting-gremlin-console.md)
+ [使用 IAM 搭配 Gremlin Java 連線至 Amazon Neptune 資料庫](iam-auth-connecting-gremlin-java.md)
+ [使用 IAM 身分驗證搭配 Python 連線至 Amazon Neptune 資料庫](iam-auth-connecting-python.md)
**注意**  
此範例適用於 Gremlin 和 SPARQL。

**使用 SPARQL 搭配 IAM 身分驗證**
+ [使用 IAM 身分驗證搭配 Java 和 SPARQL 連線至 Amazon Neptune 資料庫](iam-auth-connecting-sparql-java.md)
+ [使用 IAM 身分驗證搭配 Python 連線至 Amazon Neptune 資料庫](iam-auth-connecting-python.md)
**注意**  
此範例適用於 Gremlin 和 SPARQL。

# 在 Amazon Neptune 中存取圖形資料
<a name="get-started-access-graph"></a>

您可以在建立連線後與 Amazon Neptune 資料庫叢集互動。這包括載入資料、執行查詢，以及執行其他操作。大多數使用者會利用 `curl`或 `awscurl`命令列工具，有效地與 Neptune 資料庫叢集通訊。這些工具可讓您傳送請求、載入資料，並從圖形資料庫擷取結果，促進無縫資料管理和查詢功能。

## 設定 `curl` 以與 Neptune 端點通訊
<a name="get-started-access-graph-curl"></a>

如本文件中的許多範例所述，[curl](https://curl.haxx.se/) 命令列工具是可與 Neptune 端點通訊的便利選項。如需工具資訊，請參閱 [curl man 頁面](https://curl.haxx.se/docs/manpage.html)和 *[Everything curl](https://ec.haxx.se/)* 一書。

若要依我們的建議與 Neptune 在大部分區域的要求使用 HTTPS 連線，`curl` 需要存取適當的憑證。若要了解如何取得這些憑證，以及如何將它們正確格式化為 `curl` 可以使用的憑證授權機構 (CA) 憑證存放區，請參閱 `curl` 文件中的 [SSL 憑證驗證](https://curl.haxx.se/docs/sslcerts.html)。

然後，您可以使用 `CURL_CA_BUNDLE` 環境變數來指定此 CA 憑證存放區的位置。在 Windows 上，`curl` 會自動在名為 `curl-ca-bundle.crt` 的檔案中尋找它。它會先在和 `curl.exe` 相同的目錄中尋找，然後再尋找路徑的其他位置。如需詳細資訊，請參閱 [SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html)。

只要 `curl` 可以找到適當的憑證，它處理 HTTPS 連線的方式就跟 HTTP 連線一樣，無需額外參數。此文件的範例是以該案例為基礎。

## 使用查詢語言存取 Neptune 資料庫叢集中的圖形資料
<a name="get-started-access-graph-query-langs"></a>

一旦連線，您可以使用 Gremlin 和 OpenCypher 查詢語言，來建立和查詢屬性圖，或者使用 SPARQL 查詢語言，來建立和查詢包含 RDF 資料的圖形。

**Neptune 支援的圖形查詢語言**
+ [Gremlin](access-graph-gremlin.md) 是一種適用於屬性圖的圖形周遊語言。Grimlin 中的查詢是由離散步驟組成的周遊，每個步驟都沿著一個邊緣到一個節點。如需詳細資訊，請參閱 [Apache TinkerPop](https://tinkerpop.apache.org/docs/current/reference/) 的 Gremlin 文件。

  Gremlin 的 Neptune 實作與其他實作有一些不同，尤其是使用 Gremlin-Groovy 時 (以序列化的文字傳送的 Gremlin 查詢)。如需詳細資訊，請參閱[Amazon Neptune 中的 Gremlin 標準合規](access-graph-gremlin-differences.md)。
+ [OpenCypher](access-graph-opencypher.md) 是屬性圖的宣告式查詢語言，最初由 Neo4j 開發，然後在 2015 年成為開放原始碼，並在 Apache 2 開放原始碼授權下投入 [OpenCypher](http://www.opencypher.org/) 專案。其語法記載於 [Cypher 查詢語言參考第 9 版](https://s3.amazonaws.com/artifacts.opencypher.org/openCypher9.pdf)。
+ [SPARQL](access-graph-sparql.md) 是 [RDF](https://www.w3.org/2001/sw/wiki/RDF) 資料的宣告式查詢語言，以全球資訊網協會 (W3C) 制定的標準圖形模式配對為基礎，於 [SPARQL 1.1 概觀](https://www.w3.org/TR/sparql11-overview/)和 [SPARQL 1.1 查詢語言](https://www.w3.org/TR/sparql11-query/)規格中描述。

**注意**  
您可以使用 Gremlin 和 OpenCypher，但不使用 SPARQL，來存取 Neptune 屬性圖資料。同樣地，您只能使用 SPARQL，而不是 Gremlin 或 openCypher 存取 RDF 資料。

# 使用 Gremlin 存取 Amazon Neptune 中的圖形資料
<a name="get-started-graph-gremlin"></a>

您可使用 Gremlin 主控台在 REPL (read-eval-print loop) 環境中試驗 TinkerPop 圖表和查詢。

以下教學會逐步解說如何使用 Gremlin 主控台在 Neptune 圖形中新增頂點、邊緣、屬性及更多，反白 Neptune 特定 Gremlin 實作中的一些差異。

**注意**  
此範例假設您已完成下列各項：  
您已使用 SSH 連線到 Amazon EC2 執行個體。
您已建立 Neptune 叢集，如 [建立 Neptune 叢集](get-started-create-cluster.md) 中所詳述。
您已如[安裝 Gremlin 主控台](access-graph-gremlin-console.md)所述安裝 Gremlin 主控台。

**使用 Gremlin 主控台**

1. 將目錄變更為 Gremlin 主控台檔案解壓縮的資料夾。

   ```
   cd apache-tinkerpop-gremlin-console-3.7.2
   ```

1. 輸入下列命令以執行 Gremlin 主控台。

   ```
   bin/gremlin.sh
   ```

   您應該會看到下列輸出：

   ```
            \,,,/
            (o o)
   -----oOOo-(3)-oOOo-----
   plugin activated: tinkerpop.server
   plugin activated: tinkerpop.utilities
   plugin activated: tinkerpop.tinkergraph
   gremlin>
   ```

   您現在進入 `gremlin>` 提示。您會在這個提示下進入其餘的步驟。

1. 在 `gremlin>` 提示下，輸入以下命令以連線到 Neptune 資料庫執行個體。

   ```
   :remote connect tinkerpop.server conf/neptune-remote.yaml
   ```

1. 在 `gremlin>` 提示下，輸入以下內容以切換為遠端模式。這會傳送所有 Gremlin 查詢到遠端連線。

   ```
   :remote console
   ```

1. **新增頂點以及標籤和屬性。**

   ```
   g.addV('person').property('name', 'justin')
   ```

   頂點會獲指派一個 `string` ID，包含 GUID。所有頂點 ID 都是 Neptune 中的字串。

1. **新增頂點與自訂 ID。**

   ```
   g.addV('person').property(id, '1').property('name', 'martin')
   ```

   `id` 屬性不使用括號括住。這是頂點 ID 的關鍵字。此處的頂點 ID 是一個字串，其中有數字 `1`。

   正常屬性名稱必須包含在引號中。

1. **如果屬性不存在，請變更屬性或新增屬性。**

   ```
   g.V('1').property(single, 'name', 'marko')
   ```

   您在這裡變更前一個步驟頂點的 `name` 屬性。這會移除 `name` 屬性所有現有的值。

   如果您未指定 `single`，則會改為附加值到 `name` 屬性 (如果尚未這樣做)。

1. **新增屬性，但如果屬性已有值則附加屬性。**

   ```
   g.V('1').property('age', 29)
   ```

   Neptune 使用成組基數做為預設動作。

   此命令會新增 `age` 屬性以及值 `29`，但不會取代任何現有的值。

   如果 `age` 屬性已有值，這個命令會附加 `29` 到屬性。例如，如果 `age` 屬性原本是 `27`，新的值會是 `[ 27, 29 ]`。

1. **新增多個頂點。**

   ```
   g.addV('person').property(id, '2').property('name', 'vadas').property('age', 27).iterate()
   g.addV('software').property(id, '3').property('name', 'lop').property('lang', 'java').iterate()
   g.addV('person').property(id, '4').property('name', 'josh').property('age', 32).iterate()
   g.addV('software').property(id, '5').property('name', 'ripple').property('lang', 'java').iterate()
   g.addV('person').property(id, '6').property('name', 'peter').property('age', 35)
   ```

   您可以同時將多個陳述式傳送至 Neptune。

   陳述式可以使用換行符號 (`'\n'`)、空格 (`' '`)、分號 (`'; '`) 來隔開，也可以不使用任何分隔符號 (例如：`g.addV(‘person’).iterate()g.V()` 為有效)。
**注意**  
Gremlin 主控台會在每個新行 (`'\n'`) 處傳送個別命令，所以在這種情況下每個都是單獨的交易。此範例將所有命令放在不同的行以方便閱讀。移除新行 (`'\n'`) 字元可透過 Gremlin 主控台將其做為單一命令傳送。

   最後一個陳述式除外的所有陳述式都必須結束在終止步驟，例如 `.next()` 或 `.iterate()`，否則不會執行。Gremlin 主控台不需要這些終止步驟。每當您不需要序列化結果時就使用 `.iterate`。

   一起傳送的所有陳述式會包含在單一交易中，一起成功或一起失敗。

1. **新增邊緣。**

   ```
   g.V('1').addE('knows').to(__.V('2')).property('weight', 0.5).iterate()
   g.addE('knows').from(__.V('1')).to(__.V('4')).property('weight', 1.0)
   ```

   以下是新增邊緣的兩個不同方式。

1. **新增其他現代圖形。**

   ```
   g.V('1').addE('created').to(__.V('3')).property('weight', 0.4).iterate()
   g.V('4').addE('created').to(__.V('5')).property('weight', 1.0).iterate()
   g.V('4').addE('knows').to(__.V('3')).property('weight', 0.4).iterate()
   g.V('6').addE('created').to(__.V('3')).property('weight', 0.2)
   ```

1. **刪除頂點。**

   ```
   g.V().has('name', 'justin').drop()
   ```

   移除具有 `name` 屬性的頂點等於 `justin`。
**重要**  
*停在此處，您擁有完整的 Apache TinkerPop 現代圖形。TinkerPop 文件的[周遊一節](https://tinkerpop.apache.org/docs/current/reference/#graph-traversal-steps)中的範例使用現代圖形。*

1. **執行周遊。**

   ```
   g.V().hasLabel('person')
   ```

   傳回所有 `person` 頂點。

1. **使用值 (valueMap ()) 執行周遊。**

   ```
   g.V().has('name', 'marko').out('knows').valueMap()
   ```

   傳回 `marko`「知道」的所有頂點的索引鍵值組。

1. **指定多個標籤。**

   ```
   g.addV("Label1::Label2::Label3") 
   ```

   Neptune 支援頂點的多個標籤。當您建立標籤時，您可以指定多重標籤並用 `::` 分隔。

   此範例新增有三種不同標籤的頂點。

   `hasLabel` 步驟將比對此頂點和這三個標籤：`hasLabel("Label1")`、`hasLabel("Label2")` 和 `hasLabel("Label3")`。

   `::` 分隔符號僅針對本用途保留。

   您不能在 `hasLabel` 步驟中指定多重標籤。例如，`hasLabel("Label1::Label2")` 不符合任何內容。

1. **指定時間/日期**。

   ```
   g.V().property(single, 'lastUpdate', datetime('2018-01-01T00:00:00'))
   ```

   Neptune 不支援 Java 日期。請改用 `datetime()` 函數。`datetime()` 接受 ISO8061 相容 `datetime` 字串。

   支援格式如下：`YYYY-MM-DD, YYYY-MM-DDTHH:mm`、`YYYY-MM-DDTHH:mm:SS` 和 `YYYY-MM-DDTHH:mm:SSZ`

1. **刪除頂點、屬性或邊緣。**

   ```
   g.V().hasLabel('person').properties('age').drop().iterate()
   g.V('1').drop().iterate()
   g.V().outE().hasLabel('created').drop()
   ```

   以下是數個 drop 範例。
**注意**  
 `.next()` 步驟不適用於 `.drop()`。請改用 `.iterate()`。

1. 完成後，輸入以下內容以退出 Gremlin 主控台。

   ```
   :exit
   ```

**注意**  
使用分號 (`;`) 或換行符號字元 (`\n`) 來分隔每個陳述式。  
最終周遊之前的每個周遊節尾必須為 `iterate()`，才能執行。但只有最後的周遊資料會傳回。

# 使用 openCypher 存取 Amazon Neptune 中的圖形資料
<a name="get-started-graph-opencypher"></a>

若要開始使用 OpenCypher，請參閱 [openCypher](access-graph-opencypher.md)，或使用 GitHub [Neptune 圖形筆記本存放庫](https://github.com/aws/graph-notebook/tree/main/src/graph_notebook/notebooks)中的 OpenCypher 筆記本。

# 使用 SPARQL 存取 Amazon Neptune 中的圖形資料
<a name="get-started-graph-sparql"></a>

SPARQL 是一種資源描述架構 (RDF) 的查詢語言，其是專為網路設計的圖形資料格式。Amazon Neptune 與 SPARQL 1.1 相容。這表示您可以連線到 Neptune 資料庫執行個體，並使用 [SPARQL 1.1 查詢語言](https://www.w3.org/TR/sparql11-query/)規格所述的查詢語言來查詢圖形。

 SPARQL 的查詢包含 `SELECT` 子句，用於指定要傳回的變數，和 `WHERE` 子句，用於指定要比對圖形中的哪些資料。如果您不熟悉 SPARQL 查詢，請參閱 [SPARQL 1.1 查詢語言](https://www.w3.org/TR/sparql11-query/#WritingSimpleQueries)中的[編寫簡易查詢](https://www.w3.org/TR/sparql11-query/)。

對 Neptune 資料庫執行個體進行 SPARQL 查詢時所用的 HTTP 端點為 `https://your-neptune-endpoint:port/sparql`。

**若要連接到 SPARQL**

1. 您可以從 CloudFormation 堆疊的**輸出**區段中的 **SparqlEndpoint** 項目取得 Neptune 叢集的 SPARQL 端點。

1. 輸入下列命令，以使用 HTTP `POST` 和 **curl** 命令提交 SPARQL **`UPDATE`**。

   ```
   curl -X POST --data-binary 'update=INSERT DATA { <https://test.com/s> <https://test.com/p> <https://test.com/o> . }' https://your-neptune-endpoint:port/sparql
   ```

   上述範例插入以下三元組到 SPARQL 預設圖形：`<https://test.com/s> <https://test.com/p> <https://test.com/o>`

1. 輸入下列命令，以使用 HTTP `POST` 和 **curl** 命令提交 SPARQL **`QUERY`**。

   ```
   curl -X POST --data-binary 'query=select ?s ?p ?o where {?s ?p ?o} limit 10' https://your-neptune-endpoint:port/sparql
   ```

   先前範例使用 `?s ?p ?o` 查詢和限制 10，以傳回圖形中的最多 10 個三元組 (subject-predicate-object)。若要查詢其他項目，請將查詢換成其他 SPARQL 查詢。
**注意**  
`SELECT` 和 `ASK` 查詢回應的預設 MIME 類型為 `application/sparql-results+json`。  
`CONSTRUCT` 和 `DESCRIBE` 查詢回應的預設 MIME 類型為 `application/n-quads`。  
如需所有可用 MIME 類型的清單，請參閱 [SPARQL HTTP API](sparql-api-reference.md)。

# 將資料載入 Amazon Neptune 叢集
<a name="get-started-loading"></a>

Amazon Neptune 提供直接從外部檔案將資料載入 Neptune 資料庫執行個體的程序。您可以使用此程序，而非執行大量 `INSERT` 陳述式、`addV` 和 `addE` 步驟，或其他 API 呼叫。

以下是額外載入資訊的連結。
+ **載入資料的方法** – [將資料載入至 Amazon Neptune](load-data.md)
+ **大量載入器支援的資料格式** – [載入資料格式](bulk-load-tutorial-format.md)
+ **載入範例** – [範例：將資料載入至 Neptune 資料庫執行個體](bulk-load-data.md)



# 監控 Amazon Neptune 叢集
<a name="get-started-monitoring"></a>

Amazon Neptune 支援下列監控方法。
+ **Amazon CloudWatch** – Amazon Neptune 會自動將指標傳送至 CloudWatch，同時支援 CloudWatch 警示。如需詳細資訊，請參閱[使用 Amazon CloudWatch 監控 Neptune](cloudwatch.md)。
+ **AWS CloudTrail** – Amazon Neptune 支援使用 CloudTrail 進行 API 記錄。如需詳細資訊，請參閱[使用 記錄 Amazon Neptune API 呼叫 AWS CloudTrail](cloudtrail.md)。
+ **標記** – 使用標籤將中繼資料新增到 Neptune 資源，並根據標籤追蹤使用情形。如需詳細資訊，請參閱[標記 Amazon Neptune 資源](tagging.md)。
+ **稽核日誌檔** – 使用 Neptune 主控台檢視、下載或監看資料庫日誌檔。如需詳細資訊，請參閱[使用稽核日誌搭配 Amazon Neptune 叢集](auditing.md)。
+ **執行個體狀態** – 檢查 Neptune 執行個體圖形資料庫引擎的運作狀態，了解已安裝的引擎版本，並使用[執行個體狀態 API](access-graph-status.md) 取得其他引擎狀態資訊。

# 對 Amazon Neptune 叢集進行故障診斷
<a name="get-started-troubleshooting"></a>

以下連結可能有助於解決 Amazon Neptune 的問題。
+ **最佳實務** – 如需常見問題的解決辦法和效能建議，請參閱 [最佳實務：發揮 Neptune 的最大功用](best-practices.md)。
+ **服務錯誤** – 如需管理 API 和圖形資料庫連線的問題清單，請參閱 [Neptune 服務錯誤](errors.md)。
+ **服務限制** – 如需 Neptune 限制的相關資訊，請參閱 [Amazon Neptune 限制](limits.md)。
+ **引擎版本** – 如需圖形引擎版本的相關資訊，包括版本備註，請參閱 [Amazon Neptune 的引擎版本](engine-releases.md)。
+ **支援論壇** – 若要加入 Neptune 的相關討論，請參閱 [Amazon Neptune 論壇](https://repost.aws/tags/TAxVAEdWg1SrS0lClUSX-m_Q?forumID=253)。
+ **定價** – 如需使用 Amazon Neptune 的成本相關資訊，請參閱 [Amazon Neptune 定價](https://aws.amazon.com/neptune/pricing/)。
+ **AWS 支援** – 如需專家的協助和指導，請參閱 [AWS 支援](https://aws.amazon.com/premiumsupport/)。