如何在AWS Fargate部署两个Streamlit应用并通过路径访问?
可行部署方案:ECS + ALB(可选API Gateway)实现多Streamlit应用子路径访问
步骤1:调整Streamlit应用启动参数
Streamlit默认使用根路径,必须配置baseUrlPath才能支持子路径访问,否则静态资源会404。更新你的容器启动命令:
- App1启动命令:
streamlit run app1.py --server.baseUrlPath /app1 --server.enableCORS false --server.enableXsrfProtection false - App2启动命令:
streamlit run app2.py --server.baseUrlPath /app2 --server.enableCORS false --server.enableXsrfProtection false
更新镜像后重新推送到ECR。
步骤2:ECS Fargate 任务与服务配置
2.1 创建任务定义
- 分别创建两个任务定义(例如
app1-task-def、app2-task-def),选择对应ECR镜像。 - 容器端口映射:容器端口填
8501,主机端口留空(Fargate自动分配)。 - 网络模式选择
awsvpc,任务/执行角色用默认ECS权限角色即可。
2.2 创建ECS服务(带ALB路径转发)
- 分别创建两个Fargate服务(
app1-service、app2-service),关联各自任务定义。 - 网络配置:选你的VPC和2个以上公有子网,开启“分配公有IP”(POC场景简化网络配置)。
- 负载均衡配置:
- 创建新的Application Load Balancer(ALB),HTTP监听器端口设为
80。 - 为每个服务创建独立目标组:
- App1目标组:路径规则设为
/app1/*,目标端口8501。 - App2目标组:路径规则设为
/app2/*,目标端口8501。
- App1目标组:路径规则设为
- 在ALB的HTTP监听器中添加路由规则:
- 路径匹配
/app1/*→ 转发到App1目标组。 - 路径匹配
/app2/*→ 转发到App2目标组。
- 路径匹配
- 创建新的Application Load Balancer(ALB),HTTP监听器端口设为
- 安全组配置:ECS服务安全组允许ALB访问
8501端口;ALB安全组允许外部80端口流量。
完成后,直接用ALB的域名访问:ALB_DNS/app1、ALB_DNS/app2即可打开对应应用。
步骤3:API Gateway 统一入口配置(可选)
如果需要用API Gateway作为统一访问入口,按以下操作:
- 创建REST API,在根资源下创建
/app1、/app2两个子资源。 - 为每个子资源添加
ANY方法,集成类型选HTTP,集成端点填ALB_DNS/app1(对应App1)和ALB_DNS/app2(对应App2),开启代理集成(自动转发所有请求方法和参数)。 - 部署API到任意阶段(例如
prod),之后通过API_GATEWAY_URL/prod/app1、API_GATEWAY_URL/prod/app2访问应用。
核心注意事项
- 必须配置Streamlit的
baseUrlPath,否则页面静态资源会加载失败。 - 所有网络组件(ECS服务、ALB、API Gateway)的安全组要确保流量互通。
内容的提问来源于stack exchange,提问作者Btibert3
相关产品推荐
相关产品推荐

