

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Neptune のツールとユーティリティ
<a name="tools"></a>

Amazon Neptune には、グラフの操作を簡素化および自動化できるツールとユーティリティが多数用意されています。これには次のものが含まれます。

**Amazon Neptune ツール**
+ **[GraphQL 用 Amazon Neptune ユーティリティ](tools-graphql.md)** - GraphQL 用 Amazon Neptune ユーティリティは、オープンソースの Node.js コマンドラインツールであり、Neptune プロパティグラフデータベース用の [GraphQL](https://graphql.org/) API の作成と管理に役立ちます。これは、可変数の入力パラメータを持ち、可変数のネストされたフィールドを返す GraphQL クエリ用の GraphQL リゾルバーをコードなしで作成する方法です。
+  **[Nodestream](tools-Nodestream.md)** – Nodestream は、データをグラフとして意味的にモデリングするためのフレームワークです。柔軟で拡張できるように設計されており、データの収集方法とグラフとしてのモデル化の方法を定義できます。パイプラインベースのアプローチを使用してデータの収集と処理の方法を定義し、スキーマが変更されたときにどのようにグラフを更新するかを定義できます。
+  **[Amazon Neptune MCP クエリサーバー](https://github.com/aws-samples/amazon-neptune-generative-ai-samples/blob/main/neptune-mcp-servers/neptune-query/README.md)**   – グラフクエリ (openCypher と Gremlin) を実行し、グラフスキーマを取得する機能を提供することで、Neptune データベースと Neptune Analytics の両方をサポートする Amazon Neptune 用の モデルコンテキストプロトコル (MCP) サーバー。
+  **[Amazon Neptune MCP メモリサーバー](https://github.com/aws-samples/amazon-neptune-generative-ai-samples/blob/main/neptune-mcp-servers/neptune-memory/README.md)**   – Amazon Neptune の モデルコンテキストプロトコル (MCP) サーバー。Amazon Neptune に対するナレッジグラフに保存されているエージェントにメモリを提供します。

# GraphQL 用 Amazon Neptune ユーティリティ
<a name="tools-graphql"></a>

[GraphQL](https://graphql.org/) 用 Amazon Neptune ユーティリティは、オープンソースの Node.js コマンドラインツールであり、Neptune プロパティグラフデータベース用の GraphQL API の作成と管理に役立ちます (まだ RDF データでは動作しません)。これは、可変数の入力パラメータを持ち、可変数のネストされたフィールドを返す GraphQL クエリ用の GraphQL リゾルバーをコードなしで作成する方法です。

[https://github.com/aws/amazon-neptune-for-graphql](https://github.com/aws/amazon-neptune-for-graphql) でオープンソースプロジェクトとしてリリースされました。

このユーティリティは NPM を使用して次のようにインストールできます (詳細については、「[インストールとセットアップ](tools-graphql-setup.md)」を参照してください)。

```
npm i @aws/neptune-for-graphql -g
```

このユーティリティは、ノード、エッジ、プロパティ、エッジカーディナリティなど、既存の Neptune プロパティグラフのグラフスキーマを検出できます。次に、GraphQL タイプをデータベースのノードとエッジにマップするために必要なディレクティブを含む GraphQL スキーマを生成し、リゾルバーコードを自動生成します。リゾルバーコードは、GraphQL クエリによって要求されたデータのみを返すことでレイテンシーを最小限に抑えるように設計されています。

既存の GraphQL スキーマと空の Neptune データベースから始めて、その GraphQL スキーマをデータベースにロードするデータのノードとエッジにマップするために必要なディレクティブをユーティリティに推測させることもできます。または、既に作成または変更した GraphQL スキーマとディレクティブから始めることもできます。

ユーティリティは、 AWS AppSync API、IAM ロール、データソース、スキーマ、リゾルバー、Neptune をクエリする AWS Lambda 関数など、パイプラインに必要なすべての AWS リソースを作成できます。

**注記**  
ここでのコマンドラインの例は Linux コンソールを想定しています。Windows を使用している場合は、行末のバックスラッシュ (「\$1」) をキャレット (「^」) に置き換えます。

**Topics**
+ [GraphQL 用の Amazon Neptune ユーティリティのインストールとセットアップ](tools-graphql-setup.md)
+ [既存の Neptune データベースのデータのスキャン](tools-graphql-scan-existing.md)
+ [ディレクティブのない GraphQL スキーマからの開始](tools-graphql-start-from-schema.md)
+ [GraphQL スキーマのディレクティブの操作](tools-graphql-schema-with-directives.md)
+ [GraphQL ユーティリティのコマンドライン引数](tools-graphql-cmd-line-args.md)

# GraphQL 用の Amazon Neptune ユーティリティのインストールとセットアップ
<a name="tools-graphql-setup"></a>

このユーティリティを既存の Neptune データベースで使用する場合は、データベースエンドポイントに接続できる必要があります。デフォルトでは、Neptune データベースには、そのデータベースが配置されている VPC 内からのみアクセスできます。

このユーティリティは Node.js のコマンドラインツールなので、ユーティリティを実行するには Node.js (バージョン 18 以上) がインストールされている必要があります。Neptune データベースと同じ VPC にある EC2 インスタンスに Node.js をインストールするには、[こちらの手順](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html)に従ってください。ユーティリティを実行するインスタンスの最小サイズは t2.micro です。インスタンスの作成時に、**[共通セキュリティグループ]** プルダウンメニューから Neptune データベース VPC を選択します。

ユーティリティ自体を EC2 インスタンスまたはローカルマシンにインストールするには、NPM を使用します。

```
npm i @aws/neptune-for-graphql -g
```

その後、ユーティリティの help コマンドを実行して、ユーティリティが正しくインストールされたかどうかを確認できます。

```
neptune-for-graphql --help
```

 AWS リソースを管理するために [をインストール AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)することもできます。

# 既存の Neptune データベースのデータのスキャン
<a name="tools-graphql-scan-existing"></a>

GraphQL に精通しているかどうかにかかわらず、以下のコマンドは GraphQL API を作成する最も速い方法です。これは、[インストールセクション](tools-graphql-setup.md)で説明したように GraphQL 用 Neptune ユーティリティをインストールして設定し、Neptune データベースのエンドポイントに接続していることを前提としています。

```
neptune-for-graphql \
  --input-graphdb-schema-neptune-endpoint (your neptune database endpoint):(port number) \
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name (your new GraphQL API name) \
  --output-resolver-query-https
```

このユーティリティはデータベースを分析して、データベース内のノード、エッジ、プロパティのスキーマを検出します。そのスキーマに基づいて、関連するクエリとミューテーションを含む GraphQL スキーマを推測します。次に、AppSync GraphQL API とそれを使用するために必要な AWS リソースを作成します。これらのリソースには、一対の IAM ロールと、GraphQL リゾルバーコードを含む Lambda 関数が含まれます。

ユーティリティが終了すると、AppSync コンソールに、コマンドで割り当てた名前で新しい GraphQL API が表示されます。テストするには、AppSync メニューの **[クエリ]** オプションを使用します。

データベースにデータを追加した後に同じコマンドを再度実行すると、それに応じて AppSync API と Lambda コードが更新されます。

コマンドに関連付けられているすべてのリソースを解放するには、以下を実行します。

```
neptune-for-graphql \
  --remove-aws-pipeline-name (your new GraphQL API name from above)
```

# ディレクティブのない GraphQL スキーマからの開始
<a name="tools-graphql-start-from-schema"></a>

空の Neptune データベースから開始し、ディレクティブのない GraphQL スキーマを使用してデータを作成し、クエリを実行できます。以下のコマンドは、そのための AWS リソースを自動的に作成します。

```
neptune-for-graphql \
  --input-schema-file (your GraphQL schema file)
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name (name for your new GraphQL API) \
  --create-update-aws-pipeline-neptune-endpoint (your Neptune database endpoint):(port number) \
  --output-resolver-query-https
```

GraphQL スキーマファイルには、以下の TODO 例に示すように GraphQL スキーマタイプが含まれている必要があります。このユーティリティはスキーマを分析し、そのタイプに基づいて拡張バージョンを作成します。グラフデータベースに格納されているノードのクエリとミューテーションを追加し、スキーマにネストされたタイプがある場合は、データベースにエッジとして格納されているタイプ間の関係を追加します。

ユーティリティは AppSync GraphQL API と必要なすべての AWS リソースを作成します。これらのリソースには、一対の IAM ロールと、GraphQL リゾルバーコードを含む Lambda 関数が含まれます。コマンドが完了すると、指定した名前の新しい GraphQL API が AppSync コンソールに表示されます。テストするには、AppSync メニューの **[クエリ]** を使用します。

以下の例は、このしくみを示しています。

## Todo の例、ディレクティブのない GraphQL スキーマからの開始
<a name="tools-graphql-todo-example"></a>

この例では、ディレクティブのない Todo GraphQL スキーマから始めます。このスキーマは *???samples???* ディレクトリにあります。次の 2 つのタイプが含まれます。

```
type Todo {
  name: String
  description: String
  priority: Int
  status: String
  comments: [Comment]
}

type Comment {
  content: String
}
```

このコマンドは、Todo スキーマと空の Neptune データベースのエンドポイントを処理して、 AWS AppSync で GraphQL API を作成します。

```
neptune-for-graphql /
  --input-schema-file ./samples/todo.schema.graphql \
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name TodoExample \
  --create-update-aws-pipeline-neptune-endpoint (empty Neptune database endpoint):(port number) \
  --output-resolver-query-https
```

このユーティリティは、`TodoExample.source.graphql` という名前の出力フォルダに新しいファイルを作成し、AppSync に GraphQL API を作成します。このユーティリティは以下を推測します。
+ Todo タイプに新しい CommentEdge タイプ用の `@relationship` が追加されました。これはリゾルバーに対して、CommentEdge という名前のグラフデータベースエッジを使用して Todo を Comment に接続するよう指示します。
+ クエリやミューテーションを容易にするため、TodoInput という新しい入力が追加されました。
+ 各タイプ (Todo、Comment) に 2 つのクエリが追加されました。1 つは、`id` を使用して、または入力にリストされているタイプフィールドのいずれかを使用して 1 つのタイプを取得するためのもので、もう 1 つはそのタイプの入力を使用してフィルタリングされた複数の値を取得するためのものです。
+ 各タイプに 3 つのミューテーション (作成、更新、削除) が追加されました。削除するタイプは、`id` またはそのタイプの入力を使用して指定します。これらのミューテーションは、Neptune データベースに保存されているデータに影響します。
+ 接続に「接続」と「削除」の 2 つのミューテーションが追加されました。Neptune によって使用される開始頂点と終了頂点のノード ID を入力として取り、接続はデータベース内のエッジです。

リゾルバーはクエリとミューテーションを名前で認識しますが、[以下](tools.md)のようにカスタマイズできます。

`TodoExample.source.graphql` ファイルの内容は次のとおりです。

```
type Todo {
  _id: ID! @id
  name: String
  description: String
  priority: Int
  status: String
  comments(filter: CommentInput, options: Options): [Comment] @relationship(type: "CommentEdge", direction: OUT)
  bestComment: Comment @relationship(type: "CommentEdge", direction: OUT)
  commentEdge: CommentEdge
}

type Comment {
  _id: ID! @id
  content: String
}

input Options {
  limit: Int
}

input TodoInput {
  _id: ID @id
  name: String
  description: String
  priority: Int
  status: String
}

type CommentEdge {
  _id: ID! @id
}

input CommentInput {
  _id: ID @id
  content: String
}

input Options {
  limit: Int
}

type Query {
  getNodeTodo(filter: TodoInput, options: Options): Todo
  getNodeTodos(filter: TodoInput): [Todo]
  getNodeComment(filter: CommentInput, options: Options): Comment
  getNodeComments(filter: CommentInput): [Comment]
}

type Mutation {
  createNodeTodo(input: TodoInput!): Todo
  updateNodeTodo(input: TodoInput!): Todo
  deleteNodeTodo(_id: ID!): Boolean
  connectNodeTodoToNodeCommentEdgeCommentEdge(from_id: ID!, to_id: ID!): CommentEdge
  deleteEdgeCommentEdgeFromTodoToComment(from_id: ID!, to_id: ID!): Boolean
  createNodeComment(input: CommentInput!): Comment
  updateNodeComment(input: CommentInput!): Comment
  deleteNodeComment(_id: ID!): Boolean
}

schema {
  query: Query
  mutation: Mutation
}
```

これで、データの作成とクエリが可能になりました。以下は、新しい GraphQL API (この例では `TodoExampleAPI` という名前) のテストに使用された AppSync **クエリ**コンソールのスナップショットです。エクスプローラは、中央のウィンドウにクエリとミューテーションのリストを表示し、そこからクエリ、入力パラメータ、リターンフィールドを選択できます。このスクリーンショットには、`createNodeTodo` ミューテーションを使用して Todo ノードタイプを作成しているところが示されています。

![\[AppSync クエリコンソールで Todo ノードを作成しているスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/todoCreate.png)


このスクリーンショットは、`getNodeTodos` クエリを使用してすべての Todo ノードにクエリを実行しているところを示しています。

![\[AppSync クエリコンソールで Todo ノードをクエリしているスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/todoGetTodos.png)


`createNodeComment` を使用してコメントを作成したら、`connectNodeTodoToNodeCommentEdgeCommentEdge` ミューテーションを使用してその ID を指定することで接続できます。Todo とそれに添付されたコメントを取得するネストされたクエリを以下に示します。

![\[AppSync クエリコンソールで Todo と添付コメントを取得するためのネストされたクエリを示すスクリーンショット\]](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/todoNestedQuery.png)


「[ディレクティブの操作](tools-graphql-schema-with-directives.md)」で説明されているように、`TodoExample.source.graphql` ファイルに変更を加えたい場合は、編集したスキーマを入力として使用し、ユーティリティを再度実行できます。その後、ユーティリティはそれに応じて GraphQL API を変更します。

# GraphQL スキーマのディレクティブの操作
<a name="tools-graphql-schema-with-directives"></a>

次のようなコマンドを使用して、既にディレクティブが設定されている GraphQL スキーマから開始できます。

```
neptune-for-graphql \
  --input-schema-file (your GraphQL schema file with directives) \
  --create-update-aws-pipeline \
  --create-update-aws-pipeline-name (name for your new GraphQL API) \
  --create-update-aws-pipeline-neptune-endpoint  (empty Neptune database endpoint):(port number) \
  --output-resolver-query-https
```

ユーティリティが作成したディレクティブを変更したり、独自のディレクティブを GraphQL スキーマに追加したりできます。ディレクティブを操作するには次のような方法があります。

## ミューテーションが発生しないようにユーティリティを実行する
<a name="tools-graphql-no-mutations"></a>

ユーティリティが GraphQL API にミューテーションを生成しないようにするには、`neptune-for-graphql` コマンドの `--output-schema-no-mutations` オプションを使用します。

## `@alias` ディレクティブ
<a name="tools-graphql-alias-directive"></a>

`@alias` ディレクティブは、GraphQL スキーマタイプまたはフィールドに適用できます。グラフデータベースと GraphQL スキーマの間で異なる名前をマッピングします。構文は次のとおりです。

```
@alias(property: (property name))
```

以下の例では、`airport` は `Airport` GraphQL タイプにマッピングされたグラフデータベースノードラベルであり、`desc` は `description` フィールドにマッピングされたグラフノードプロパティです (「[空路の例](tools-graphql.md)」を参照)。

```
type Airport @alias(property: "airport") {
  city: String
  description: String @alias(property: "desc")
}
```

標準の GraphQL フォーマットでは、パスカルケーシングの型名とキャメルケーシングのフィールド名が必要であることに注意してください。

## `@relationship` ディレクティブ
<a name="tools-graphql-relationship-directive"></a>

`@relationship` ディレクティブは、ネストされた GraphQL タイプをグラフデータベースのエッジにマッピングします。構文は次のとおりです。

```
@relationship(edgeType: (edge name), direction: (IN or OUT))
```

コマンドの例を次に示します。

```
type Airport @alias(property: "airport") {
  ...
  continentContainsIn: Continent @relationship(edgeType: "contains", direction: IN)
  countryContainsIn: Country @relationship(edgeType: "contains", direction: IN)
  airportRoutesOut(filter: AirportInput, options: Options): [Airport] @relationship(edgeType: "route", direction: OUT)
  airportRoutesIn(filter: AirportInput, options: Options): [Airport] @relationship(edgeType: "route", direction: IN)
}
```

`@relationship` ディレクティブは「[Todo の例](tools-graphql-start-from-schema.md#tools-graphql-todo-example)」と「[空路の例](tools-graphql.md)」の両方にあります。

## `@graphQuery` および `@cypher` ディレクティブ
<a name="tools-graphql-graphquery-cypher-directives"></a>

openCypher クエリを定義して、フィールド値を解決したり、クエリを追加したり、ミューテーションを追加したりできます。例えば、これは、アウトバウンドルートをカウントする新しい `outboundRoutesCount` フィールドを `Airport` タイプに追加します。

```
type Airport @alias(property: "airport") {
  ...
  outboundRoutesCount: Int @graphQuery(statement: "MATCH (this)-[r:route]->(a) RETURN count(r)")
}
```

以下は新しいクエリとミューテーションの例です。

```
type Query {
  getAirportConnection(fromCode: String!, toCode: String!): Airport \
    @cypher(statement: \
      "MATCH (:airport{code: '$fromCode'})-[:route]->(this:airport)-[:route]->(:airport{code:'$toCode'})")
}

type Mutation {
  createAirport(input: AirportInput!): Airport @graphQuery(statement: "CREATE (this:airport {$input}) RETURN this")
  addRoute(fromAirportCode:String, toAirportCode:String, dist:Int): Route \
    @graphQuery(statement: \
     "MATCH (from:airport{code:'$fromAirportCode'}), (to:airport{code:'$toAirportCode'}) \
      CREATE (from)-[this:route{dist:$dist}]->(to) \
      RETURN this")
}
```

`RETURN` を省略すると、リゾルバーはキーワード `this` を戻り値のスコープと見なすことに注意してください。

Gremlin クエリを使用してクエリやミューチュテーションを追加することもできます。

```
type Query {
  getAirportWithGremlin(code:String): Airport \
    @graphQuery(statement: "g.V().has('airport', 'code', '$code').elementMap()")  # single node
  getAirportsWithGremlin: [Airport] \
    @graphQuery(statement: "g.V().hasLabel('airport').elementMap().fold()")       # list of nodes
  getCountriesCount: Int \
    @graphQuery(statement: "g.V().hasLabel('country').count()")                   # scalar
}
```

現時点では、Gremlin クエリはスカラー値を返すもの、または単一ノードについて `elementMap()`、またはノードのリストについて `elementMap().fold()` を返すものに限られています。

## `@id` ディレクティブ
<a name="tools-graphql-id-directive"></a>

`@id` ディレクティブは、`id` グラフデータベースエンティティにマッピングされたフィールドを識別します。Amazon Neptune のようなグラフデータベースには、一括インポート時に割り当てられたか、または自動生成された、ノードとエッジの一意の `id` が常にあります。例えば、次のようになります。

```
type Airport {
  _id: ID! @id
  city: String
  code: String
}
```

## 予約されているタイプ、クエリ、ミューテーション名
<a name="tools-graphql-reserved-names"></a>

このユーティリティは、クエリとミューテーションを自動生成して、動作する GraphQL API を作成します。これらの名前のパターンはリゾルバーによって認識され、予約されています。タイプ `Airport` と接続タイプ `Route` の例を以下に示します。

`Options` タイプは予約されています。

```
input Options {
  limit: Int
}
```

`filter` および `options` 関数パラメータは予約されています。

```
type Query {
  getNodeAirports(filter: AirportInput, options: Options): [Airport]
}
```

クエリ名の getNode プレフィックスは予約されており、`createNode`、`updateNode`、`deleteNode`、`connectNode`、`deleteNode`、`updateEdge`、`deleteEdge` などのミューテーション名のプレフィックスは予約されています。

```
type Query {
  getNodeAirport(id: ID, filter: AirportInput): Airport
  getNodeAirports(filter: AirportInput): [Airport]
}

type Mutation {
  createNodeAirport(input: AirportInput!): Airport
  updateNodeAirport(id: ID!, input: AirportInput!): Airport
  deleteNodeAirport(id: ID!): Boolean
  connectNodeAirportToNodeAirportEdgeRout(from: ID!, to: ID!, edge: RouteInput!): Route
  updateEdgeRouteFromAirportToAirport(from: ID!, to: ID!, edge: RouteInput!): Route
  deleteEdgeRouteFromAirportToAirport(from: ID!, to: ID!): Boolean
}
```

## GraphQL スキーマに変更を適用する
<a name="tools-graphql-apply-schema-changes"></a>

GraphQL ソーススキーマを変更して、ユーティリティを再実行すると、Neptune データベースから最新のスキーマを取得できます。ユーティリティは、データベース内の新しいスキーマを検出するたびに、新しい GraphQL スキーマを生成します。

GraphQL ソーススキーマを手動で編集し、Neptune データベースエンドポイントの代わりにソーススキーマを入力として使用してユーティリティを再実行することもできます。

最後に、次の JSON 形式を使用して、変更内容をファイルに入れることができます。

```
[
  {
    "type": "(GraphQL type name)",
    "field": "(GraphQL field name)",
    "action": "(remove or add)",
    "value": "(value)"
  }
]
```

例えば、次のようになります。

```
[
  {
    "type": "Airport",
    "field": "outboundRoutesCountAdd",
    "action": "add",
    "value":"outboundRoutesCountAdd: Int @graphQuery(statement: \"MATCH (this)-[r:route]->(a) RETURN count(r)\")"
  },
  {
    "type": "Mutation",
    "field": "deleteNodeVersion",
    "action": "remove",
    "value": ""
  },
  {
    "type": "Mutation",
    "field": "createNodeVersion",
    "action": "remove",
    "value": ""
  }
]
```

次に、コマンドの `--input-schema-changes-file` パラメータを使用して、このファイルに対してユーティリティを実行すると、ユーティリティは変更を一度に適用します。

# GraphQL ユーティリティのコマンドライン引数
<a name="tools-graphql-cmd-line-args"></a>
+ **`--help, -h`** — GraphQL ユーティリティのヘルプテキストをコンソールに返します。

   
+ **`--input-schema (schema text)`** — 入力として使用する GraphQL スキーマ (ディレクティブあり、またはなし)。

   
+ **`--input-schema-file (file URL)`** — 入力として使用する GraphQL スキーマを含んでいるファイルの URL。

   
+ **`--input-schema-changes-file (file URL)`** — GraphQL スキーマに加えたい変更を含んでいるファイルの URL。Neptune データベースに対してユーティリティを複数回実行し、GraphQL ソーススキーマを手動で変更したり、カスタムクエリを追加したりすると、手動で行った変更は失われます。これを避けるには、変更内容を変更ファイルに入れ、この引数を使用して渡します。

  変更ファイルでは、以下の JSON 形式を使用します。

  ```
  [
    {
      "type": "(GraphQL type name)",
      "field": "(GraphQL field name)",
      "action": "(remove or add)",
      "value": "(value)"
    }
  ]
  ```

  詳細については、「[Todo の例](tools-graphql-start-from-schema.md#tools-graphql-todo-example)」を参照してください。

   
+ **`--input-graphdb-schema (schema text)`** — Neptune データベースに対してユーティリティを実行する代わりに、graphdb スキーマをテキスト形式で表現して入力として使用できます。graphdb スキーマは、次のような JSON 形式になっています。

  ```
  {
    "nodeStructures": [
      { "label":"nodelabel1",
        "properties": [
          { "name":"name1", "type":"type1" }
        ]
      },
      { "label":"nodelabel2",
        "properties": [
            { "name":"name2", "type":"type1" }
        ]
      }
    ],
    "edgeStructures": [
      {
        "label":"label1",
        "directions": [
          { "from":"nodelabel1", "to":"nodelabel2", "relationship":"ONE-ONE|ONE-MANY|MANY-MANY"  }
        ],
        "properties": [
          { "name":"name1", "type":"type1" }
        ]
      }
    ]
  }
  ```

   
+ **`--input-graphdb-schema-file (file URL)`** — Neptune データベースに対してユーティリティを実行する代わりに、graphdb スキーマをテキスト形式で表現して入力として使用できます。graphdb スキーマファイルの JSON 形式の例については、上記の「`--input-graphdb-schema`」を参照してください。

   
+ **`--input-graphdb-schema-neptune-endpoint (endpoint URL)`** — ユーティリティが graphdb スキーマを抽出する Neptune データベースエンドポイント。

   
+ **`--output-schema-file (file name)`** — GraphQL スキーマの出力ファイル名。指定しなかった場合、デフォルトは `output.schema.graphql` です。ただし、パイプライン名が `--create-update-aws-pipeline-name` を使用して設定された場合、デフォルトのファイル名は `(pipline name).schema.graphql` です。

   
+ **`--output-source-schema-file (file name)`** — ディレクティブを含む GraphQL スキーマの出力ファイル名。指定しなかった場合、デフォルトは `output.source.schema.graphql` です。ただし、パイプライン名が `--create-update-aws-pipeline-name` を使用して設定された場合、デフォルト名は `(pipeline name).source.schema.graphql` です。

   
+ **`--output-schema-no-mutations`** — この引数が存在する場合、ユーティリティは GraphQL API にミューテーションを生成せず、クエリのみを生成します。

   
+ **`--output-neptune-schema-file (file name)`** — ユーティリティが検出した Neptune graphdb スキーマの出力ファイル名。指定しなかった場合、デフォルトは `output.graphdb.json` です。ただし、パイプライン名が `--create-update-aws-pipeline-name` を使用して設定された場合、デフォルトのファイル名は `(pipeline name).graphdb.json` です。

   
+ **`--output-js-resolver-file (file name)`** — リゾルバーコードのコピーの出力ファイル名。指定しなかった場合、デフォルトは `output.resolver.graphql.js` です。ただし、パイプライン名が `--create-update-aws-pipeline-name` を使用して設定された場合、ファイル名は `(pipeline name).resolver.graphql.js` です。

  このファイルは、リゾルバーを実行する Lambda 関数にアップロードされたコードパッケージに圧縮されています。

   
+ **`--output-resolver-query-sdk`** — この引数は、ユーティリティの Lambda 関数が Neptune データ SDK を使用して Neptune にクエリを実行するように指定します。このデータ SDK は Neptune [エンジンバージョン 1.2.1.0.R5](engine-releases-1.2.1.0.R5.md) (デフォルト) 以降で使用可能です。ただし、ユーティリティが古い Neptune エンジンバージョンを検出した場合は、代わりに HTTPS Lambda オプションを使用することを推奨します。このオプションは `--output-resolver-query-https` 引数を使用して呼び出すことができます。

   
+ **`--output-resolver-query-https`** — この引数は、ユーティリティの Lambda 関数が Neptune HTTPS API を使用して Neptune にクエリを実行するように指定します。

  

   
+ **`--create-update-aws-pipeline`**   –   この引数は、AppSync GraphQL API やリゾルバーを実行する Lambda など、GraphQL API が使用する AWS リソースの作成をトリガーします。

   
+ **`--create-update-aws-pipeline-name (pipeline name)`** — この引数は、AppSync の `pipeline-name` API や Lambda 関数の `pipeline-name` 関数など、パイプラインの名前を設定します。名前が指定されなかった場合、`--create-update-aws-pipeline` は `Neptune ` データベース名を使用します。
+ **`--create-update-aws-pipeline-region (AWS region)`**   –   この引数は、GraphQL API のパイプラインが作成される AWS リージョンを設定します。指定されなかった場合、デフォルトのリージョンは、`us-east-1` か、データベースエンドポイントから抽出された Neptune データベースが置かれているリージョンのいずれかです。
+ **`--create-update-aws-pipeline-neptune-endpoint (endpoint URL)`** — この引数は、Lambda 関数がデータベースにクエリするために使用する Neptune データベースエンドポイントを設定します。設定されていない場合は、`--input-graphdb-schema-neptune-endpoint` によって設定されたエンドポイントが使用されます。
+ **`--remove-aws-pipeline-name (pipeline name)`** — この引数は、`--create-update-aws-pipeline` を使用して作成されたパイプラインを削除します。削除するリソースは、`(pipeline name).resources.json` という名前のファイルにリストされます。
+ **`--output-aws-pipeline-cdk`** — この引数は、AppSync GraphQL API やリゾルバーを実行する Lambda 関数など、GraphQL API 用の AWS リソースの作成に使用できる CDK ファイルの作成をトリガーします。
+ **`--output-aws-pipeline-cdk-neptume-endpoint (endpoint URL)`** — この引数は、Lambda 関数が Neptune データベースにクエリするために使用する Neptune データベースエンドポイントを設定します。設定されていない場合は、`--input-graphdb-schema-neptune-endpoint` によって設定されたエンドポイントが使用されます。
+ **`--output-aws-pipeline-cdk-name (pipeline name)`** — この引数は、AppSync API と使用する Lambda pipeline-name 関数のパイプライン名を設定します。指定されなかった場合、`--create-update-aws-pipeline` は Neptune データベース名を使用します。
+ **`--output-aws-pipeline-cdk-region (AWS region)`**   –   GraphQL API のパイプラインが作成される AWS リージョンを設定します。指定されなかった場合、デフォルトのリージョンは、`us-east-1` か、データベースエンドポイントから抽出された Neptune データベースが置かれているリージョンのいずれかです。
+ **`--output-aws-pipeline-cdk-file (file name)`** — これは、CDK ファイル名を設定します。設定されなかった場合、デフォルトは `(pipeline name)-cdk.js` です。

# Nodestream
<a name="tools-Nodestream"></a>

 [Nodestream](https://nodestream-proj.github.io/docs/docs/intro/) は、データをグラフとして意味的にモデリングするためのフレームワークです。柔軟で拡張可能なように設計されており、データの収集方法とグラフとしてのモデル化方法を定義できます。パイプラインベースのアプローチを使用してデータの収集と処理の方法を定義し、スキーマが変更されたときにどのようにグラフを更新するかを定義できます。これらはすべて、シンプルで人間が読める yaml 形式の設定ファイルを使用して行われます。これを実現するために、Nodestream はパイプライン、エクストラクタ、トランスフォーマー、フィルター、インタプリタ、解釈、移行など、多くの主要な概念を使用しています。

 [Nodestream 0.12](https://nodestream-proj.github.io/docs/blog/2024/04/05/nodestream-0-12/) 以降、Amazon Neptune は [Neptune Database と Neptune Analytics](https://nodestream-proj.github.io/docs/docs/databases/neptune/) の両方でサポートされています。

 Neptune で Nodestream を設定して使用する方法の詳細については、Nodestream ドキュメント「[Nodestream support for Amazon Neptune](https://nodestream-proj.github.io/docs/docs/databases/neptune/)」を参照してください。

 Neptune で使用する Nodestream は現在、標準 ETL パイプラインと有効期限 (TTL) パイプラインをサポートしています。ETL パイプラインでは、Neptune で以前可能だったものよりもはるかに広範なデータソースと形式から Neptune への一括データインジェストが可能です。以下に例を示します。
+  [ソフトウェア部品表](https://nodestream-proj.github.io/docs/docs/official-plugins/sbom/) 
+  [CSV、JSON、JSONL、Parquet、txt、yaml などのファイル](https://nodestream-proj.github.io/docs/docs/reference/extractors/) 
+  [Kafka](https://nodestream-proj.github.io/docs/docs/reference/extractors/#streamextractor) 
+  [Athena](https://nodestream-proj.github.io/docs/docs/reference/extractors/#athenaextractor): 
+  [REST API](https://nodestream-proj.github.io/docs/docs/reference/extractors/#simpleapiextractor) 

 Nodestream は、認証情報が正しく設定されている限り、Amazon Neptune に接続するときに IAM 認証を完全にサポートします。認証情報を正しく設定する方法の詳細については、[boto3 認証情報ガイド](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#configuring-credentials)を参照してください。

 [Nodestream の TTL メカニズム](https://nodestream-proj.github.io/docs/docs/tutorials-intermediate/removing-data/)は、Neptune で以前は利用できなかった新機能も有効にします。取り込まれたグラフ要素にタイムスタンプを付けることで、Nodestream は設定された有効期間を経過したデータを自動的に期限切れにして削除するパイプラインを作成できます。