빠른 시작: Gremlin 콘솔 및 Apache Gremlin용 Azure Cosmos DB를 사용하여 꼭짓점 및 에지 트래버스

적용 대상: 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 서비스 작업을 수행할 수 있습니다. 로컬 환경에 아무 것도 설치할 필요 없이 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. accountName, resourceGroupNamelocation에 대한 셸 변수를 만듭니다.

    # 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. 기본 설정으로 새 API for Gremlin 계정을 만들려면 az cosmosdb create를 사용합니다.

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

    참고 항목

    Azure 구독당 최대 1개의 체험 계층 Azure Cosmos DB 계정을 사용할 수 있으며 계정을 만들 때 옵트인해야 합니다. 이 명령이 무료 계층 할인을 적용하지 못하면 구독의 다른 계정이 이미 무료 계층으로 사용하도록 설정되었음을 의미합니다.

  5. az cosmosdb show를 사용하여 계정의 Gremlin용 API 엔드포인트 NAME을 가져옵니다.

    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
      }
    }
    

    참고 항목

    <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. 다음 속성을 사용하여 제품에 대한 꼭짓점을 추가합니다.

    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')
    

    Important

    :> 접두사를 잊지 마세요. 명령을 원격으로 실행하려면 이 접두사가 필요합니다.

  2. 다음 속성을 사용하여 다른 제품 꼭짓점을 추가합니다.

    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라는 에지를 만들어 두 제품 간의 관계를 정의합니다.

    :> 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 명령을 실행했습니다.

다음 단계