Connect Streamlit to AWS S3

本指南解释了如何从Streamlit社区云安全地访问AWS S3上的文件。它使用了Streamlit FilesConnections3fs库以及可选的Streamlit的Secrets管理

push_pin

注意

如果您已经有一个想要使用的存储桶,请随时跳到下一步

首先,注册AWS或登录。前往S3控制台并创建一个新的存储桶:

AWS screenshot 1
AWS screenshot 2

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

AWS screenshot 3
AWS screenshot 4

并记下“AWS区域”以备后用。在这个例子中,它是us-east-1,但你的可能不同。

接下来,上传以下CSV文件,其中包含一些示例数据:

myfile.csv

前往 AWS 控制台,按照以下步骤创建访问密钥,并复制“访问密钥 ID”和“秘密访问密钥”:

AWS screenshot 5
AWS screenshot 6
star

提示

作为根用户创建的访问密钥具有广泛的权限。为了使您的AWS账户更加安全,您应该考虑创建一个具有受限权限的IAM账户并使用其访问密钥。更多信息这里

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"
priority_high

重要

请确保将上面的xxx替换为您之前记录的值,并将此文件添加到.gitignore中,这样您就不会将其提交到您的GitHub仓库中!

要在Streamlit Community Cloud上托管您的应用程序,您需要通过secrets将您的凭据传递给已部署的应用程序。转到app dashboard,在应用程序的下拉菜单中,点击Edit Secrets。将上面的secrets.toml内容复制到文本区域。更多信息可在Secrets management找到。

Secrets manager screenshot

FilesConnections3fs包添加到您的requirements.txt文件中,最好固定版本(将x.x.x替换为您想要安装的版本):

# requirements.txt s3fs==x.x.x st-files-connection

将下面的代码复制到您的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

如果一切顺利(并且你使用了上面给出的示例文件),你的应用程序应该看起来像这样:

Finished app screenshot
forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。