次の方法で共有


クイック スタート: Python アプリで Azure Cache for Redis を使用する

このクイックスタートでは、Azure 内の任意のアプリケーションからアクセスできる安全な専用キャッシュにアクセスするために、Azure Cache for Redis を Python スクリプトに組み込みます。

コードにスキップする

この記事では、Python アプリを作成した後、コードを変更して最終的に動作するサンプル アプリにする方法について説明します。

コードをすぐに確認したい場合は、GitHub にある Python クイックスタート サンプルをご覧ください。

前提条件

キャッシュの作成

  1. キャッシュを作成するには、Azure portal にサインインします。 ポータルのメニューで、[リソースの作成] を選びます。

    Azure portal の左側のナビゲーション ウィンドウの [リソースの作成] オプションが強調して示されているスクリーンショット。

  2. [作業の開始] ペインの検索バーに「Azure Cache for Redis」と入力します。 検索結果で Azure Cache for Redis を見つけて、[作成] を選びます。

    検索ボックスに Azure Cache for Redis が入力され、[作成] ボタンが強調されている Azure Marketplace を示すスクリーンショット。

  3. [新しい Redis Cache] ペインの [基本] タブで、以下のキャッシュの設定を構成します。

    設定 アクション 説明
    サブスクリプション Azure サブスクリプションを選択します。 Azure Cache for Redis の新しいインスタンスの作成に使うサブスクリプション。
    リソース グループ リソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの名前を入力します。 キャッシュや他のリソースを作成するリソース グループの名前。 すべてのアプリ リソースを 1 つのリソース グループに配置することで、それらをまとめて簡単に管理または削除できます。
    DNS 名 一意の名前を入力します。 キャッシュ名は、数字、英字、ハイフンのみを含む 1 から 63 文字の文字列とする必要があります。 名前の先頭と末尾には数字または文字を使用する必要があり、連続するハイフンを含めることはできません。 キャッシュ インスタンスの "ホスト名" は \<DNS name>.redis.cache.windows.net です。
    場所 場所を選択します。 キャッシュを使う他のサービスに近い Azure リージョン
    キャッシュ SKU SKU を選びます。 SKU によって、キャッシュに利用できるサイズ、パフォーマンス、機能のパラメーターが決まります。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。
    キャッシュ サイズ キャッシュ サイズを選びます。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。
  4. [ネットワーク] タブを選ぶか、[次へ: ネットワーク] を選びます。

  5. [ネットワーク] タブで、キャッシュに使う接続方法を選びます。

  6. [詳細] タブを選ぶか、[次へ: 詳細] を選びます。

  7. [詳細] ペインで、以下の情報に基づいて認証方法を確認または選択します。

    [詳細] ペインと選択できるオプションを示すスクリーンショット。

    • 既定では、新しい Basic、Standard、または Premium キャッシュでは、Microsoft Entra 認証が有効になり、アクセス キー認証が無効になります。
    • Basic または Standard キャッシュの場合は、非 TLS ポートを選択できます。
    • Standard および Premium キャッシュの場合は、可用性ゾーンを有効にすることを選択できます。 キャッシュの作成後に可用性ゾーンを無効にすることはできません。
    • Premium キャッシュを利用する場合は、非 TLS ポート、クラスタリング、マネージド ID、データ永続化の設定を構成します。

    重要

    最適なセキュリティのため、可能であれば、キャッシュに対する要求を認可するのに Microsoft Entra ID とマネージド ID を使うことをお勧めします。 Microsoft Entra ID とマネージド ID を使う認可は、共有アクセス キーの認可より、セキュリティと使いやすさの点で優れています。 キャッシュでのマネージド ID の使用について詳しくは、キャッシュ認証での Microsoft Entra ID の使用に関する記事をご覧ください。

  8. (省略可能) [タグ] タブを選ぶか、[次へ: タグ] を選びます。

  9. (省略可能) キャッシュ リソースを分類する場合は、[タグ] タブでタグの名前と値を入力します。

  10. [確認および作成] ボタンを選択します。

    [確認と作成] タブでは、Azure によって構成が自動的に検証されます。

  11. 緑色の検証に成功のメッセージが表示された後、 [作成] を選択します。

新しいキャッシュのデプロイは数分で完了します。 デプロイの進行状況は、Azure Cache for Redis の [概要] ペインで監視できます。 [状態][実行中] と表示されたら、キャッシュを使用できます。

redis-py ライブラリをインストールする

redis-py は、Azure Cache for Redis の Python インターフェイスです。 Python パッケージ ツールの pip を使って、コマンド ラインで redis-py パッケージをインストールします。

次の例では、管理者コマンド プロンプト ウィンドウで Python 3 用の pip3 を使って Windows 11 に redis-py をインストールしています。

Azure Cache for Redis への redis-py インターフェイスのインストールを示すターミナルのスクリーンショット。

キャッシュにアクセスするための Python スクリプトを作成する

Microsoft Entra ID またはアクセス キーを使って Azure Cache for Redis に接続する Python スクリプトを作成します。 Microsoft Entra ID を使うことをお勧めします。

キャッシュで Microsoft Entra ID の認証を有効にする

キャッシュが既にある場合は、最初に Microsoft Entra 認証が有効になっているかどうかを確認します。 そうでない場合は、次の手順のようにして、Microsoft Entra 認証を有効にします。 アプリケーションでの認証には Microsoft Entra ID を使うことをお勧めします。

  1. Azure portal で、Microsoft Entra トークンベースの認証を使用する対象の Azure Cache for Redis インスタンスを選択します。

  2. サービス メニューの [設定] で、[認証] を選びます。

  3. [認証] ペインで、[Microsoft Entra 認証を有効にする] チェック ボックスがオンになっているかどうかを調べます。 そうである場合は、次のセクションに進むことができます。

  4. そうでない場合は、[Microsoft Entra 認証を有効にする] チェック ボックスをオンにします。 次に、有効なユーザーの名前を入力します。 [保存] を選択します。 入力したユーザー名には、データ所有者アクセス ポリシーが自動的に割り当てられます。

    マネージド ID またはサービス プリンシパルを入力して、キャッシュに接続することもできます。

    サービス メニューで [認証] が選択され、[Microsoft Entra 認証を有効にする] チェック ボックスがオンになっていることを示すスクリーンショット。

  5. ダイアログ ボックスで、構成を更新するかどうかが確認され、更新の完了には数分かかることが通知されます。 [はい] を選択します。

    重要

    有効化の操作が完了すると、キャッシュ内のノードが再起動して新しい構成が読み込まれます。 この操作は、標準メンテナンス期間中またはピーク営業時間外に実行することをお勧めします。 このプロセスには、最大で 30 分かかることがあります。

Azure CLI での Microsoft Entra ID の使用については、ID のリファレンス ページをご覧ください。

Microsoft 認証ライブラリをインストールする

Microsoft 認証ライブラリ (MSAL) は、ユーザーの認証を行うために Microsoft ID プラットフォームからセキュリティ トークンを取得します。

MSAL をインストールするには:

  1. Python 用の MSAL をインストールします。

  2. Python Azure ID クライアント ライブラリをインストールします。 このライブラリは、MSAL を使ってトークン認証のサポートを提供します。

    pip を使ってこのライブラリをインストールします。

pip install azure-identity

Microsoft Entra ID を使用して Python スクリプトを作成する

  1. テキスト ファイルを作成します。 ファイルを PythonApplication1.py として保存します。

  2. PythonApplication1.py で、次のスクリプトを追加して変更します。

    スクリプトで:

    • <Your Host Name> を Azure Cache for Redis インスタンスの値に置き換えます。 ホスト名の形式は <DNS name>.redis.cache.windows.net です。
    • <Your Username> を実際の Microsoft Entra ID ユーザーの値に置き換えます。
    import redis
    from azure.identity import DefaultAzureCredential
    
    scope = "https://redis.azure.com/.default"
    host = "<Your Host Name>"
    port = 6380
    user_name = "<Your Username>"
    
    
    def hello_world():
        cred = DefaultAzureCredential()
        token = cred.get_token(scope)
        r = redis.Redis(host=host,
                        port=port,
                        ssl=True,    # ssl connection is required.
                        username=user_name,
                        password=token.token,
                        decode_responses=True)
        result = r.ping()
        print("Ping returned : " + str(result))
    
        result = r.set("Message", "Hello!, The cache is working with Python!")
        print("SET Message returned : " + str(result))
    
        result = r.get("Message")
        print("GET Message returned : " + result)
    
        result = r.client_list()
        print("CLIENT LIST returned : ")
        for c in result:
            print(f"id : {c['id']}, addr : {c['addr']}")
    
    if __name__ == '__main__':
        hello_world()
    
  3. ターミナルで Python コードを実行する前に、ターミナルで Microsoft Entra ID の使用を認可します。

    azd auth login

  4. Python を使って PythonApplication1.py ファイルを実行します。 出力が次の例のようになることを確認します。

    キャッシュ アクセスをテストする Python スクリプトを示すターミナルのスクリーンショット。

再認証を使用して Python スクリプトを作成する

Microsoft Entra ID アクセス トークンの有効期間は限られており、約 75 分です。 キャッシュへの接続を維持するには、トークンを更新する必要があります。

この例では、Python を使ってトークンを更新する方法を見ていきます。

  1. テキスト ファイルを作成します。 ファイルを PythonApplication2.py として保存します。

  2. PythonApplication2.py で、次のスクリプトを追加して変更します。

    スクリプトで:

    • <Your Host Name> を Azure Cache for Redis インスタンスの値に置き換えます。 ホスト名の形式は <DNS name>.redis.cache.windows.net です。
    • <Your Username> を実際の Microsoft Entra ID ユーザーの値に置き換えます。
    import time
    import logging
    import redis
    from azure.identity import DefaultAzureCredential
    
    scope = "https://redis.azure.com/.default"
    host = "<Your Host Name>"
    port = 6380
    user_name = "<Your Username>"
    
    def re_authentication():
        _LOGGER = logging.getLogger(__name__)
        cred = DefaultAzureCredential()
        token = cred.get_token(scope)
        r = redis.Redis(host=host,
                        port=port,
                        ssl=True,   # ssl connection is required.
                        username=user_name,
                        password=token.token,
                        decode_responses=True)
        max_retry = 3
        for index in range(max_retry):
            try:
                if _need_refreshing(token):
                    _LOGGER.info("Refreshing token...")
                    tmp_token = cred.get_token(scope)
                    if tmp_token:
                        token = tmp_token
                    r.execute_command("AUTH", user_name, token.token)
                result = r.ping()
                print("Ping returned : " + str(result))
    
                result = r.set("Message", "Hello!, The cache is working with Python!")
                print("SET Message returned : " + str(result))
    
                result = r.get("Message")
                print("GET Message returned : " + result)
    
                result = r.client_list()
                print("CLIENT LIST returned : ")
                for c in result:
                    print(f"id : {c['id']}, addr : {c['addr']}")
                break
            except redis.ConnectionError:
                _LOGGER.info("Connection lost. Reconnecting.")
                token = cred.get_token(scope)
                r = redis.Redis(host=host,
                                port=port,
                                ssl=True,   # ssl connection is required.
                                username=user_name,
                                password=token.token,
                                decode_responses=True)
            except Exception:
                _LOGGER.info("Unknown failures.")
                break
    
    
    def _need_refreshing(token, refresh_offset=300):
        return not token or token.expires_on - time.time() < refresh_offset
    
    if __name__ == '__main__':
        re_authentication()
    
  3. Python を使って PythonApplication2.py ファイルを実行します。 出力が次の例のようになることを確認します。

    キャッシュ アクセスをテストする Python スクリプトを示すターミナルのスクリーンショット。

    前の例とは異なり、トークンの有効期間が切れると、この例のコードはトークンを自動的に更新します。

リソースをクリーンアップする

この記事で作成したリソースを引き続き使用する場合は、リソース グループを保持します。

それ以外の場合、リソースに関連する課金が行われないようにするために、リソースの使用が終了したら、作成した Azure リソース グループを削除して構いません。

警告

リソース グループを削除すると、元に戻すことができません。 リソース グループを削除すると、そのリソース グループ内のすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 保持したいリソースを含む既存のリソース グループ内にリソースを作成した場合は、リソース グループを削除するのではなく、各リソースを個別に削除できます。

リソース グループを削除する

  1. Azure portal にサインインし、 [リソース グループ] を選択します。

  2. 削除するリソース グループを選びます。

    多数のリソース グループがある場合は、[任意フィールドのフィルター] に、この記事を完了するために作成したリソース グループの名前を入力します。 検索結果の一覧で、リソース グループを選びます。

    削除するものを選ぶためのリソース グループの一覧を示すスクリーンショット。

  3. [リソース グループの削除] を選択します。

  4. [リソース グループの削除] ペインで、リソース グループの名前を入力して確認した後、[削除] を選びます。

    削除を確認するためにリソース名を入力する必要があるボックスを示すスクリーンショット。

しばらくすると、リソース グループとそのリソースのすべてが削除されます。