9.2.22 Google Cloud Storage

トピック:

9.2.22.1 概要

Google Cloud Storage (GCS)は、Google Cloud Platformにオブジェクトを格納するためのサービスです。

GCSイベント・ハンドラを使用して、ファイル・ライター・ハンドラによって生成されたファイルをGCSにロードできます。

9.2.22.2 前提条件

次の設定を実行してください。
  • Google Cloud Platform (GCP)アカウントの設定。
  • 関連する権限を持つGoogleサービス・アカウント・キー。
  • GCS Java Software Developement Kit (SDK)

9.2.22.3 バケットとオブジェクト

バケットは、データ(オブジェクト)を格納するGCS内の基本コンテナです。
オブジェクトは、クラウド・ストレージ・バケットに格納される個々のデータです。

9.2.22.4 認証と認可

Google Cloud Platform (GCP)サービス・アカウントは、個人ではなくアプリケーションによって使用される特別な種類のアカウントです。Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)では、GCSサービスへのアクセスにサービス・アカウント・キーが使用されます。

関連するIdentity and Access Management (IAM)権限を持つサービス・アカウント・キーを作成する必要があります。

JSONキー・タイプを使用して、サービス・アカウント・キー・ファイルを生成します。

環境変数GOOGLE_APPLICATION_CREDENTIALSまたはGCSイベント・ハンドラ・プロパティgg.eventhandler.name.credentialsFileで、サービス・アカウント・キー・ファイルへのパスを設定できます。資格証明ファイルのパスを直接指定するのではなく、clientIdclientEmailprivateKeyIdprivateKeyなどの資格証明ファイルの個々のキーを対応するハンドラ・プロパティに指定することもできます。これにより、Oracleウォレットを使用して資格証明キーを暗号化できます。

サービス・アカウント・キーの作成の詳細は、GCPドキュメントを参照してください。

GCSイベント・ハンドラの実行に使用されるサービス・アカウントに追加するIAM権限を次に示します。

9.2.22.4.1 バケット権限

表9-28 バケット権限

バケット権限名 説明
storage.buckets.create プロジェクトに新規バケットを作成します。
storage.buckets.delete バケットを削除します。
storage.buckets.get IAMポリシーを除くバケット・メタデータを読み取ります。
storage.buckets.list プロジェクト内のバケットをリストします。リスト時に、IAMポリシーを除くバケット・メタデータも読み取ります。
storage.buckets.update IAMポリシーを除くバケット・メタデータを更新します。

9.2.22.4.2 オブジェクト権限

表9-29 オブジェクト権限

オブジェクト権限名 説明
storage.objects.create 新しいオブジェクトをバケットに追加します。
storage.objects.delete オブジェクトを削除します。
storage.objects.get ACLを除くオブジェクト・データとメタデータを読み取ります。
storage.objects.list バケット内のオブジェクトをリストします。リスト時に、ACLを除くオブジェクト・メタデータも読み取ります。
storage.objects.update ACLを除くオブジェクト・メタデータを更新します。

9.2.22.5 構成

表9-30 オブジェクト権限

プロパティ 必須/オプション 有効な値 デフォルト 説明
gg.eventhandler.name.type 必須 gcs なし ファイル・ライター・ハンドラで使用するGCSイベント・ハンドラを選択します。
gg.eventhandler.name.location オプション 有効なGCSの場所。 なし GCSバケットが存在しない場合、このGCSの場所に新しいバケットが作成されます。場所を指定しないと、新しいバケットの作成は失敗します。GCSロケーション参照: GCSロケーション
gg.eventhandler.name.bucketMappingTemplate 必須 GCSバケット名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 なし この名前を使用してGCSバケットが存在しない場合は、GCSイベント・ハンドラによって作成されます。バケットのネーミング・ガイドラインを参照してください。サポートされているキーワードの詳細は、「テンプレートのキーワード」を参照してください。
gg.eventhandler.name.pathMappingTemplate 必須 ファイルを書き込むGCSバケットのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 なし 定数とインタレースされたキーワードを使用して、一意のGCSパス名を実行時に動的に生成します。パス名の例: ogg/data/${groupName}/${fullyQualifiedTableName}。サポートされているキーワードの詳細は、テンプレート・キーワードを参照してください。
gg.eventhandler.name.fileNameMappingTemplate オプション GCSオブジェクトのファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 なし GCSオブジェクト・ファイル名を動的に生成するために使用される、解決可能なキーワードと定数を使用します。設定しない場合、アップストリームのファイル名が使用されます。サポートされているキーワードの詳細は、テンプレート・キーワードを参照してください。
gg.eventhandler.name.finalizeAction オプション 子イベント・ハンドラを相互参照する一意の文字列識別子。 イベント・ハンドラは構成されない。 ファイル・ロール・イベントで呼び出されるダウンストリーム・イベント・ハンドラを設定します。一般的な例では、ダウンストリームを使用して、BigQueryイベント・ハンドラを使用してGCSデータをGoogle BigQueryにロードします。
gg.eventhandler.name.credentialsFile オプション サービス・アカウント・キー・ファイルへの相対パスまたは絶対パス。 なし サービス・アカウント・キー・ファイルへのパスを設定します。または、環境変数GOOGLE_APPLICATION_CREDENTIALSがサービス・アカウント・キー・ファイルへのパスに設定されている場合、このパラメータを設定する必要はありません。
gg.eventhandler.name.storageClass オプション STANDARD|NEARLINE |COLDLINE|ARCHIVE| REGIONAL|MULTI_REGIONAL| DURABLE_REDUCED_AVAILABILITY なし オブジェクトに設定するストレージ・クラスは、オブジェクトの可用性および価格設定モデルに影響します。このプロパティが設定されていない場合、ファイルのストレージ・クラスは、各バケットのデフォルトのストレージ・クラスに設定されます。バケットが存在せず、ストレージ・クラスが指定されている場合、このストレージ・クラスをデフォルトとして新しいバケットが作成されます。
gg.eventhandler.name.kmsKey オプション 次の形式のキー名: projects/<PROJECT>/locations/<LOCATION>/keyRings/<RING_NAME>/cryptoKeys/<KEY_NAME><PROJECT>: GoogleプロジェクトID。<LOCATION>: GCSバケットの場所。<RING_NAME>: Google Cloud KMSキー・リング名。 <KEY_NAME>: Google Cloud KMSキー名。 なし Google Cloud Storageは、Google管理の暗号化キーを使用してディスクに書き込む前に、サーバー側のデータを常に暗号化します。セキュリティの追加レイヤーとして、お客様はGoogle Cloud Key Management Service (KMS)で生成されたキーを使用することを選択できます。このプロパティは、GCSオブジェクトを暗号化するための顧客管理のクラウドKMSキーの設定に使用できます。顧客管理キーを使用する場合、顧客管理キーを使用したGCPではオブジェクト・コンポジションを使用したマルチパート・アップロードが許可されないため、 gg.eventhandler.name.concurrencyプロパティを1より大きい値に設定できません。
gg.eventhandler.name.concurrency オプション 1から32までの任意の数。 10 同時実行性が1より大きい値に設定されている場合、GCSイベント・ハンドラはコンポジションを使用してマルチパートのアップロードを実行します。マルチパートのアップロードでは、各パートをアップロードするためのコンカレント・スレッドが生成されます。個々のパートは次のディレクトリ<bucketMappingTemplate>/oggtmpにアップロードされます。このディレクトリは、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)で使用するために予約されています。これにより、大きいファイルをアップロードするためのスループットが向上します。マルチパート・アップロードは、サイズが10MBを超えるファイルに使用されます。
gg.eventhandler.gcs.clientId オプション 有効なBig Query資格証明クライアントID 該当なし Google Big Queryサービス・アカウントに接続するための資格証明ファイルのクライアントIDキーを指定します。
gg.eventhandler.gcs.clientEmail オプション 有効なBig Query資格証明クライアント電子メール 該当なし Google Big Queryサービス・アカウントに接続するための資格証明ファイルのクライアント電子メール・キーを指定します。
gg.eventhandler.gcs.privateKeyId オプション 有効なBig Query資格証明クライアント電子メール 該当なし Google Big Queryサービス・アカウントに接続するための資格証明ファイルのクライアント電子メール・キーを指定します。
gg.eventhandler.gcs.privateKey オプション 有効なBig Query資格証明秘密キー。 該当なし Google Big Queryサービス・アカウントに接続するための資格証明ファイルの秘密キーを指定します。
gg.eventhandler.name.projectId オプション サービス・アカウントに関連付けられたGoogle project-id | project-id 該当なし ストレージ・バケットを格納するGoogle Cloudプロジェクトのproject-idを設定します。ユーザーが明示的にオーバーライドしないかぎり、自動構成では、サービス・アカウント・キー・ファイルにアクセスしてこのプロパティが自動的に構成されます。
gg.eventhandler.name.url オプション スキーム、サーバー名およびポート(デフォルト・ポートでない場合)を含む、Google Cloud Storageに接続するための有効なURL。デフォルトは、https://storage.googleapis.comです。 https://storage.googleapis.com ユーザーは、プライベート・エンドポイントがGCSに接続するためのURLを設定できます。

ノート:

GCSをGoogle Cloud Serviceアカウントに接続できるようにするには、資格証明JSONファイルへの相対パスまたは絶対パスを含む資格証明ファイル・プロパティ、または個々の資格証明キーのプロパティのいずれかが構成されていることを確認します。googleサービス・アカウントの資格証明キーを個別に追加する構成プロパティにより、Oracleウォレットを使用して暗号化できます。

9.2.22.5.1 クラスパス構成

GCSイベント・ハンドラは、Google Cloud Storage用のJava SDKを使用します。クラスパスには、GCS SDKへのパスが含まれている必要があります。

9.2.22.5.1.1 依存性
SDKは次のmaven座標を使用してダウンロードできます。
<dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-storage</artifactId>
        <version>1.113.9</version>
    </dependency>

または、スクリプト <OGGDIR>/DependencyDownloader/gcs.shを実行して、GCS依存性をダウンロードできます。

gg.classpath構成パラメータを編集して、GCS SDKへのパスを含めます。

9.2.22.5.2 プロキシ構成

Replicatプロセスがプロキシ・サーバーの背後で実行される場合、jvm.bootoptionsプロパティを使用してプロキシ・サーバー構成を設定できます。次に例を示します:
jvm.bootoptions=-Dhttps.proxyHost=some-proxy-address.com
-Dhttps.proxyPort=80

9.2.22.5.3 サンプル構成

#The GCS Event handler
gg.eventhandler.gcs.type=gcs
gg.eventhandler.gcs.pathMappingTemplate=${fullyQualifiedTableName}
#TODO: Edit the GCS bucket name
gg.eventhandler.gcs.bucketMappingTemplate=<gcs-bucket-name>
#TODO: Edit the GCS credentialsFile
gg.eventhandler.gcs.credentialsFile=/path/to/gcs/credentials-file
gg.eventhandler.gcs.finalizeAction=none
gg.classpath=/path/to/gcs-deps/*
jvm.bootoptions=-Xmx8g -Xms8g

9.2.22.6 トラブルシューティングと診断

Replicatリカバリ後の重複レコード

Google Cloud Storage (GCS)ハンドラ・レプリケーションでは、Replicatでファイル・ライター・ハンドラとGCSハンドラが使用されます。Oracle GoldenGateでは、データ損失がないことが優先されており、GCS (jsoncsvdelimtedtextavro_orcparquet)配信において、1回以上のセマンティクスによって、障害発生時にデータ損失がないことが保証されます。Replicatが正常に実行され、正常に停止された場合に、1回のみがサポートされています。障害(ネットワーク障害が原因)が発生した場合は、リカバリにおいて、様々な理由で、重複が発生する可能性があります。

重複が発生する可能性がある2つのケース:

  1. データが書き込まれ、そのデータの書込みからチェックポイントの移動までの間に障害が発生した場合。その後、Replicatを再起動すると、前のチェックポイントまでバックアップされて、残念ながらデータが繰り返される可能性があります。
  2. データファイルのローリングは、お客様が構成したトリガーに基づいて実行されます。トリガーは、ファイル・サイズ、時間、非アクティブまたは時刻です。ローリングは、必ずしもトランザクション・コミット境界で起こるとはかぎりません。トリガーにより、現在のファイルへの書込みが完了し、後処理の変換および移動が完了し、そのファイルに関する状態が削除されます。ローリングが処理されてからチェックポイントが移動されるまでの間にReplicatの異常終了が発生した場合は、再起動時に、これらのメッセージが再び繰り返される可能性があります。

GCSのReplicatリカバリによって重複レコードが発生した場合、それは、想定されている動作です。Replicatが正常に実行されている間に重複が発生した場合は、サポート・チケットをご利用ください。