Amazon Neptune エンジンバージョン 1.2.0.0 (2022-07-21) - Amazon Neptune

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

Amazon Neptune エンジンバージョン 1.2.0.0 (2022-07-21)

2022 年 7 月 21 日現在、エンジンバージョン 1.2.0.0 は一般にデプロイされています。新しいリリースがすべてのリージョンで利用可能になるまでに数日かかります。

注記

1.2.0.0 より前のエンジンバージョンからアップグレードを行う場合:

  • エンジンリリース 1.2.0.0 では、カスタムパラメータグループとカスタムクラスターパラメータグループに新しい形式が導入されました。そのため、1.2.0.0 より前のエンジンバージョンからエンジンバージョン 1.2.0.0 以降にアップグレードする場合は、パラメータグループファミリー neptune1.2 を使用している既存のカスタムパラメータグループとカスタムクラスターパラメータグループをすべて再作成する必要があります。以前のリリースではパラメータグループファミリー neptune1 が使用されていましたが、それらのパラメータグループはリリース 1.2.0.0 以降では動作しません。詳細については、「Amazon Neptune パラメータグループ」を参照してください。

  • エンジンリリース 1.2.0.0 では、UNDO ログの新しい形式も導入されました。そのため、1.2.0.0 より前のバージョンからのアップグレードを開始する前に、以前のエンジンバージョンで作成された UNDO ログをすべてパージし、UndoLogsListSize CloudWatch メトリクスをゼロにする必要があります。更新を開始しようとしたときに UNDO ログレコードが多すぎる (200,000 以上) 場合、UNDO ログのパージが完了するのを待っている間にアップグレードがタイムアウトすることがあります。

    パージが行われるクラスターのライターインスタンスをアップグレードすることで、パージの速度を上げることができます。アップグレードを試みる前にこれを行うと、開始前に UNDO ログの数を減らすことができます。ライターのサイズを 24XL インスタンスタイプに増やすと、パージ率が 1 時間あたり 100 万レコードを超えることがあります。

    UndoLogsListSize CloudWatch メトリクスが非常に大きい場合、サポートケースを開くと、それを停止するための追加の戦略を検討するのに役立つ場合があります。

  • 最後に、リリース 1.2.0.0 には、IAM 認証で Bolt プロトコルを使用していた以前のコードに影響する重大な変更がありました。リリース 1.2.0.0 以降、Bolt には IAM 署名用のリソースパスが必要です。Java では、リソースパスの設定は以下のようになります: request.setResourcePath("/openCypher"));。その他の言語では、/openCypher をエンドポイント URI に追加できます。例については、「Bolt プロトコルの使用」を参照してください。

このリリースの後続のパッチリリース

このエンジンリリースの新機能

  • グローバルデータベースのサポートが追加されました。Neptune グローバルデータベースは複数の AWS リージョン にまたがり、1 つのリージョンにあるプライマリ DB クラスターと、他のリージョンにある最大 5 つのセカンダリ DB クラスターで構成されます。

  • Neptune IAM ポリシーに、データプレーンアクションに基づく、以前よりもきめ細かいアクセスコントロールのサポートが追加されました。廃止された connect アクションに基づく既存の IAM ポリシーを、より詳細なデータプレーンアクションを使用するように調整する必要があるという点で、これは重大な変更です。「IAM ポリシーのタイプ」を参照してください。

  • リーダーインスタンスの可用性が向上しました。これまでは、ライターインスタンスが再起動すると、Neptune クラスター内のすべてのリーダーインスタンスも再起動していました。エンジンリリース 1.2.0.0 以降、ライターの再起動後もリーダーインスタンスはアクティブなままになり、リーダーの可用性が向上しました。リーダーインスタンスはパラメータグループの変更を反映するために個別に再起動できます。「Amazon Neptune における DB インスタンスの再起動」を参照してください。

  • 新しい neptune_streams_expiry_days DB クラスターパラメータが追加されました。これにより、ストリームレコードが削除されるまでにサーバー上に保持される日数を設定できます。範囲は 1~90 で、デフォルトは 7 です。

このエンジンリリースの改良点

  • ByteCode クエリの Gremlin シリアル化のパフォーマンスが向上しました。

  • Neptune は DFE エンジンを使用してテキスト述語を処理するようになり、パフォーマンスが向上しました。

  • Neptune は、非終端制限や子トラバーサル制限を含め、DFE エンジンを使用して Gremlin limit() ステップを処理するようになりました。

  • Gremlin union() ステップの DFE 処理を他の新機能と連携するように変更しました。つまり、リファレンスノードがクエリプロファイルに期待どおりに表示されるようになりました。

  • DFE 内の一部の高価な結合操作を並列化することで、パフォーマンスが最大 5 倍向上しました。

  • Gremlin DFE エンジンの OrderGlobalStep order(global) について by() モジュレーションサポートが追加されました。

  • DFE の詳細説明に、注入された静的な値の表示を追加しました。

  • 重複するパターンを削除するときのパフォーマンスが向上しました。

  • Gremlin DFE エンジンに順序保持サポートが追加されました。

  • 次のような空のフィルターを含む Gremlin クエリのパフォーマンスが向上しました。

    g.V().hasId(P.within([]))
    g.V().hasId([])
  • SPARQL クエリが Neptune が内部的に表現するには大きすぎる数値を使用する場合のエラーメッセージを改善しました。

  • ストリームが無効になっているときにインデックス検索を減らすことで、エッジが関連付けられた頂点を削除するときのパフォーマンスが向上しました。

  • DFE サポートを has() ステップのより多くのバリアント、特に hasKey()hasLabel() と、has() 内の文字列/URI の範囲述語に拡張しました。これは次のようなクエリに影響します。

    // hasKey() on properties g.V().properties().hasKey("name") g.V().properties().has(T.key, TextP.startingWith("a")) g.E().properties().hasKey("weight") g.E().properties().hasKey(TextP.containing("t")) // hasLabel() on vertex properties g.V().properties().hasLabel("name") // range predicates on ID and Label fields g.V().has(T.label, gt("person")) g.E().has(T.id, lte("(an ID value)"))
  • リスト内の文字列を単一の文字列に連結する NepTune 固有の openCypher join() 関数を追加しました。

  • データアクセス許可と新しいグローバルデータベース API のアクセス許可を含むように Neptune 管理ポリシーを更新しました。

このエンジンリリースで修正された不具合

  • コンテンツタイプが指定されていない HTTP リクエストが自動的に失敗するバグを修正しました。

  • クエリー内でサービスコールが使用できないというクエリーオプティマイザーの SPARQL バグを修正しました。

  • Unicode データの特定の組み合わせが原因で障害が発生するという Turtle RDF パーサーの SPARQL バグを修正しました。

  • GRAPH および SELECT 句の特定の組み合わせが誤ったクエリ結果を生成する SPARQL のバグを修正しました。

  • 次のような結合ステップ内のフィルターステップを使用するクエリで正確性の問題が発生する Gremlin のバグを修正しました。

    g.V("1").union(hasLabel("person"), out())
  • both().simplePath()count() によって、count() なしで返される結果の数が実際の 2 倍になるという Gremlin のバグを修正しました。

  • IAM 認証が有効になっているクラスターへの Bolt リクエストに対して、サーバーで署名不一致の例外が生成される openCypher のバグを修正しました。

  • HTTP キープアライブを使用するクエリが、リクエストが失敗した後に送信された場合に誤ってクローズされる可能性がある openCypher のバグを修正しました。

  • 定数値を返すクエリが送信されると内部エラーがスローされる openCypher のバグを修正しました。

  • 説明の詳細のバグが修正され、DFE サブクエリ Time(ms) が DFE サブクエリ内のオペレータの CPU 時間を正しく合計するようになりました。例として、次の説明出力の抜粋を考えてみましょう。

    subQuery1 ╔════╤════════╤════════╤═══════════════════════╤═══════════════════════════════════╤══════╤══════════╤═══════════╤═══════╤═══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠════╪════════╪════════╪═══════════════════════╪═══════════════════════════════════╪══════╪══════════╪═══════════╪═══════╪═══════════╣ ... ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 1 │ 2 │ - │ DFEChunkLocalSubQuery │ subQuery=...graph#336e.../graph_1 │ - │ 1 │ 1 │ 1.00 │ 0.38 ║ ║ │ │ │ │ coordinationTime(ms)=0.026 │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ... subQuery=...graph#336e.../graph_1 ╔════╤════════╤════════╤═══════════════════════╤═══════════════════════════════════╤══════╤══════════╤═══════════╤═══════╤═══════════╗ ║ ID │ Out #1 │ Out #2 │ Name │ Arguments │ Mode │ Units In │ Units Out │ Ratio │ Time (ms) ║ ╠════╪════════╪════════╪═══════════════════════╪═══════════════════════════════════╪══════╪══════════╪═══════════╪═══════╪═══════════╣ ║ 0 │ 1 │ - │ DFESolutionInjection │ solutions=[?100 -> [-10^^<LONG>]] │ - │ 0 │ 1 │ 0.00 │ 0.04 ║ ║ │ │ │ │ outSchema=[?100] │ │ │ │ │ ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 1 │ 3 │ - │ DFERelationalJoin │ joinVars=[] │ - │ 2 │ 1 │ 0.50 │ 0.29 ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 2 │ 1 │ - │ DFESolutionInjection │ outSchema=[] │ - │ 0 │ 1 │ 0.00 │ 0.01 ║ ╟────┼────────┼────────┼───────────────────────┼───────────────────────────────────┼──────┼──────────┼───────────┼───────┼───────────╢ ║ 3 │ - │ - │ DFEDrain │ - │ - │ 1 │ 0 │ 0.00 │ 0.02 ║ ╚════╧════════╧════════╧═══════════════════════╧═══════════════════════════════════╧══════╧══════════╧═══════════╧═══════╧═══════════╝

    下の表の最後の列のサブクエリ時間は、合計で 0.36 ms (.04 + .29 + .01 + .02 = .36) になります。そのサブクエリの調整時間を追加すると (.36 + .026 = .386) 、上のテーブルの最後の列に記録されているサブクエリの時間、つまり 0.38 ms に近い結果が得られます。

このリリースでサポートされるクエリ言語バージョン

DB クラスターをバージョン 1.2.0.0 にアップグレードする前に、プロジェクトが次のクエリ言語バージョンと互換性があることを確認してください。

  • サポートされている最も古いバージョンの Gremlin: 3.5.2

  • サポートされている最も新しいバージョンの Gremlin: 3.5.4

  • openCypher バージョン: Neptune-9.0.20190305-1.0

  • SPARQL バージョン: 1.1

エンジンリリース 1.2.0.0 へのアップグレードパス

これはエンジンのメジャーリリースなので、自動アップグレードはありません。

エンジンリリース 1.1.1.0 の最新のパッチリリースからリリース 1.2.0.0 へのアップグレードは手動でのみ可能です。1.2.0.0 にアップグレードするには、その前に、以前のエンジンリリースを 1.1.1.0 の最新リリースにアップグレードする必要があります。

そのため、このリリースにアップグレードする前に、リリース 1.1.1.0 の最新パッチリリースを現在実行していることを確認してください。そうでない場合は、1.1.1.0 の最新パッチリリースにアップグレードすることから始めてください。

アップグレードする前に、パラメータグループファミリー neptune1.2 を使用して、以前のバージョンで使用していたカスタム DB クラスターパラメータグループを再作成する必要もあります。詳細については、「Amazon Neptune パラメータグループ」を参照してください。

最初にリリース 1.1.1.0 にアップグレードし、その後すぐに 1.2.0.0 にアップグレードする場合、次のようなエラーが発生する可能性があります。

We're sorry, your request to modify DB cluster (cluster identifier) has failed. Cannot modify engine version because instance (instance identifier) is running on an old configuration. Apply any pending maintenance actions on the instance before proceeding with the upgrade.

このエラーが発生した場合は、保留中のアクションが終了するのを待つか、すぐにメンテナンスウィンドウをトリガーして、前回のアップグレードを完了させます (「Amazon Neptune DB クラスターのメンテナンス」を参照)。

このリリースへのアップグレード

DB クラスターで、このリリースへのアップグレードパスがあるエンジンバージョンを実行している場合は、今すぐアップグレードできます。対象となるクラスターをアップグレードするには、コンソールの DB クラスターオペレーションまたは SDK を使用します。次の CLI コマンドは、適格なクラスターをただちにアップグレードします。

Linux、OS X、Unix の場合:

aws neptune modify-db-cluster \ --db-cluster-identifier (your-neptune-cluster) \ --engine-version 1.2.0.0 \ --allow-major-version-upgrade \ --apply-immediately

Windows の場合:

aws neptune modify-db-cluster ^ --db-cluster-identifier (your-neptune-cluster) ^ --engine-version 1.2.0.0 ^ --allow-major-version-upgrade ^ --apply-immediately

--apply-immediately の代わりに --no-apply-immediately と指定することができます。メジャーバージョンアップグレードを実行するには、allow-major-version-upgrade パラメータが必要です。また、エンジンバージョンを含めるようにしてください。そうしないと、エンジンが別のバージョンにアップグレードされる可能性があります。

クラスターでカスタムクラスターパラメータグループを使用する場合は、必ずこのパラメータを含めて、それを指定してください。

--db-cluster-parameter-group-name (name of the custom DB cluster parameter group)

同様に、クラスター内のインスタンスがカスタム DB のパラメータグループを使用している場合は、必ずこのパラメータを指定して、次のようになります。

--db-instance-parameter-group-name (name of the custom instance parameter group)

アップグレードの前に必ずテストする

新しいメジャーまたはマイナーバージョンの Neptune エンジンがリリースされたら、アップグレードする前に、まず最初に Neptune アプリケーションをテストしてください。マイナーアップグレードでも、コードに影響する新しい機能や動作が導入される可能性があります。

まず、現在のバージョンのリリースノートページと対象バージョンのリリースノートページを比較して、クエリ言語のバージョンに変更があるか、その他の重大な変更がないかを確認します。

本番 DB クラスターをアップグレードする前に新しいバージョンをテストする最善の方法は、本番クラスターをクローンして、クローンで新しいエンジンバージョンを実行することです。その後、本番 DB クラスターに影響を与えずに、クローンに対してクエリを実行できます。

アップグレードの前に必ずスナップショットを手動で作成してください

アップグレードの前に必ず DB クラスターの手動スナップショットを作成することを強く推奨します。自動スナップショットを作成しても短期的な保護しか得られませんが、手動スナップショットは明示的に削除するまで使用できます。

場合によっては、Neptune がアップグレードプロセスの一環として手動スナップショットを作成することもありますが、これを頼りにすべきではなく、どのような場合でも独自の手動スナップショットを作成する必要があります。

DB クラスターをアップグレード前の状態に戻す必要がないことが確実な場合は、自分で作成した手動スナップショットと、Neptune が作成した手動スナップショットを明示的に削除できます。Neptune が手動スナップショットを作成する場合、その名前は preupgrade で始まり、その後に DB クラスターの名前、ソースエンジンのバージョン、ターゲットエンジンのバージョン、および日付が続きます。

注記

保留中のアクションの処理中にアップグレードを試みた場合、次のようなエラーが発生する可能性があります。

We're sorry, your request to modify DB cluster (cluster identifier) has failed. Cannot modify engine version because instance (instance identifier) is running on an old configuration. Apply any pending maintenance actions on the instance before proceeding with the upgrade.

このエラーが発生した場合は、保留中のアクションが終了するのを待つか、すぐにメンテナンスウィンドウをトリガーして、前回のアップグレードを完了させます。

お使いのエンジンバージョンのアップグレードの詳細については、Amazon Neptune DB クラスターのメンテナンス を参照してください。ご質問やご不明点がございましたら、コミュニティフォーラムや AWS プレミアムサポートから AWS サポートチームにお問い合わせください。