Datastore에 외부에서 액세스하는 방법

GAE/py인 환경에서 Datastore에 액세스하고 있습니다만, GCE나 로컬 환경으로부터 액세스하고 싶어지는 경우도 있습니다.

방법은 2개 정도 있다고 생각합니다.
  • GAE Remote API (remote_api_shell.py)
  • Google Cloud Datastore API (gcloud-python)

  • 그 밖에도 접근은 있을 것 같습니다만. .
  • Google Cloud Datastore RPC API 래퍼 라이브러리
  • GAE의 Task Queue

  • 등.

    Remote API 사용



    Accessing App Engine with Remote API
    표준 기능으로 Remote API가 있습니다.
    gcloud sdk로 python sdk를 넣어? 그리고 remote_api_shell.py 에 패스가 다니고 있다고 생각합니다.
    또한 GAE의 app.yaml에

    app.yaml
    application: PROJECT_ID
    version: 1
    runtime: python27
    api_version: 1
    
    ## ここを追加
    builtins:
    - remote_api: on
    

    와 같이 builtins의 remote_api를 활성화합니다.

    그 상태에서 deploy가 완료되면,
    $ remote_api_shell.py PROJECT_ID
    

    그렇다면 로컬 파이썬 환경에서 원격 datastore 등에 직접 닿을 수 있다고 생각합니다.
    로컬 환경에서 google.appengine.ext.ndb 를 import할 수 있는 환경이라면 ndb의 모델도 import하여 AppEngine에서처럼 액세스할 수 있어 편리합니다.
    from google.appengine.ext import ndb
    
    class MyModel(ndb.Model):
        number = ndb.IntegerProperty(default=42)
        text = ndb.StringProperty()
    
    # GAE上で取得するようにリモートのデータを取得できる。
    models = MyModel.query().fetch()
    

    그러나, 주의점으로서, 꽤 느립니다.
    원인을 조사하려고 GAE 로그를 보면,


    와 같이, /_ah/remote_api 앞으로 http요청이 발생하고 있습니다. 아마도 query 단위로 http 요청을 많이 하고 있기 때문에 오버헤드가 커져 처리가 무거운 것일까, 생각합니다.

    Cloud Datastore API 사용



    올해 출시된 Google Cloud Datastore API를 사용하면 성능 문제를 해결할 것입니다.
    Google Cloud Datastore API 새로운 베타로 성능 향상

    이 기사를 보면서하면 알기 쉽습니다.
    Getting started with the Google Cloud Datastore API

    gcloud 명령이 유효한 상황에서
    $ pip install gcloud
    

    그렇다면 gcloud-python을 설치할 수 있습니다.

    gcloud의 auth가 유효하다면 파이썬 스크립트와 콘솔에서 datastore 관련 라이브러리를 import하여 사용할 수 있습니다.
    from gcloud import datastore
    
    client = datastore.Client(PROJECT_ID)
    # こうするとqueryでiteratorが取得できる。
    task = cli.query(kind='Task').fetch()
    

    사용법은 튜토리얼이나 아래의 github 페이지를 확인하십시오.
    gcloud-python

    우선 remote api에 비해 성능이 좋습니다.
    또한 datastore에 세션을 붙인 채인지, iterator도 지연 fetch에서 cursor가 거기에 올 때마다 통신하여 취득하고있는 것 같습니다.
    따라서 Remote API와 같이 많은 정보를 얻으려고하면 굳어지거나 하는 일이 적습니다.

    주의점



    주의점으로서는 아직 beta판이므로 사양등은 여러가지 변경이 될 가능성이 있습니다.
    또한 gcloud 인증이 통과하는 환경이어야 합니다.
    게다가 ndb와 같은 ORMapper가 없기 때문에 약간 편집하기가 어렵고 GAE 코드에 영향을 줄 수 있습니다.

    그렇다고는 해도, GCE 환경으로부터 액세스 할 때 등에는 편리가 좋기 때문에, 앞으로는 꼭 이쪽의 API를 사용해야 할 것입니다.
    정식 릴리스에서는 ndb등을 사용할 수 있게 될지도 모릅니다.

    Google Cloud Datastore RPC API 래퍼 라이브러리



    Datastore RPC API의 파이썬 래퍼 라이브러리가 공식적으로 제공됩니다.
    GoogleCloudPlatform/google-cloud-datastore :googledatastore

    일단, RPC API의 업데이트에 추종해 멘테는 세세하게 되어 있는 것 같습니다.

    단, authenticate credential가 필요하거나, interface가 조금 낡은 느낌이므로, 별로 추천은 할 수 없을 것 같습니다.

    Task Queue



    Push Queue등을 잘 사용하면 외부 트리거로 Datastore의 정보의 재기록 등은 할 수 있습니다.
    다만, 미리 task를 준비해 두거나, task의 시간 제한등이 있으므로, 액세스 할 수 있다, 라고 하는 느낌은 아닙니다.

    좋은 웹페이지 즐겨찾기