9.2.12 Azure Blob Storage

トピック:

9.2.12.1 概要

Azure Blob Storage (ABS)は、Azure Cloudにオブジェクトを格納するためのサービスです。拡張性が高く、クラウドネイティブのワークロード、アーカイブ、データ・レイク、高パフォーマンス・コンピューティングおよび機械学習のためのセキュアなオブジェクト・ストレージです。Azure Blob Storage Eventハンドラを使用して、ファイル・ライター・ハンドラによって生成されたファイルをABSにロードできます。

9.2.12.2 前提条件

次が設定されていることを確認します。
  • Azureクラウド・アカウントの設定。
  • Azure Blob Storage用のJava Software Development Kit (SDK)

9.2.12.3 ストレージ・アカウント、コンテナおよびオブジェクト

  • ストレージ・アカウント: Azureストレージ・アカウントには、すべてのAzureストレージ・データ・オブジェクト(blob、ファイル共有、キュー、テーブル、ディスク)が含まれます。
  • コンテナ: コンテナは、ファイル・システムのディレクトリと同様に、blobのセットを編成します。ストレージ・アカウントには制限のない数のコンテナを含めることができ、コンテナには制限のない数のblobを格納できます。
  • オブジェクト/blobs: オブジェクトまたはblobは、ストレージ・アカウント・コンテナに格納する個々のデータです。

9.2.12.4 構成

ABSイベント・ハンドラの選択を有効にするには、まずgg.eventhandler.name.type=absおよび次のABSプロパティを指定してイベント・ハンドラ・タイプを構成する必要があります。

プロパティ 必須/オプション 有効な値 デフォルト 説明
gg.eventhandler.name.type 必須 abs なし ファイル・ライター・ハンドラで使用するABSイベント・ハンドラを選択します。
gg.eventhandler.name.bucketMappingTemplate 必須 Azureストレージ・アカウントのコンテナ名を動的に生成するために使用される解決可能なキーワードおよび定数を含む文字列。 なし この名前を使用してコンテナが存在しない場合は、ABSイベント・ハンドラによって作成されます。https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-namesを参照してください。サポートされているキーワードについては、テンプレート・キーワードを参照してください
gg.eventhandler.name.pathMappingTemplate 必須 ファイルを書き込むAzureストレージ・アカウント・コンテナのパスを動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 なし 定数とともにインタレースされるキーワードを使用して、一意のAzureストレージ・アカウント・コンテナ・パス名を実行時に動的に生成します。パス名の例: ogg/data/${groupName}/${fullyQualifiedTableName}。サポートされているキーワードについては、テンプレート・キーワードを参照してください
gg.eventhandler.name.fileNameMappingTemplate オプション Azure Blobオブジェクトのファイル名を動的に生成するために使用される、解決可能なキーワードと定数を含む文字列。 なし Azure Blobオブジェクト・ファイル名を動的に生成するために使用される、解決可能なキーワードおよび定数を使用します。設定しない場合、アップストリームのファイル名が使用されます。サポートされているキーワードについては、テンプレート・キーワードを参照してください
gg.eventhandler.name.finalizeAction オプション none | delete none ファイナライズ・アクションでAzure Blobデータ・ファイルを残すには、noneを設定します。ファイナライズ・アクションでAzure Blobデータ・ファイルを削除するには、deleteに設定します。
gg.eventhandler.name.eventHandler オプション 子イベント・ハンドラを相互参照する一意の文字列識別子。 イベント・ハンドラは構成されない。 ファイル・ロール・イベントで呼び出されるダウンストリーム・イベント・ハンドラを設定します。
gg.eventhandler.name.accountName 必須 文字列 なし Azureストレージ・アカウント名。
gg.eventhandler.name.accountKey オプション 文字列 なし Azureストレージ・アカウント・キー。
gg.eventhandler.name.sasToken オプション 文字列 なし 共有アクセス署名(SAS)を使用してAzureサービスに対して認証する資格を設定します。
gg.eventhandler.name.tenantId オプション 文字列 なし アプリケーションのAzureテナントIDを設定します。
gg.eventhandler.name.clientId オプション 文字列 なし アプリケーションのAzureクライアントIDを設定します。
gg.eventhandler.name.clientSecret オプション 文字列 なし 認証のAzureクライアント・シークレットを設定します。
gg.eventhandler.name.accessTier オプション Hot | Cool | Archive なし Azure blob/オブジェクトの層を設定します。Azureストレージには様々なアクセス層があり、最もコスト効率に優れた方法でblobオブジェクト・データを格納できます。使用可能なアクセス層には、ホット、クールおよびアーカイブが含まれます。詳細は、https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-storage-tiersを参照してください。
gg.eventhandler.name.endpoint オプション 文字列 https://<accountName>.blob.core.windows.net Azure Storageサービス・エンドポイントを設定します。Azure Government Cloud構成を参照

9.2.12.4.1 クラスパス構成

ABSイベント・ハンドラは、Azure Blob Storage用のJava SDKを使用します。

ノート:

クラスパスにAzure Blob Storage Java SDKへのパスが含まれていることを確認します。

9.2.12.4.2 依存性

次のmaven座標を使用してSDKをダウンロードします。
<dependencies>
    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-blob</artifactId>
      <version>12.13.0</version>
    </dependency>
    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.3.3</version>
    </dependency>
</dependencies>

9.2.12.4.3 認証

次のいずれかを構成することで、Azure Storageデバイスを認証できます。
  • accountKey
  • sasToken
  • tenandIdclientIDおよびclientSecret

accounkKeyの優先度が最も高く、その後にsasTokenが続きます。accountKeyおよびsasTokenが設定されていない場合は、タプルtenantIdclientIdおよびclientSecretが使用されます。

9.2.12.4.3.1 AzureテナントID、クライアントIDおよびクライアント・シークレット
次のいずれかを構成することで、Azure Storageデバイスを認証できます。
AzureテナントIDを取得するには:
  1. Microsoft Azureポータルに移動します。
  2. 左側のリストから「Azure Active Directory」を選択し、「Azure Active Directory」パネルを表示します。
  3. 「Azure Active Directory」パネルで「プロパティ」を選択し、Azure Active Directoryのプロパティを表示します。
AzureテナントIDは、「ディレクトリID」とマークされているフィールドです。
AzureクライアントIDおよびクライアント・シークレットを取得するには:
  1. Microsoft Azureポータルに移動します。
  2. 左側のリストから「すべてのサービス」を選択し、Azureサービスのリストを表示します。
  3. フィルタ・コマンド・ボックスに「アプリ」と入力し、リストされたサービスから「アプリの登録」を選択します。
  4. 作成した「アプリの登録」を選択して、Azure Storageにアクセスします。
「アプリの登録」に表示されるアプリケーションIDは、クライアントIDです。クライアント・シークレットは、新しいキーが追加されたときに生成されるキー文字列です。この生成されたキー文字列は、キーの作成時に1回のみ表示されます。生成されたキー文字列がわからない場合は、別のキーを作成し、生成されたキー文字列を確実に取得してください。

9.2.12.4.4 プロキシ構成

プロキシ・サーバーの背後でプロセスを実行する場合、jvm.bootoptionsプロパティを使用して、既知のJavaプロキシ・プロパティを使用してプロキシ・サーバー構成を設定できます。

たとえば:

jvm.bootoptions=-Dhttps.proxyHost=some-proxy-address.com -Dhttps.proxyPort=80
-Djava.net.useSystemProxies=true

9.2.12.4.5 サンプル構成

 #The ABS Event Handler
    gg.eventhandler.abs.type=abs
    gg.eventhandler.abs.pathMappingTemplate=${fullyQualifiedTableName}
    #TODO: Edit the Azure Blob Storage container name
    gg.eventhandler.abs.bucketMappingTemplate=<abs-container-name>
    gg.eventhandler.abs.finalizeAction=none
    #TODO: Edit the Azure storage account name.
    gg.eventhandler.abs.accountName=<storage-account-name>
    #TODO: Edit the Azure storage account key.
    #gg.eventhandler.abs.accountKey=<storage-account-key>
    #TODO: Edit the Azure shared access signature(SAS) to authenticate to an Azure Service.
    #gg.eventhandler.abs.sasToken=<sas-token>
    #TODO: Edit the the tenant ID of the application.
    gg.eventhandler.abs.tenantId=<azure-tenant-id>
    #TODO: Edit the the client ID of the application. 
    gg.eventhandler.abs.clientId=<azure-client-id>
    #TODO: Edit the the client secret for the authentication.
    gg.eventhandler.abs.clientSecret=<azure-client-secret>
    gg.classpath=/path/to/abs-deps/*
    #TODO: Edit the proxy configuration.
    #jvm.bootoptions=-Dhttps.proxyHost=some-proxy-address.com -Dhttps.proxyPort=80 -Djava.net.useSystemProxies=true

9.2.12.4.6 Azure Government Cloud構成

Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)でAzure Government Cloudに存在するストレージ・アカウントにデータを複製する必要がある場合は、さらに構成が必要です。

次の表に従って、環境変数AZURE_AUTHORITY_HOSTおよびgg.eventhandler.{name}.endpointを設定します。
Government Cloud AZURE_AUTHORITY_HOST gg.eventhandler.{name}.endpoint

Azure US Government Cloud

https://login.microsoftonline.us.

https://<storage-account-name>.blob.core.usgovcloudapi.net

Azure German Cloud

https://login.microsoftonline.de

https://<storage-account-name>.blob.core.cloudapi.de

Azure China Cloud

https://login.chinacloudapi.cn https://<storage-account-name>.blob.core.chinacloudapi.cn

環境変数は、Oracle GoldenGateのsetenvパラメータを使用してreplicat prmファイルに設定できます。

例:

setenv (AZURE_AUTHORITY_HOST = "https://login.microsoftonline.us")

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

エラー:機密クライアントはクロス・クラウド・リクエストでサポートされていません。

これは、ターゲットのAzureストレージ・アカウントがAzure Government Cloudの1つに存在することを示しています。Azure Government Cloud構成に従って必要な構成を設定します。

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

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

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

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

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