次の方法で共有


Azure Cosmos DB for MongoDB 仮想コアを使用して Python コンソール アプリを構築する

このガイドでは、Azure Cosmos DB for MongoDB 仮想コア クラスターに接続する Python コンソール アプリケーションを構築する手順について説明します。 開発環境を構成し、Azure SDK for Python の azure.identity パッケージを使用して認証を行い、ドキュメントの作成、クエリ、更新などの操作を実行します。

[前提条件]

  • 既存の Azure Cosmos DB for MongoDB (仮想コア) クラスター。
  • Azure Cloud ShellAzure CLI の最新バージョン。

    • CLI 参照コマンドをローカルで実行する場合は、 az login コマンドを使用して Azure CLI にサインインします。
  • クラスター用に構成された Microsoft Entra 認証で、あなたの ID に dbOwner ロールが付与されています。

  • 最新バージョンの Python

コンソール アプリケーションを構成する

次に、新しいコンソール アプリケーション プロジェクトを作成し、クラスターに対して認証するために必要なライブラリをインポートします。

  1. プロジェクトの新しいディレクトリを作成し、仮想環境を設定します。

    mkdir cosmos-mongodb-app
    cd cosmos-mongodb-app
    python -m venv .venv
    
  2. 仮想環境をアクティブにします。

    # On Windows
    .venv\Scripts\activate
    
    # On macOS/Linux
    source .venv/bin/activate
    
  3. アプリケーション用の新しい Python ファイルを作成します。

    touch app.py
    
  4. Azure 認証用の azure.identity ライブラリをインストールします。

    pip install azure.identity
    
  5. Python 用の pymongo ドライバーをインストールします。

    pip install pymongo
    

クラスターに接続する

次に、 Azure.Identity ライブラリを使用して、クラスターへの接続に使用する TokenCredential を取得します。 公式の MongoDB ドライバーには、クラスターに接続するときに使用するために Microsoft Entra からトークンを取得するために実装する必要がある特別なインターフェイスがあります。

  1. Python ファイルの先頭に必要なモジュールをインポートします。

    from azure.identity import DefaultAzureCredential
    from pymongo import MongoClient
    from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
    
  2. MongoDB OpenID Connect (OIDC) コールバック インターフェイスを実装するカスタム クラスを作成します。

    class AzureIdentityTokenCallback(OIDCCallback):
        def __init__(self, credential):
            self.credential = credential
    
        def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
            token = self.credential.get_token(
                "https://ossrdbms-aad.database.windows.net/.default").token
            return OIDCCallbackResult(access_token=token)
    
  3. クラスター名変数を設定します。

    clusterName = "<azure-cosmos-db-mongodb-vcore-cluster-name>"
    
  4. DefaultAzureCredential のインスタンスを作成し、認証プロパティを設定します。

    credential = DefaultAzureCredential()
    authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
    
  5. Microsoft Entra 認証で構成された MongoDB クライアントを作成します。

    client = MongoClient(
        f"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/",
        connectTimeoutMS=120000,
        tls=True,
        retryWrites=True,
        authMechanism="MONGODB-OIDC",
        authMechanismProperties=authProperties
    )
    
    print("Client created")
    

一般的な操作を実行する

最後に、公式ライブラリを使用して、データベース、コレクション、ドキュメントで一般的なタスクを実行します。 ここでは、MongoDB または DocumentDB と対話してコレクションと項目を管理する場合と同じクラスとメソッドを使用します。

  1. データベースへの参照を取得します。

    database = client.get_database("<database-name>")
    
    print("Database pointer created")
    
  2. コレクションへの参照を取得します。

    collection = database.get_collection("<container-name>")
    
    print("Collection pointer created")
    
  3. ドキュメントを作成し、を使用してコレクションにcollection.update_oneします。

    new_document = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "category": "gear-surf-surfboards",
        "name": "Yamba Surfboard",
        "quantity": 12,
        "price": 850.00,
        "clearance": False,
    }
    
    filter = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    }
    payload = {
        "$set": new_document
    }
    result = collection.update_one(filter, payload, upsert=True)
    
  4. collection.find_oneを使用して、コレクションから特定のドキュメントを取得します。

    filter = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "category": "gear-surf-surfboards"
    }
    existing_document = collection.find_one(filter)
    print(f"Read document _id:\t{existing_document['_id']}")
    
  5. フィルターに一致する collection.find を持つ複数のドキュメントを照会します。

    filter = {
        "category": "gear-surf-surfboards"
    }
    matched_documents = collection.find(filter)
    
    for document in matched_documents:
        print(f"Found document:\t{document}")