次の方法で共有


クイックスタート: Python で Azure Redis を使用する

このクイックスタートでは、Azure 内の任意のアプリケーションからアクセスできるセキュリティで保護された専用キャッシュにアクセスするために、Azure Managed Redis (プレビュー) または Azure Cache for Redis を Python スクリプトに組み込みます。

GitHub のコードにスキップする

この記事をスキップしてすぐにコードをご覧になりたい方は、GitHub にある Python のクイックスタートを参照してください。

前提条件

Azure Managed Redis (プレビュー) インスタンスを作成する

  1. Azure Managed Redis (プレビュー) インスタンスを作成するには、Azure portal にサインインし、[リソースの作成] を選択します。

  2. [新規] ページで、 [データベース] を選択し、 [Azure Cache for Redis] を選択します。

  3. [新規 Redis Cache] ページで、新しいキャッシュの設定を構成します。

    設定 値を選択する 説明
    サブスクリプション ドロップダウンで、ご自身のサブスクリプションを選択します。 この新しい Azure Managed Redis インスタンスが作成されるサブスクリプション。
    リソース グループ ドロップ ダウンでリソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの名前を入力します。 その中にキャッシュやその他のリソースを作成するリソース グループの名前。 すべてのアプリ リソースを 1 つのリソース グループに配置することで、それらをまとめて簡単に管理または削除できます。
    DNS 名 リージョンで一意の名前を入力します。 キャッシュ名は、"キャッシュのリージョン名と組み合わせた" ときに 1 から 63 文字の文字列で、数字、英字、ハイフンのみを使用する必要があります。 (キャッシュ名の長さが 45 文字未満の場合、現在使用できるすべてのリージョンで機能するはずです)。名前の先頭と末尾には数字または文字を使用する必要があり、連続するハイフンを含めることはできません。 キャッシュ インスタンスの "ホスト名" は \<DNS name\>.\<Azure region\>.redis.azure.net です。
    場所 ドロップ ダウンで場所を選択します。 Azure Managed Redis は、選択した Azure リージョンで使用できます。
    キャッシュの種類 ドロップダウン メニューから、パフォーマンス レベルとキャッシュ サイズを選択します。 Redis インスタンスのパフォーマンスはレベルによって決まり、データの格納に使用できるメモリはキャッシュ サイズによって決まります。 適切なパフォーマンス レベルの選択に関するガイダンスについては、適切なレベルの選択に関するページを参照してください

    Azure Managed Redis の [基本] タブを示すスクリーンショット。

  4. [次へ: ネットワーク] を選択し、パブリックまたはプライベート エンドポイントのいずれかを選択します。

  5. [次: 詳細] を選択します。 ここで、インスタンスに追加する Redis モジュールを構成できます。

    クラスター化されていないキャッシュの [Clustering policy] (クラスタリング ポリシー)[Enterprise] に設定するか、クラスター化されたキャッシュの場合は [OSS] に設定します。 [クラスタリング ポリシー] の選択方法の詳細については、「クラスタリング ポリシー」を参照してください。

    Azure Managed Redis の [詳細] タブを示すスクリーンショット。

    アクティブ geo レプリケーションを使用する場合は、作成時にそれを構成する必要があります。 これを行う方法については、Azure Managed Redis インスタンスのアクティブ geo レプリケーションを構成するに関するページを参照してください。

    重要

    Azure Managed Redis (プレビュー) インスタンスのクラスタリング ポリシーは、作成後に変更することはできません。 RediSearch を使用している場合、Enterprise クラスター ポリシーは必須であり、サポートされている唯一の削除ポリシーは NoEviction です。

    重要

    geo レプリケーション グループでこのキャッシュ インスタンスを使用している場合、インスタンスの作成後に削除ポリシーを変更することはできません。 キャッシュを作成する前に、プライマリ ノードの削除ポリシーを確認してください。 アクティブ geo レプリケーションの詳細については、「アクティブ geo レプリケーションの前提条件」を参照してください。

    重要

    キャッシュ インスタンスを作成した後でモジュールを変更することはできません。 モジュールは、Azure Cache for Redis インスタンスを作成するときに有効になっている必要があります。 キャッシュの作成後にモジュールの構成を有効にするオプションはありません。

  6. タグ を選択してスキップします。

  7. 確認と作成 をクリックします。

    Azure Managed Redis の [確認と作成] タブを示すスクリーンショット。

  8. 設定を確認し、 [作成] を選択します。

    Redis インスタンスの作成には数分かかります。 Azure Managed Redis の [概要] ページで進行状況を監視できます。 [状態] に "実行中" と表示されている場合は、キャッシュを使用する準備ができています。

Azure Cache for Redis インスタンスを作成する

  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 は、Redis の Python インターフェイスです。 Python パッケージ ツールの pip を使用して、コマンド プロンプトから redis-py パッケージをインストールします。

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

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

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

Microsoft Entra ID またはアクセス キーのいずれかを使用して Azure Managed Redis (プレビュー) インスタンスに接続する Python スクリプトを作成します。 Microsoft Entra ID の使用をお勧めします。

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

キャッシュがある場合は、Microsoft Entra 認証が有効になっているかどうかを確認します。 そうでない場合は、有効にします。 アプリには Microsoft Entra ID を使用することをお勧めします。

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

  2. リソース メニューで [認証] を選択します。

  3. 作業ペインで、[Microsoft Entra 認証を有効にする] がオンになっているかどうかを確認します。 その場合は、次に進みます。

  4. [Enable Microsoft Entra 認証] を選択し、有効なユーザー名を入力します。 [保存] を選択した場合は、既定で入力したユーザーに [データ所有者アクセス ポリシー] が自動的に割り当てられます。 マネージド ID またはサービス プリンシパルを入力して、キャッシュ インスタンスに接続することもできます。

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

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

    重要

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

Azure CLI で Microsoft Entra ID を使用する方法については、ID のリファレンス ページを参照してください。

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

  1. Microsoft 認証ライブラリ (MSAL) をインストールします。 このライブラリを使用すると、Microsoft ID からセキュリティ トークンを取得してユーザーを認証できます。

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

pip install azure-identity

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

  1. 新しいテキスト ファイルを作成し、次のスクリプトを追加して、ファイルを PythonApplication1.py として保存します。

  2. <Your Host Name> を Azure Cache for Redis インスタンスの値に置き換えます。 ホスト名は、<DNS name>.<region>.redis.azure.net の形式になります。

  3. <Your Username> を Microsoft Entra ID ユーザーの値に置き換えます。

    import redis
    from azure.identity import DefaultAzureCredential
    
    scope = "https://redis.azure.com/.default"
    host = "<Your Host Name>"
    port = 10000
    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()
    
  4. ターミナルから Python コードを実行する前に、ターミナルで Microsoft Entra ID を使用することを認可していることを確認します。

    azd auth login

  5. Python で PythonApplication1.py を実行します。 次の例のような結果が表示されるはずです。

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

再認証を使用した Python スクリプトの作成

Microsoft Entra ID アクセス トークンの有効期限は限られており、平均 75 分です。 キャッシュへの接続を維持するには、トークンを更新する必要があります。 この例では、Python を使用してこれを行う方法を示します。

  1. 新しいテキスト ファイルを作成し、次のスクリプトを追加します。 次に、ファイルを PythonApplication2.py として保存します。

  2. <Your Host Name> を Azure Managed Redis (プレビュー) インスタンスの値に置き換えます。 ホスト名は、<DNS name>.<region>.redis.azure.net の形式になります。

  3. <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 = 10000
    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()
    
  4. Python で PythonApplication2.py を実行します。 次の例のような結果が表示されるはずです。

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

    最初の例とは異なり、トークンの有効期限が切れた場合、この例ではトークンが自動的に更新されます。

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

Microsoft Entra ID またはアクセス キーを使用して Redis インスタンスに接続する Python スクリプトを作成します。 Microsoft Entra ID の使用をお勧めします。

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

キャッシュがある場合は、Microsoft Entra 認証が有効になっているかどうかを確認します。 そうでない場合は、有効にします。 アプリには Microsoft Entra ID を使用することをお勧めします。

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

  2. リソース メニューで [認証] を選択します。

  3. 作業ペインで、[Microsoft Entra 認証を有効にする] がオンになっているかどうかを確認します。 その場合は、次に進みます。

  4. [Enable Microsoft Entra 認証] を選択し、有効なユーザー名を入力します。 [保存] を選択した場合は、既定で入力したユーザーに [データ所有者アクセス ポリシー] が自動的に割り当てられます。 マネージド ID またはサービス プリンシパルを入力して、キャッシュ インスタンスに接続することもできます。

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

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

    重要

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

Azure CLI で Microsoft Entra ID を使用する方法については、ID のリファレンス ページを参照してください。

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

  1. Microsoft 認証ライブラリ (MSAL) をインストールします。 このライブラリを使用すると、Microsoft ID からセキュリティ トークンを取得してユーザーを認証できます。

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

pip install azure-identity

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

  1. 新しいテキスト ファイルを作成し、次のスクリプトを追加して、ファイルを PythonApplication1.py として保存します。

  2. <Your Host Name> を Azure Cache for Redis インスタンスの値に置き換えます。 ホスト名は、<DNS name>.redis.cache.windows.net の形式になります。

  3. <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()
    
  4. ターミナルから Python コードを実行する前に、ターミナルで Microsoft Entra ID を使用することを認可していることを確認します。

    azd auth login

  5. Python で PythonApplication1.py を実行します。 次の例のような結果が表示されるはずです。

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

再認証を使用した Python スクリプトの作成

Microsoft Entra ID アクセス トークンの有効期限は限られており、平均 75 分です。 キャッシュへの接続を維持するには、トークンを更新する必要があります。 この例では、Python を使用してこれを行う方法を示します。

  1. 新しいテキスト ファイルを作成し、次のスクリプトを追加します。 次に、ファイルを PythonApplication2.py として保存します。

  2. <Your Host Name> を Azure Cache for Redis インスタンスの値に置き換えます。 ホスト名は、<DNS name>.redis.cache.windows.net の形式になります。

  3. <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()
    
  4. Python で PythonApplication2.py を実行します。 次の例のような結果が表示されるはずです。

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

    最初の例とは異なり、トークンの有効期限が切れた場合、この例ではトークンが自動的に更新されます。

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

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

それ以外の場合、リソースを使い終わったら、課金されないように、作成した Azure リソース グループを削除できます。

重要

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

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

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

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

    多数のリソース グループがある場合は、[任意のフィールドのフィルター...] ボックスを使用し、この記事用に作成したリソース グループの名前を入力します。 結果リストでリソース グループを選びます。

    作業ペインの削除するリソース グループの一覧を示すスクリーンショット。

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

  4. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、[削除] を選択します。

    削除を確認するためにリソース名を必要とするフォームを示すスクリーンショット。

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