Azure Cosmos DB 接続 - AWS Glue

Azure Cosmos DB 接続

AWS Glue for Spark を使用すると、AWS Glue 4.0 以降のバージョンの NoSQL API を使用して、Azure Cosmos DB の既存のコンテナとの間で読み取りと書き込みを行うことができます。SQL クエリを使用して、Azure Cosmos DB から何を読み取るかを定義できます。AWS Glue 接続を通じて AWS Secrets Manager に保存されている Azure Cosmos DB キーを使用して Azure Cosmos DB に接続します。

Azure Cosmos DB for NoSQL の詳細については、Azure のドキュメントを参照してください。

Azure Cosmos DB 接続の設定

AWS Glue から Azure Cosmos DB に接続するには、Azure Cosmos DB キーを作成して AWS Secrets Manager シークレットに保存し、そのシークレットを Azure Cosmos DB AWS Glue 接続に関連付ける必要があります。

前提条件:

Azure Cosmos DB に対する接続を設定するには:
  1. AWS Secrets Manager で、Azure Cosmos DB キーを使用してシークレットを作成します。Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの「AWS Secrets Manager シークレットを作成する」にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名 secretName を保存しておきます。

    • [key/value ペア] を選択する際に、cosmosKey という値を持つキー spark.cosmos.accountKey のペアを作成します。

  2. AWS Glue コンソールで、「AWS Glue 接続の追加」にあるステップに従って接続を作成します。接続を作成したら、将来的に AWS Glue で使用するために、接続名 connectionName を維持します。

    • [接続タイプ] を選択する際に、[Azure Cosmos DB] を選択します。

    • [AWS Secret] をクリックして、secretName を入力します。

AWS Glue Azure Cosmos DB 接続を作成した後、AWS Glue ジョブを実行する前に次のステップを実行する必要があります。

  • AWS Glue ジョブに関連付けられている IAM ロールに secretName を読み取るアクセス許可を付与します。

  • AWS Glue ジョブ設定で、追加のネットワーク接続として connectionName を指定します。

Azure Cosmos DB for NoSQL コンテナからの読み取り

前提条件:

  • 読み取り元とする Azure Cosmos DB for NoSQL コンテナ。コンテナの識別情報が必要になります。

    Azure Cosmos for NoSQL コンテナは、データベースとコンテナによって識別されます。Azure Cosmos for NoSQL API に接続する際には、データベース cosmosDBName とコンテナ cosmosContainerName の名前を指定する必要があります。

  • 認証およびネットワークの場所の情報を提供するように設定された AWS Glue Azure Cosmos DB 接続。これを取得するには、前の手順の「Azure Cosmos DB に対する接続を設定するには」のステップを実行します。AWS Glue 接続、connectionName の名前が必要になります。

例:

azurecosmos_read = glueContext.create_dynamic_frame.from_options( connection_type="azurecosmos", connection_options={ "connectionName": connectionName, "spark.cosmos.database": cosmosDBName, "spark.cosmos.container": cosmosContainerName, } )

SELECT SQL クエリを指定して、DynamicFrame に返される結果をフィルタリングすることもできます。query を設定する必要があります。

例:

azurecosmos_read_query = glueContext.create_dynamic_frame.from_options( connection_type="azurecosmos", connection_options={ "connectionName": "connectionName", "spark.cosmos.database": cosmosDBName, "spark.cosmos.container": cosmosContainerName, "spark.cosmos.read.customQuery": "query" } )

Azure Cosmos DB for NoSQL コンテナへの書き込み

この例では、既存の DynamicFrame である dynamicFrame から Azure Cosmos DB に情報を書き込みます。コンテナに既に情報がある場合、AWS Glue は DynamicFrame からのデータを付加します。コンテナ内の情報のスキーマが、書き込む情報と異なる場合、エラーが発生します。

前提条件:

  • 書き込み先とする Azure Cosmos DB テーブル。コンテナの識別情報が必要になります。接続メソッドを呼び出す前にコンテナを作成する必要があります。

    Azure Cosmos for NoSQL コンテナは、データベースとコンテナによって識別されます。Azure Cosmos for NoSQL API に接続する際には、データベース cosmosDBName とコンテナ cosmosContainerName の名前を指定する必要があります。

  • 認証およびネットワークの場所の情報を提供するように設定された AWS Glue Azure Cosmos DB 接続。これを取得するには、前の手順の「Azure Cosmos DB に対する接続を設定するには」のステップを実行します。AWS Glue 接続、connectionName の名前が必要になります。

例:

azurecosmos_write = glueContext.write_dynamic_frame.from_options( frame=dynamicFrame, connection_type="azurecosmos", connection_options={ "connectionName": connectionName, "spark.cosmos.database": cosmosDBName, "spark.cosmos.container": cosmosContainerName )

Azure Cosmos DB 接続オプションのリファレンス

  • connectionName — 必須。読み込み/書き込みに使用されます。認証およびネットワークの場所の情報を接続方法に提供するように設定された AWS Glue Azure Cosmos DB 接続の名前。

  • spark.cosmos.database — 必須。読み込み/書き込みに使用されます。有効な値: データベース名。Azure Cosmos DB for NoSQL のデータベース名。

  • spark.cosmos.container — 必須。読み込み/書き込みに使用されます。有効な値: コンテナ名。Azure Cosmos DB for NoSQL のコンテナ名。

  • spark.cosmos.read.customQuery — 読み取りに使用。有効な値: SELECT SQL クエリ。読み取るドキュメントを選択するためのカスタムクエリ。