런타임 환경 간 마이그레이션¶
앱의 RUNTIME_NAME 및 COMPUTE_POOL 속성을 업데이트하여 Warehouse Runtime 및 Container Runtime 간에 Streamlit 앱을 마이그레이션할 수 있습니다. 그러나 일부 기능은 한 가지 유형의 런타임 환경에서만 지원되므로 런타임 환경 간에 앱을 마이그레이션할 때 몇 가지 고려 사항이 있습니다.
이 페이지에서는 Warehouse Runtime에서 Container Runtime으로 마이그레이션하기 위한 체크리스트를 제공합니다. 각 항목은 간략한 요약과 필요한 경우 자세한 정보로 연결되는 링크를 제공합니다.
전제 조건¶
시작하기 전에 Warehouse Runtime 앱을 적절히 조정하여 마이그레이션을 준비합니다.
- 선택 사항: 개인 키가 암호화된 경우 암호 구문을 설정하려면 개인 키 암호 구문에 대한 환경 변수를 설정합니다. 앱의 코드 백업하기
앱의 소스 코드가 아직 버전 관리 시스템, 외부 리포지토리 또는 로컬 디렉터리에 저장되지 않은 경우 마이그레이션 중에 데이터 손실 가능성을 방지하기 위해 백업합니다.
- 앱이 ROOT_LOCATION으로 생성되지 않았는지 확인합니다.
ROOT_LOCATION 매개 변수로 생성한 앱은 Warehouse Runtime만 사용할 수 있습니다. ROOT_LOCATION으로 앱을 생성한 경우 FROM 매개 변수를 사용하도록 업데이트합니다.
다양한 유형의 Streamlit 오브젝트 이해하기 섹션을 참조하세요.
- 앱을 Streamlit 1.50 이상으로 업그레이드하기
앱과 모든 종속 항목이 Streamlit 1.50 이상과 호환되는지 확인합니다.
Streamlit 앱의 종속성 관리하기 섹션을 참조하세요.
- 앱을 Python 3.11로만 업데이트하기
Container Runtime은 Python 3.11만 지원하는 반면, Warehouse Runtime은 Python 3.9, 3.10, 3.11을 지원합니다. 앱과 모든 종속 항목이 Python 3.11과 호환되는지 확인합니다.
Streamlit 앱의 종속성 관리하기 섹션을 참조하세요.
- 선택 사항: 개인 키가 암호화된 경우 암호 구문을 설정하려면 개인 키 암호 구문에 대한 환경 변수를 설정합니다. 로컬에서 Snowflake CLI 3.14.0 이상 설치하기
Snowflake CLI를 사용하여 앱을 배포하는 경우 Container Runtime 배포 구문을 지원하려면 버전 3.14.0 이상이 필요합니다.
snow --version`으로 버전을 확인합니다. 선택적으로 :code:–experimental` 플래그를 사용하는 경우 버전 3.12.0~3.13.1을 사용할 수 있습니다.Snowflake CLI 을 사용하여 Streamlit 앱 만들기 및 배포하기 섹션을 참조하세요.
리소스 및 권한¶
앱은 기존 쿼리 웨어하우스를 계속 사용할 수 있지만, Container Runtime을 위한 컴퓨팅 풀을 설정해야 합니다.
- 컴퓨팅 풀 생성 및 액세스 권한 부여하기
앱 소유자는 Container Runtime이 실행될 컴퓨팅 풀에 대한 USAGE 권한이 필요합니다. 앱 뷰어는 컴퓨팅 풀 권한이 필요하지 않습니다.
Streamlit 앱 생성 및 사용에 필요한 권한 섹션을 참조하세요.
- 외부 액세스 통합 생성 및 액세스 권한 부여하기
Container Runtime은 최소한의 사전 설치된 패키지 세트와 함께 제공됩니다. 앱에 추가 패키지 또는 사전 설치된 패키지의 다른 버전이 필요한 경우 PyPI과 같은 외부 패키지 인덱스를 사용해야 합니다. 앱이 외부 패키지 인덱스에 액세스하도록 허용하려면 외부 액세스 통합(EAI)을 생성하고 앱 소유자에게 EAI에 대한 USAGE 권한을 부여해야 합니다.
Streamlit in Snowflake 의 외부 네트워크 액세스 섹션을 참조하세요.
종속성 관리¶
environment.yml`을 :file:`pyproject.toml또는 :file:`requirements.txt`로 바꾸기종속성 버전을 잠그거나 추가 종속성을 지정해야 하는 경우
pyproject.toml또는requirements.txt파일을 프로젝트 디렉터리의 루트에 추가해야 합니다. 패키지는 Conda 및 PyPI 간에 이름이 서로 다를 수 있으므로 아티팩트 리포지토리에 올바른 패키지 이름을 사용해야 합니다.Streamlit 앱의 종속성 관리하기 섹션을 참조하세요.
- 앱을 변경하여 외부 액세스 통합 설정하기
종속 항목에 버전 지정자가 포함되어 있거나 추가 패키지를 설치하는 경우 앱에 외부 액세스 통합을 할당해야 합니다. 이는 종속성 파일에 지정된 패키지 인덱스에 액세스할 수 있도록 하기 위한 것입니다. PyPI는 기본 패키지 인덱스입니다.
Streamlit 앱의 종속성 관리하기 섹션을 참조하세요.
코드 변경 사항¶
- :code:`get_active_session()`을 :code:`st.connection(“snowflake”).session()`으로 바꾸기
Container Runtime을 사용하는 경우 Streamlit 서버는 여러 뷰어를 동시에 처리합니다. :code:`get_active_session()`은 스레드로부터 안전하지 않으므로 대신 :code:`st.connection(“snowflake”)`을 사용하여 연결을 관리해야 합니다.
시크릿 관리 및 Streamlit 앱 구성하기 섹션을 참조하세요.
- 코드 검토 및 캐싱 구현하기
Container Runtime은 뷰어 세션 간에 디스크, 컴퓨팅 및 메모리 리소스를 공유하므로
st.cache_resource또는 :code:`st.cache_data`를 사용하여 자주 변경되지 않는 값비싼 계산이나 데이터를 캐싱해야 합니다.다음을 참조: Streamlit 설명서의 `Streamlit의 클라이언트-서버 아키텍처 이해하기<https://docs.streamlit.io/develop/concepts/architecture/architecture>`_ 및 `캐싱 개요<https://docs.streamlit.io/develop/concepts/architecture/caching>`_.
- 스레드 안전 보장
Container Runtime을 사용할 때 여러 뷰어를 동시에 처리하려면 앱 코드가 스레드로부터 안전해야 합니다. 각 뷰어는 앱 스크립트의 고유한 인스턴스를 가져오지만, 가져온 코드에서 경합 조건이나 일관되지 않은 동작으로 이어질 수 있는 공유 상태 또는 전역 변수가 있는지 검토해야 합니다. Streamlit 앱에 새 스레드를 도입하는 경우 Streamlit의 아키텍처를 검토하고 사용자 지정 스레드에서 Streamlit 명령을 사용하지 마세요.
다음을 참조: Streamlit 설명서의 `Streamlit의 멀티스레딩<https://docs.streamlit.io/develop/concepts/design/multithreading>`_.
_snowflake사용법을 해당 네이티브 Python으로 바꾸기``_snowflake``는 사용자 정의 함수(UDFs) 및 저장 프로시저에서만 제공되는 비공개 모듈입니다. Warehouse Runtime은 ``_snowflake``에 대한 액세스 권한을 상속하지만 Container Runtime은 그렇지 않습니다. 앱에서 ``_snowflake``를 사용하는 경우 Snowflake Python Connector와 같은 해당 네이티브 Python으로 바꿉니다. 필요한 경우 저장 프로시저를 사용하여 시크릿에 액세스합니다.
시크릿 관리 및 Streamlit 앱 구성하기 섹션을 참조하세요.
- 파일 경로 및 구성 업데이트하기
소스 위치의 루트는 앱의 작업 디렉터리입니다. 대부분의 Python 라이브러리의 경우 앱은 소스 위치의 루트에서 상대 경로를 사용해야 합니다. 그러나 일부 Streamlit 명령에는 진입점 파일에 대한 상대 경로가 필요합니다. 진입점 파일이 하위 디렉터리에 있는 경우 그에 따라 코드의 경로를 확인합니다.
secrets.toml및config.toml위치를 확인합니다.Streamlit 앱 파일 구성하기 섹션을 참조하세요.
앱 구성 변경 사항¶
- 앱을 변경하여 컴퓨팅 풀, 쿼리 웨어하우스 및 런타임을 설정합니다.
앱의 런타임 유형을 전환할 준비가 되면 Snowsight 또는 SQL을 사용할 수 있습니다.
ALTER STREAMLIT my_app COMPUTE_POOL = my_compute_pool QUERY_WAREHOUSE = my_warehouse RUNTIME_NAME = SYSTEM$ST_CONTAINER_RUNTIME_PY3_11;
앱이 재부팅되고 새 컨테이너를 빌드하는 데는 몇 분 정도 소요됩니다.
Streamlit 앱을 위한 런타임 환경 섹션을 참조하세요.
