Connect Streamlit to AWS S3
Introduction
本指南解释了如何从Streamlit社区云安全地访问AWS S3上的文件。它使用了Streamlit FilesConnection、s3fs库以及可选的Streamlit的Secrets管理。
Create an S3 bucket and add a file
注意
如果您已经有一个想要使用的存储桶,请随时跳到下一步。
首先,注册AWS或登录。前往S3控制台并创建一个新的存储桶:


导航到您新存储桶的上传部分:


并记下“AWS区域”以备后用。在这个例子中,它是us-east-1,但你的可能不同。
接下来,上传以下CSV文件,其中包含一些示例数据:
myfile.csvCreate access keys
前往 AWS 控制台,按照以下步骤创建访问密钥,并复制“访问密钥 ID”和“秘密访问密钥”:


提示
作为根用户创建的访问密钥具有广泛的权限。为了使您的AWS账户更加安全,您应该考虑创建一个具有受限权限的IAM账户并使用其访问密钥。更多信息这里。
Set up your AWS credentials locally
Streamlit FilesConnection 和 s3fs 将会读取并使用您现有的 AWS credentials and configuration(如果可用)——例如来自 ~/.aws/credentials 文件或环境变量。
如果您还没有设置好,或者计划在Streamlit社区云上托管应用程序,您应该从应用程序根目录或主目录中的文件.streamlit/secrets.toml指定凭据。如果该文件尚不存在,请创建此文件,并在其中添加您之前记下的访问密钥ID、访问密钥秘密和AWS默认区域,如下所示:
# .streamlit/secrets.toml
AWS_ACCESS_KEY_ID = "xxx"
AWS_SECRET_ACCESS_KEY = "xxx"
AWS_DEFAULT_REGION = "xxx"
重要
请确保将上面的xxx替换为您之前记录的值,并将此文件添加到.gitignore中,这样您就不会将其提交到您的GitHub仓库中!
Copy your app secrets to the cloud
要在Streamlit Community Cloud上托管您的应用程序,您需要通过secrets将您的凭据传递给已部署的应用程序。转到app dashboard,在应用程序的下拉菜单中,点击Edit Secrets。将上面的secrets.toml内容复制到文本区域。更多信息可在Secrets management找到。

Add FilesConnection and s3fs to your requirements file
将FilesConnection和s3fs包添加到您的requirements.txt文件中,最好固定版本(将x.x.x替换为您想要安装的版本):
# requirements.txt
s3fs==x.x.x
st-files-connection
Write your Streamlit app
将下面的代码复制到您的Streamlit应用程序中并运行它。确保调整您的存储桶和文件的名称。请注意,Streamlit会自动将您的密钥文件中的访问密钥转换为环境变量,s3fs默认会在这些环境变量中搜索它们。
# streamlit_app.py
import streamlit as st
from st_files_connection import FilesConnection
# Create connection object and retrieve file contents.
# Specify input format is a csv and to cache the result for 600 seconds.
conn = st.connection('s3', type=FilesConnection)
df = conn.read("testbucket-jrieke/myfile.csv", input_format="csv", ttl=600)
# Print results.
for row in df.itertuples():
st.write(f"{row.Owner} has a :{row.Pet}:")
看到上面的st.connection了吗?它处理秘密检索、设置、结果缓存和重试。默认情况下,read()的结果会被缓存且不会过期。在这个例子中,我们设置了ttl=600以确保文件内容缓存不超过10分钟。你也可以设置ttl=0来禁用缓存。了解更多信息,请查看Caching。
如果一切顺利(并且你使用了上面给出的示例文件),你的应用程序应该看起来像这样:

还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。