简化容器部署 - 使用 AWS App Runner 实现零配置部署
详解使用 AWS App Runner 部署容器化 Web 应用的方法。涵盖与 ECS/Fargate 的选型对比、自动扩缩容、VPC 集成以及 CI/CD 流水线联动的实践内容。
App Runner 的定位与容器部署的挑战
将容器化的 Web 应用部署到 AWS 时,传统做法是使用 ECS (Elastic Container Service) 或 EKS (Elastic Kubernetes Service)。但这些服务需要配置集群管理、任务定义、服务定义、负载均衡器、目标组、安全组等大量资源,要求具备基础设施知识。AWS App Runner 是 2021 年发布的全托管容器应用服务,完全抽象化了这些复杂性。只需指定源代码仓库 (GitHub) 或容器镜像 (ECR),App Runner 就会自动处理构建、部署、扩缩容、负载均衡和 TLS 终止。开发者可以专注于应用代码,只要有 Dockerfile 就能在无需基础设施知识的情况下部署到生产环境。需要注意的是,App Runner 已停止接受新客户,仅现有客户可继续使用(截至 2026 年 8 月)。新的容器部署可选用 ECS (Express Mode) 等作为承接方案。
部署方式与源配置
App Runner 支持两种源类型。第一种是容器镜像源,指定 ECR(公共或私有)中的镜像。也可配置检测到 ECR 镜像推送后自动部署。第二种是源代码仓库,连接 GitHub 仓库后 App Runner 从构建到部署一体化执行。选择托管运行时后,无需 buildspec.yml,只需指定构建命令和启动命令即可运行(支持的运行时将在下一节介绍)。
# CloudFormation 中的 App Runner 服务定义
Resources:
AppRunnerService:
Type: AWS::AppRunner::Service
Properties:
ServiceName: my-web-app
SourceConfiguration:
AuthenticationConfiguration:
AccessRoleArn: !GetAtt AppRunnerAccessRole.Arn
AutoDeploymentsEnabled: true
ImageRepository:
ImageIdentifier: !Sub '${AWS::AccountId}.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:latest'
ImageRepositoryType: ECR
ImageConfiguration:
Port: '8080'
RuntimeEnvironmentVariables:
- Name: NODE_ENV
Value: production
InstanceConfiguration:
Cpu: '1024'
Memory: '2048'实例配置可组合选择 vCPU (0.25 / 0.5 / 1 / 2 / 4) 和内存 (0.5 至 12 GB)。无需像 ECS Fargate 那样分别配置任务定义、服务定义、ALB、监听器和目标组,一个资源定义即可完成部署。
GitHub 集成与源代码部署实践
源代码部署方式连接 GitHub 仓库后,App Runner 自动从代码构建容器镜像并完成部署。支持的托管运行时有 Python、Node.js、Java (Corretto)、Go、.NET、PHP、Ruby 等多种,选择其中之一即可在不编写 Dockerfile 的情况下完成部署。运行时版本会不时新增或终止支持,请在着手时查阅官方文档确认当前的支持状况。在仓库根目录放置 apprunner.yaml 文件,可以声明式定义构建命令、启动命令、运行时版本和环境变量,实现基础设施配置与代码的统一版本管理。GitHub 集成提供自动部署和手动部署两种模式。启用自动部署后,向指定分支 push 代码时会自动触发构建和部署,无需另外搭建 CI/CD 流水线。选择手动部署时,通过控制台或 API 显式触发部署。自动构建费用为每分钟 0.005 美元,push 频繁的仓库需注意构建费用的累积。此外,每个启用自动部署的应用每月需支付 1 美元的固定费用(截至 2026 年 8 月,东京区域)。
自定义域名与可观测性
自定义域名的配置只需在控制台输入域名,然后在 DNS 提供商 (Route 53 或外部 DNS) 中添加 CNAME 记录即可完成。ACM (AWS Certificate Manager) 证书会自动签发和续期,配置的自定义域名即可通过 HTTPS 访问。使用 VPC 连接器时会创建 ENI (弹性网络接口),因此指定的子网需要有充足的 IP 地址空间。在可观测性方面,启用 X-Ray 追踪可以可视化请求延迟和错误的分布式追踪。访问日志和应用日志会自动发送到 CloudWatch,HTTP 2xx/4xx/5xx 计数和响应时间作为指标被记录。健康检查可通过 HTTP 路径或 TCP 配置,异常实例会被自动替换。
自动扩缩容与成本结构
App Runner 标准提供基于请求数的自动扩缩容。在 Auto Scaling Configuration 中可设置并发请求数阈值(默认 100)、最小实例数(1 至 25)和最大实例数(最大 25)。流量减少时自动缩减实例,直至最小实例数。使用暂停 (Pause) 功能后计算容量降为零,停止期间不产生费用。下面梳理费用结构(截至 2026 年 8 月,东京区域,月费均按 730 小时换算)。单价为 vCPU 每小时 0.0809 美元、内存每 GB 每小时 0.00885 美元。活跃实例同时收取 vCPU 和内存费用,预置(待机)实例仅收取内存费用。这项待机内存费用就是将最小实例数保持在 1 以上以避免冷启动的配置所需的最低成本。例如 1 vCPU / 2 GB 内存配置持续运行,约 72.0 美元/月。在同一东京区域持续运行 ECS Fargate 的同等配置(1 vCPU / 2 GB)约 45.0 美元/月,另需加上 ALB 的费用。ALB 的固定费用为每小时 0.0243 美元(约 17.7 美元/月),再加上 LCU(负载均衡器容量单位)每小时 0.008 美元,若按小规模持续消耗 1 LCU 估算,合计约 23.6 美元/月。也就是说,持续满负荷运行的总额为 Fargate + ALB 约 68.6 美元/月、App Runner 约 72.0 美元/月,仅看单价 App Runner 并不更便宜。App Runner 在成本上的优势体现在流量有波动的场景。若服务在夜间和节假日几乎没有访问,待机期间只需支付内存费用(2 GB 约 12.9 美元/月),不使用的时段还可通过暂停彻底停止计费。而 ALB 无论通信量多少都会持续产生固定费用。请根据预期的运行模式而非单价表的比较来做判断。
VPC 集成与安全
App Runner 默认提供公共端点,但通过 VPC 连接器可访问私有子网中的资源(RDS、ElastiCache、DynamoDB VPC 端点等)。VPC 连接器通过指定子网和安全组创建,并关联到 App Runner 服务。仅出站通信经过 VPC,入站仍通过 App Runner 的托管端点接收。通过与 WAF (Web Application Firewall) 集成,可将 WAF WebACL 关联到 App Runner 端点,应用 IP 限制和速率限制等安全规则。与 Secrets Manager 和 Systems Manager Parameter Store 集成后,可安全管理数据库凭证和 API 密钥,并作为环境变量注入。IAM 访问控制、CloudWatch 指标监控(请求数、延迟、HTTP 状态码)、应用日志输出到 CloudWatch Logs 也是标准功能。
与 ECS/Fargate 的选型对比
App Runner 和 ECS/Fargate 都运行容器工作负载,但目标用例不同。App Runner 专注于 HTTP/HTTPS 的 Web 应用和 API,请求驱动的扩缩容是标准功能。而 ECS/Fargate 支持批处理、Worker 进程、gRPC、WebSocket、Sidecar 模式等广泛的工作负载。 选型判断标准如下。应选择 App Runner 的场景:希望快速部署 HTTP/HTTPS Web 应用或 API、希望最小化基础设施管理、团队缺乏容器编排专业知识。应选择 ECS/Fargate 的场景:需要 Sidecar 容器或服务网格、使用 TCP/UDP 协议、需要精细控制任务放置策略和容量提供者、批处理或队列 Worker 等非 HTTP 工作负载。EKS 适用于需要 Kubernetes 生态兼容性或多云策略中重视工作负载可移植性的场景。App Runner 的抽象程度高于 ECS/Fargate,以缩减可配置项为代价省去了配置工作。将其理解为控制灵活性与简洁性之间的权衡,会更容易做出选择。Elastic Beanstalk 也提供简化部署,但底层的 EC2 和 ALB 资源是可见且可管理的,定制化空间更大,但管理对象也相应增多。如果希望跳过 Dockerfile、CI/CD 搭建以及 VPC/ALB 配置,App Runner 是最佳选择。
总结 - App Runner 使用指南
AWS App Runner 是一项以最少配置部署和运维容器化 Web 应用的服务。只需指定源代码或容器镜像,构建、部署、TLS、负载均衡和 Auto Scaling 即自动配置。VPC 连接器访问私有资源、WAF 集成增强安全、Secrets Manager 联动管理凭证等生产运维所需功能一应俱全。与 ECS/Fargate 相比控制灵活性较低,但无需配置 ALB 和目标组,对于中小规模 Web 应用可大幅降低运维负担。成本方面取决于运行模式,持续满负荷运行时与 Fargate + ALB 大致处于同一水平,流量波动越大 App Runner 越有优势。作为容器部署的第一步或原型快速发布的手段,App Runner 是有力的选择。
参考资料(AWS 官方)
本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。
如本页内容与官方文档不一致,请以官方文档为准。