如何将Streamlit应用部署至Snowflake并参数化Snowflake凭证?
部署Streamlit应用到Snowflake
前提准备
- 确保你拥有具备
STREAMLIT_ADMIN或ACCOUNTADMIN权限的角色,同时已创建好应用所需的数据库、Schema和Warehouse。 - 确认目标数据库和Schema下已创建好用于存储应用文件的Internal Stage(如果没有,先执行
CREATE STAGE IF NOT EXISTS your_streamlit_stage;)。
创建Streamlit应用对象
执行以下SQL命令创建应用,指定入口文件为main.py,并关联之前创建的Stage:
CREATE STREAMLIT your_streamlit_app ROOT_LOCATION = '@your_streamlit_stage' MAIN_FILE = '/main.py' QUERY_WAREHOUSE = 'your_warehouse_name' COMMENT = 'Streamlit app for Snowflake table edit';
配置应用访问权限
给需要访问应用的用户或角色授予权限:
GRANT USAGE ON STREAMLIT your_streamlit_app TO ROLE your_user_role; GRANT USAGE ON WAREHOUSE your_warehouse_name TO ROLE your_user_role;
上传代码文件到Snowflake Internal Stage
方法1:通过Snowflake Web UI上传
- 进入Snowflake控制台,导航到目标数据库和Schema下的Stage。
- 点击Upload Files,选择本地的
main.py、params.py文件,以及pages文件夹。 - 确保上传后文件结构保持一致:
pages/app.py需存放在Stage的pages目录下。
方法2:通过SQL命令(PUT)上传
在本地终端或Snowflake Worksheet中执行以下命令(替换本地文件路径和Stage名称):
-- 上传单文件 PUT file:///your_local_path/main.py @your_streamlit_stage auto_compress=false; PUT file:///your_local_path/params.py @your_streamlit_stage auto_compress=false; -- 递归上传pages目录下的所有文件 PUT file:///your_local_path/pages/* @your_streamlit_stage/pages auto_compress=false;
注意:auto_compress=false必须添加,否则Snowflake会自动压缩文件,导致Streamlit无法正常读取。
参数化params.py中的Snowflake凭证
步骤1:创建Snowflake Secret存储凭证
执行SQL命令创建Secret,存储Snowflake连接所需的参数:
CREATE SECRET IF NOT EXISTS your_snowflake_creds TYPE = PASSWORD USERNAME = 'your_snowflake_user' PASSWORD = 'your_snowflake_password' COMMENT = 'Credentials for Streamlit app'; -- 补充其他连接参数 ALTER SECRET your_snowflake_creds SET TAG (ACCOUNT='your_account_id', WAREHOUSE='your_warehouse', DATABASE='your_db', SCHEMA='your_schema');
步骤2:修改params.py读取Secret
将原来硬编码的凭证替换为从Snowflake Secret中读取,示例代码如下:
import snowflake.connector def get_snowflake_connection(): return snowflake.connector.connect( account="$SECRET(your_snowflake_creds, ACCOUNT)", user="$SECRET(your_snowflake_creds, USERNAME)", password="$SECRET(your_snowflake_creds, PASSWORD)", warehouse="$SECRET(your_snowflake_creds, WAREHOUSE)", database="$SECRET(your_snowflake_creds, DATABASE)", schema="$SECRET(your_snowflake_creds, SCHEMA)" )
步骤3:授予应用角色读取Secret的权限
确保运行Streamlit应用的角色拥有Secret的访问权限:
GRANT USAGE ON SECRET your_snowflake_creds TO ROLE your_streamlit_role;
内容的提问来源于stack exchange,提问作者Ameer
相关产品推荐
相关产品推荐

