DataStream API の使用

Datastream

多くの分離されたデータソースを持つ企業では、組織全体の企業データへのアクセスは、特にリアルタイムで困難になる可能性があります。その結果、データへのアクセスが制限されて遅くなり、組織の内省力を妨げることになります。

Datastream は、オンプレミスやクラウドベースのさまざまなデータソースから変更データにほぼリアルタイムでアクセスできるようにし、組織データへのアクセスを提供します。Datastream は、組織全体で最新のエンタープライズ データに誰でもアクセスできるようにする統合消費 API を提供し、統合された準リアルタイムのシナリオを実現します。

そのようなシナリオの一つは、ソース データベースからクラウドベースのストレージ サービスまたはメッセージング キューにデータを転送し、ストレージ サービスまたはメッセージング キューと通信するその他のアプリケーションやサービスによって読み取り可能な形式にこのデータを変換することです。

このチュートリアルでは、Datastream を使用して、ソースの Oracle データベースから Cloud Storage バケット内のフォルダにスキーマ、テーブル、データを転送する方法を学習します。Cloud Storage は、 Google Cloud上にデータを保存してアクセスできるウェブサービスです。このサービスは、Google のクラウドのパフォーマンスとスケーラビリティに、高度なセキュリティ機能と共有機能を組み合わせたものです。

転送先の Cloud Storage バケット内のフォルダにこの情報を転送する操作の一環として、Datastream はこの情報を Avro に変換します。Avro は、JavaScript Object Notation(JSON)で記述されたスキーマによって定義されます。これにより、異なるデータソース間でのデータの読み取りを統一された方法で行うことができます。

目標

このチュートリアルでは、以下の方法について学習します。

  • 環境変数を設定します。これらの変数は、Datastream に対してリクエストを行い、接続プロファイルストリームの両方を作成して管理するときに使用します。
  • Cloud Storage のソースのデータベースと送信先バケットの接続プロファイルを作成および管理します。これらの接続プロファイルを作成することで、ソースのデータベースと転送先の Cloud Storage バケットに関する情報を含むレコードを作成します。Datastream のストリームは、接続プロファイルの情報を使用して、ソースのデータベースから転送先バケットのフォルダにデータを転送します。
  • ストリームを作成、管理する。Datastream は、このストリームを使用して、データ、スキーマ、テーブルをソース データベースから移行先バケットのフォルダに転送します。
  • Datastream が、ソース Oracle データベースのスキーマに関連付けられているデータとテーブルを、転送先バケットのフォルダに転送し、このデータを Avro ファイル形式に変換していることを確認します。
  • Datastream で作成したリソースをクリーンアップして、今後に割り当ての消費や課金が発生しないようにします。

費用

このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。

  • Cloud Storage

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Datastream API を有効にします。

    API を有効にする

  7. ユーザー アカウントに Datastream 管理者のロールが割り当てられていることを確認します。

    IAM ページに移動

  8. Datastream がアクセスできるソース データベースがあることを確認します。このチュートリアルでは、移行元として Oracle データベースを使用します。
  9. Datastream パブリック IP アドレスからの受信接続を許可するようにソース データベースを構成します。すべての Datastream リージョンのロケーションと、それらに関連付けられたパブリック IP アドレスにアクセスするには、IP 許可リストとリージョンをご覧ください。
  10. IP 許可リスト、転送 SSH トンネル、または VPC ピアリングの ネットワーク接続方法を使用して、Datastream がアクセスできる転送先の Cloud Storage バケットが構成されていることを確認します。
  11. Datastream が転送先の Cloud Storage バケット内のフォルダに転送できるデータ、テーブル、スキーマが、ソースのデータベース内にあることを確認してください。
  12. Cloud Shell をダウンロードしてインストールします。このクライアント アプリケーションを使用すると、コマンドラインを使用してクラウド リソース(Datastream を含む)にアクセスできます。
  13. jq ユーティリティをインストールして構成します。このユーティリティは、軽量で柔軟なコマンドライン JSON プロセッサです。このプロセッサを使用して、複雑な cURL コマンドを読みやすいテキストで表示します。

環境変数の設定

この手順では、次の変数を設定します。

  • $PROJECT: この変数は Google Cloud プロジェクトに関連付けられています。割り当てて使用するGoogle Cloud リソースはすべて、プロジェクトに含まれている必要があります。
  • $TOKEN: この変数はアクセス トークンに関連付けられています。アクセス トークンは、Cloud Shell が REST API を使用して Datastream でタスクを実行するために使用するセッションを提供します。
  1. Cloud Shell アプリケーションを起動します。

  2. Google アカウントを使用してアプリケーションを認証したら、次のコマンドを入力します。

    gcloud auth login
    
  3. Do you want to continue (Y/n)? プロンプトで、Y を入力します。

  4. ウェブブラウザを開き、URL をブラウザにコピーします。

  5. Google アカウントを使用して Google Cloud SDK に対して認証します。[ログイン] ページにコードが表示されます。このコードがアクセス トークンです。

  6. アクセス トークンをコピーして、Cloud Shell アプリケーションの Enter verification code: パラメータに貼り付け、Enter を押します。

  7. プロンプトで「PROJECT=\"YOUR_PROJECT_NAME\"」と入力して、$PROJECT 環境変数を Google Cloudプロジェクトに設定します。

  8. プロンプトで「gcloud config set project YOUR_PROJECT_NAME」を入力して、作業するプロジェクトを Google Cloudプロジェクトに設定します。

    コマンド プロンプトは、アクティブなプロジェクトを反映するように更新され、次の形式が適用されます: USERNAME@cloudshell:~ (YOUR_PROJECT_NAME)$

  9. プロンプトで「TOKEN=$(gcloud auth print-access-token)」と入力してアクセス トークンを取得し、変数として保存します。

  10. プロンプトで次のコマンドを入力して、$PROJECT 変数と $TOKEN 変数が正しく設定されていることを確認します。

    • echo $PROJECT
    • echo $TOKEN

変数を設定したので、Datastream に対してリクエストを行い、接続プロファイルとストリームの両方を作成して管理できます。

接続プロファイルを作成して管理する

このセクションでは、Cloud Storage のソースの Oracle データベースと転送先バケットの接続プロファイルを作成して、管理します。

これらの接続プロファイルを作成すると、ソースのデータベースと転送先の Cloud Storage バケットに関する情報を含むレコードが作成されます。Datastream は、接続プロファイルの情報を使用して、ソースのデータベースから転送先バケットのフォルダにデータを転送します。

接続プロファイルの作成と管理には、次のものが含まれます。

  • ソースの Oracle データベースと Cloud Storage の転送先バケットの接続プロファイルの作成
  • 接続プロファイルに関する情報を取得する
  • 接続プロファイルの変更
  • ソース Oracle 接続プロファイルで Discover API 呼び出しを実行する。この呼び出しにより、データベース内部を覗いてそのオブジェクトに関連付けられているオブジェクトを確認できます。これらのオブジェクトには、データベースのデータを含むスキーマとテーブルが含まれます。Datastream を使用してストリームを構成する際には、すべてのオブジェクトをデータベースから pull するのではなく、オブジェクトのサブセット(たとえば、データベースの特定のテーブルとスキーマ)のみを pull することをおすすめします。Discover API を使用して、取得するデータベース オブジェクトのサブセットを見つけます。

接続プロファイルの作成

この手順では 2 つの接続プロファイル(移行元 Oracle データベースへの接続と、Cloud Storage 内の移行先バケットへの接続)を作成します。

  1. 移行元 Oracle データベースへの接続プロファイルを作成するプロンプトが表示されたら、次のコマンドを入力します。
ORACLE="{\"displayName\":\"DISPLAY_NAME\",\"oracle_profile\":{\"hostname\":\"HOSTNAME\",\"username\":\"USERNAME\",\"password\":\"PASSWORD\",\"database_service\":\"DATABASE_SERVICE\",\"port\":"PORT_NUMBER\"},\"no_connectivity\":{}}"
  

次の表は、ソースの Oracle データベースのパラメータ値を理解する際に役立ちます。

パラメータ値次のものに変更します
DISPLAY_NAMEソースのデータベースへの接続プロファイルの表示名。
HOSTNAMEソースのデータベース サーバーのホスト名。
USERNAMEソースのデータベースのアカウントのユーザー名(例: ROOT)。
PASSWORDソースのデータベース用のアカウントのパスワード。
DATABASE_SERVICEソースのデータベースが確実に保護され、モニタリングされるサービス。Oracle データベースの場合、データベース サービスは通常 ORCL です。
PORT_NUMBERソース データベース用に予約されているポート番号。Oracle データベースの場合、通常、ポート番号は 1521 です。

  1. プロンプトで echo $ORACLE | jq コマンドを入力すると、作成したソースの接続プロファイルが読みやすいテキストで表示されます。

    {
      "displayName": "DISPLAY_NAME",
      "oracle_profile": {
        "hostname": "HOSTNAME",
        "username": "USERNAME",
        "password": "PASSWORD",
        "database_service": "DATABASE_SERVICE",
        "port": PORT_NUMBER
       },
      "no_connectivity": {}
    }
  2. Oracle 接続プロファイルを送信して、この接続プロファイルを作成できるようにします。プロンプトが表示されたら、次のコマンドを入力します。

    curl -X POST -d $ORACLE -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles?connection_profile_id=SOURCE_CONNECTION_PROFILE_ID

    次の表は、このコマンドのパラメータ値を理解する際に役立ちます。

    パラメータ値次のものに変更します
    DATASTREAM_API_VERSIONDatastream API の現在のバージョン(例: v1)。
    PROJECT_PATH Google Cloud プロジェクトのフルパス(例: projects/$PROJECT/locations/YOUR_PROJECT_LOCATION)。
    SOURCE_CONNECTION_PROFILE_IDこの接続プロファイル用に予約された一意の ID(cp-1 など)。
  3. 次のコードの行が表示されていることを確認します。

    {
      "name": "PROJECT_PATH/operations/operation-SOURCE_CONNECTION_PROFILE_OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.datastream.DATASTREAM_API_VERSION.OperationMetadata",
        "createTime": "DATE_AND_TIME_STAMP",
        "target": "datastream.googleapis.com/DATASREAM_VERSION/PROJECT_PATH/connectionProfiles/SOURCE_CONNECTION_PROFILE_ID",
        "verb": "create",
        "requestedCancellation": false,
        "apiVersion": "DATASTREAM_API_VERSION"
      },
      "done": false
    }
  4. Cloud Storage の宛先バケットへの接続プロファイルを作成します。プロンプトが表示されたら、次のコマンドを入力します。

    GOOGLECLOUDSTORAGE="{\"displayName\":\"DISPLAY_NAME\",\"gcs_profile\":{\"bucket\":\"BUCKET_NAME\",\"root_path\":\"/FOLDER_PATH\"},\"no_connectivity\":{}}"

    次の表は、転送先バケットのパラメータ値を理解する際に役立ちます。

    パラメータ値次のものに変更します
    DISPLAY_NAME転送先バケットの接続プロファイルの表示名。
    BUCKET_NAME転送先バケットの名前。
    FOLDER_PATHDatastream がソースのデータベースからデータを転送する転送先バケット内のフォルダ(例: /root/path)。
  5. プロンプトで echo $GOOGLECLOUDSTORAGE | jq コマンドを入力すると、作成した転送先の接続プロファイルが読みやすいテキストで表示されます。

    {
      "displayName": "DISPLAY_NAME",
      "gcs_profile": {
        "bucket": "BUCKET_NAME",
        "root_path": "/FOLDER_PATH"
      },
      "no_connectivity": {}
    }
  6. Cloud Storage 接続プロファイルを送信して、この接続プロファイルを作成できるようにします。プロンプトが表示されたら、次のコマンドを入力します。

    curl -X POST -d $GOOGLECLOUDSTORAGE -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles?connection_profile_id=DESTINATION_CONNECTION_PROFILE_ID
  7. 次のコードの行が表示されていることを確認します。

    {
      "name": "PROJECT_PATH/operations/operation-DESTINATION_CONNECTION_PROFILE_OPERATION_ID",
      "metadata": {
        "@type": "@type": "type.googleapis.com/google.cloud.datastream.DATASTREAM_API_VERSION.OperationMetadata",
        "createTime": "DATE_AND_TIME_STAMP",
        "target": "datastream.googleapis.com/DATASTREAM_VERSION/PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID",
        "verb": "create",
        "requestedCancellation": false,
        "apiVersion": "DATASTREAM_API_VERSION"
      },
      "done": false
    }
  8. 両方の接続プロファイルが作成されていることを確認します。プロンプトが表示されたら、次のコマンドを入力します。

    curl -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" https://datastream.googleapis.com/DATASTREAM_API_VERSION/PROJECT_PATH/connectionProfiles
  9. ソースと送信先の両方の接続プロファイルで、2 つの結果が返されることを確認します。

    {
      "connectionProfiles": [
        {
          "name": "PROJECT_PATH/connectionProfiles/DESTINATION_CONNECTION_PROFILE_ID",
          "createTime": "DATE_AND_TIME_STAMP",
          "updateTime": "DATE_AND_TIME_STAMP",