Streamlit in Snowflake の外部ネットワークアクセス

このトピックでは、Snowflake外部のネットワーク場所への安全なアクセスを作成する方法について説明します。

Streamlit in Snowflake の外部ネットワークアクセス

Snowflakeの外部にある特定のネットワークロケーションへの安全なアクセスを作成し、Streamlitアプリのコード内からそのアクセスを使用できるようになりました。アクセスは、外部アクセス統合を介して有効にすることができます。

Streamlit アプリが外部アクセス統合( EAI )を使用できるようにするには、 CREATE STREAMLIT または ALTER STREAMLIT コマンドを実行し、 EXTERNAL_ACCESS_INTEGRATIONS パラメーターをその EAI を含めるように設定します。

EAI を使えば、 requestsurllib のような、外部の場所にアクセスするPythonライブラリを使ったり、ネットワーク場所へのアクセスを必要とするサードパーティのライブラリを使ったりすることができます。

詳細については、 外部ネットワークアクセスの概要 をご参照ください。

例: OpenAI API にアクセスする

次の例は、 OpenAI API へのアウトバウンドリクエストのために、 EAI を作成する方法を示しています。

  1. 外部ネットワークの場所とアクセス制限を表すネットワークルールを作成するには、 CREATE NETWORK RULE コマンドを使用します。

    CREATE OR REPLACE NETWORK RULE network_rules
      MODE = EGRESS
      TYPE = HOST_PORT
      VALUE_LIST = ('api.openai.com');
    
    Copy

    詳細については、 外部ネットワークロケーションを表すネットワークルールの作成 をご参照ください。

  2. 外部ネットワーク拠点との認証情報に相当するシークレットを作成するには、 CREATE SECRET コマンドを使用します。

    CREATE OR REPLACE SECRET openai_key
      TYPE = GENERIC_STRING
      SECRET_STRING = '<any_string>';
    
    Copy

    詳細については、 認証情報を表すシークレットの作成 をご参照ください。

  3. EAI を作成するには、 CREATE EXTERNAL ACCESS INTEGRATION コマンドを実行し、 ALLOWED_NETWORK_RULES を作成したネットワークルールに、 ALLOWED_AUTHENTICATION_SECRETS を作成したシークレットに設定します。

    CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openai_access_int
      ALLOWED_NETWORK_RULES = (network_rules)
      ALLOWED_AUTHENTICATION_SECRETS = (openai_key)
      ENABLED = TRUE;
    
    Copy
  4. Streamlit アプリ作成者に外部アクセス用の SECRET および INTEGRATION オブジェクトを使用するために必要な権限を付与するには、 GRANT <権限> ... TO ROLE コマンドを使用します。

    GRANT READ ON SECRET openai_key TO ROLE streamlit_app_creator_role;
    GRANT USAGE ON INTEGRATION openai_access_int TO ROLE streamlit_app_creator_role;
    
    Copy
  5. Streamlit アプリが統合を使用できるようにするには、 ALTER STREAMLIT コマンドを実行し、 EXTERNAL_ACCESS_INTEGRATIONS プロパティを統合にセットします。

    USE ROLE streamlit_app_creator_role;
    
    ALTER STREAMLIT streamlit_db.streamlit_schema.streamlit_app
      SET EXTERNAL_ACCESS_INTEGRATIONS = (openai_access_int)
      SECRETS = ('my_openai_key' = streamlit_db.streamlit_schema.openai_key);
    
    Copy

    注釈

    CREATE STREAMLIT コマンドの実行時に EXTERNAL_ACCESS_INTEGRATIONS パラメーターを指定することで、外部アクセス統合を使用する新しい Streamlit オブジェクトをセットアップすることもできます。

    CREATE STREAMLIT streamlit_db.streamlit_schema.streamlit_app
      ROOT_LOCATION = '<stage_path_and_root_directory>'
      MAIN_FILE = '<path_to_main_file_in_root_directory>'
      EXTERNAL_ACCESS_INTEGRATIONS = (openai_access_int)
      SECRETS = ('my_openai_key' = streamlit_db.streamlit_schema.openai_key);
    
    Copy
  6. Streamlit アプリのコードで、外部 API を呼び出します。

    from openai import OpenAI
    import streamlit as st
    import _snowflake
    
    st.title(":speech_balloon: Simple chat app using an external LLM")
    st.write("This app shows how to call an external LLM to build a simple chat application.")
    
    # Use the _snowflake library to access secrets
    secret = _snowflake.get_generic_secret_string('my_openai_key')
    client = OpenAI(api_key=secret)
    
    # ...
    # code to use API
    # ...
    
    Copy