クイックスタート: Gremlin コンソールと Azure Cosmos DB for Apache Gremlin を使用して頂点とエッジを走査する

適用対象: Gremlin

Azure Cosmos DB for Apache Gremlin は、Gremlin クエリ言語を使用するグラフ コンピューティング フレームワークである一般的な Apache Tinkerpop を実装したフル マネージドのグラフ データベース サービスです。 Gremlin 用 API を使うと、最小限の管理で必要に応じて拡張したり、スケールアウトしたりできるサービスにより、それほど抵抗なく Gremlin を使い始めることができます。

このクイックスタートでは、Gremlin コンソールを使用して、新しく作成された Azure Cosmos DB for Gremlin アカウントに接続します。

前提条件

Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。

Azure Cloud Shell を開始するには、以下のようにします。

オプション 例とリンク
コードまたはコマンド ブロックの右上隅にある [使ってみる] を選択します。 [使ってみる] を選択しても、コードまたはコマンドは Cloud Shell に自動的にはコピーされません。 Screenshot that shows an example of Try It for Azure Cloud Shell.
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 Button to launch Azure Cloud Shell.
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 Screenshot that shows the Cloud Shell button in the Azure portal

Azure Cloud Shell を使用するには、以下のようにします。

  1. Cloud Shell を開始します。

  2. コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードまたはコマンドを Cloud Shell セッションに貼り付けます。

  4. Enter キーを選択して、コードまたはコマンドを実行します。

Gremlin 用 API アカウントとそれに関連するリソースを作成する

Gremlin コンソールを使用する前に、Gremlin 用 API アカウントを作成する必要があります。 さらに、これはデータベースとグラフの設定にも役立ちます。

  1. accountNameresourceGroupName、および location のシェル変数を作成します。

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    location="westus"
    
    # Variable for account name with a randomly generated suffix
    
    let suffix=$RANDOM*$RANDOM
    accountName="msdocs-gremlin-$suffix"
    
  2. まだサインインしていない場合は、 az login を使用して Azure CLI にサインインします。

  3. az group create を使って、サブスクリプションに新しいリソース グループを作成します。

    az group create \
        --name $resourceGroupName \
        --location $location
    
  4. az cosmosdb create を使って、既定の設定で Gremlin アカウント用の新しい API を作成してください。

    az cosmosdb create \
        --resource-group $resourceGroupName \
        --name $accountName \
        --capabilities "EnableGremlin" \
        --locations regionName=$location \
        --enable-free-tier true
    

    Note

    Azure サブスクリプションにつき所有できる Free レベルの Azure Cosmos DB アカウントは 1 つまでです。また、アカウントの作成時にオプトインする必要があります。 このコマンドで 無料レベル割引を適用できない場合は、サブスクリプション内の別のアカウントが 無料枠で既に有効になっていることを意味します。

  5. az cosmosdb showを使用して、アカウントに対する Gremlin 用 API エンドポイントの名前 を取得します。

    az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName \
        --query "name"
    
  6. az-cosmosdb-keys-list のアカウントのキーの一覧から KEY を見つけます。

    az cosmosdb keys list \
        --resource-group $resourceGroupName \
        --name $accountName \
        --type "keys" \
        --query "primaryMasterKey"
    
  7. NAMEKEY 値 を記録します。 これらの資格情報は後で使用します。

  8. az cosmosdb gremlin database create を使って、cosmicworks という名前のデータベースを作成します。

    az cosmosdb gremlin database create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --name "cosmicworks"
    
  9. az cosmosdb gremlin graph create を使って、グラフを作成します。 グラフに products という名前を付けてから、スループットを 400 に設定し、最後にパーティション キーのパスを /category に設定します。

    az cosmosdb gremlin graph create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --database-name "cosmicworks" \
        --name "products" \
        --partition-key-path "/category" \
        --throughput 400
    

Docker を使用して Gremlin コンソールを起動および構成する

Gremlin コンソールに対して、このクイックスタートでは Docker Hub の tinkerpop/gremlin-console コンテナー イメージを使用します。 このイメージによって、Gremlin 用 API への接続のためのコンソールの適切なバージョン (3.4) が確実に使用されるようになります。 コンソールが実行されたら、ローカルの Docker ホストからリモートの Gremlin 用 API アカウントに接続します。

  1. tinkerpop/gremlin-console コンテナー イメージの 3.4 バージョンをプルします。

    docker pull tinkerpop/gremlin-console:3.4
    
  2. 空の作業フォルダーを作成します。 空のフォルダー内に remote-secure.yaml ファイルを作成します。 このファイルに次の YAML 構成を追加します。

    hosts: [<account-name>.gremlin.cosmos.azure.com]
    port: 443
    username: /dbs/cosmicworks/colls/products
    password: <account-key>
    connectionPool: {
      enableSsl: true,
      sslEnabledProtocols: [TLSv1.2]
    }
    serializer: {
      className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0,
      config: {
        serializeResultToString: true
      }
    }
    

    Note

    <account-name><account-key> のプレースホルダーを、このクイックスタートで前に取得した NAMEKEY の値に置き換えます。

  3. remote-secure.yaml ファイルを含む作業フォルダーのコンテキストで新しいターミナルを開きます。

  4. 対話 (--interactive --tty) モードで Docker コンテナー イメージを実行します。 現在の作業フォルダーをコンテナー内の /opt/gremlin-console/conf/ パスにマウントしていることを確認してください。

    docker run -it --mount type=bind,source=.,target=/opt/gremlin-console/conf/ tinkerpop/gremlin-console:3.4
    
  5. Gremlin コンソール コンテナー内で、remote-secure.yaml 構成ファイルを使用してリモートの (Gremlin 用 API) アカウントに接続します。

    :remote connect tinkerpop.server conf/remote-secure.yaml
    

頂点とエッジを作成して走査する

これでコンソールがアカウントに接続されたので、標準の Gremlin 構文を使用して頂点とエッジの両方を作成して走査します。

  1. 次のプロパティを持つ product の頂点を追加します。

    label product
    id 68719518371
    name Kiama classic surfboard
    price 285.55
    category surfboards
    :> g.addV('product').property('id', '68719518371').property('name', 'Kiama classic surfboard').property('price', 285.55).property('category', 'surfboards')
    

    重要

    :> プレフィックスを忘れないでください。 このプレフィックスは、リモートでコマンドを実行するために必要です。

  2. 次のプロパティを持つ別の product 頂点を追加します。

    label product
    id 68719518403
    name Montau Turtle Surfboard
    price 600
    category surfboards
    :> g.addV('product').property('id', '68719518403').property('name', 'Montau Turtle Surfboard').property('price', 600).property('category', 'surfboards')
    
  3. replaces という名前のエッジを作成して、2 つの製品間のリレーションシップを定義します。

    :> g.V(['surfboards', '68719518403']).addE('replaces').to(g.V(['surfboards', '68719518371']))
    
  4. グラフ内のすべての頂点をカウントします。

    :> g.V().count()
    
  5. グラフを走査して、Kiama classic surfboard を置き換えるすべての頂点を見つけます。

    :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Kiama classic surfboard').inE('replaces').outV()
    
  6. グラフを走査して、Montau Turtle Surfboard が置き換えるすべての頂点を見つけます。

    :> g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Montau Turtle Surfboard').outE('replaces').inV()
    

リソースをクリーンアップする

Gremlin 用 API アカウントが必要なくなったら、対応するリソース グループを削除します。

  1. resourceGroupName のシェル変数がまだ存在しない場合は作成します。

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    
  2. az group delete を使ってリソース グループを削除します。

    az group delete \
        --name $resourceGroupName
    

どのように問題を解決しましたか?

Azure Cosmos DB for Apache Gremlin は、Gremlin をサービスとして提供することによって問題を解決しました。 この提供により、独自の Gremlin サーバー インスタンスを起動したり、独自のインフラストラクチャを管理したりする必要はありません。 さらに、時間の経過と共に増加するニーズに合わせてソリューションをスケーリングできます。

Gremlin 用 API アカウントに接続するために、tinkerpop/gremlin-console コンテナー イメージを使用して、ローカル インストールを必要としない方法で Gremlin コンソールを実行しました。 次に、remote-secure.yaml ファイルに格納されている構成を使用して、実行中のコンテナーから Gremlin 用 API アカウントに接続しました。 そこから、複数の一般的な Gremlin コマンドを実行しました。

次のステップ