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

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

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

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

前提条件

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

  1. キャッシュを作成するには、Azure portal にサインインし、 [リソースの作成] を選択します。

    左側のナビゲーション ペインの [リソースの作成] が強調表示されています。

  2. [開始] ページ上で、検索ボックス内に「Azure Cache for Redis」と入力します。 次に、[作成] を選択します。

    検索ボックス内に

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

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

  5. [ネットワーク] タブで、接続方法を選択します。

  6. [次へ: 詳細設定] タブを選択するか、ページの下部にある [次へ: 詳細設定] ボタンを選択して、[詳細設定] タブを表示します。

    作業ウィンドウの [詳細設定] タブ、および選択できるオプションを示すスクリーンショット。

    • Basic または Standard キャッシュを利用する場合は、非 TLS ポートの選択をオンにします。 Microsoft Entra 認証を有効にするかどうかを選択することもできます。
    • Premium キャッシュを利用する場合は、非 TLS ポート、クラスタリング、マネージド ID、データ永続化の設定を構成します。 Microsoft Entra 認証を有効にするかどうかを選択することもできます。

    重要

    最適なセキュリティを実現するために、Microsoft では、可能な限り Microsoft Entra ID とマネージド ID を使用してキャッシュに対する要求を認可することをお勧めします。 Microsoft Entra ID とマネージド ID を使った認可によって、共有キー認可よりもセキュリティが向上し、使いやすくなります。 キャッシュでマネージド ID を使用する方法の詳細については、「キャッシュ認証に Microsoft Entra ID を使用する」を参照してください。

  7. ページの下部にある [次へ: タグ] タブを選択するか、ページの下部にある [次へ: タグ] ボタンを選択します。

  8. 必要に応じて、 [タグ] タブで、リソースを分類する場合は名前と値を入力します。

  9. [Review + create](レビュー + 作成) を選択します。 [確認および作成] タブが表示され、Azure によって構成が検証されます。

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

キャッシュが作成されるまで、しばらく時間がかかります。 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 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. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、[削除] を選択します。

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

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