AWS Elastic Beanstalk 推出集群模式
AWS Elastic Beanstalk 推出全托管 Cluster Mode,基于 Amazon EKS 让多个应用共享基础设施,应用组合越大单应用成本越低。
中文
复制

自 2011 年 AWS Elastic Beanstalk 首次发布以来,客户用它部署了 Java、.NET、Python、Node.js、PHP、Ruby 和 Go 的全栈应用,把部署和基础设施运维交给 Elastic Beanstalk,自己专注业务逻辑。十五年后,这份信任只增不减,服务本身也已按这份信任重建。如今,AWS Elastic Beanstalk 是 AWS 上的应用管理服务,对生产环境承担全部运维责任。应用以现有形态接入即可:源代码、Dockerfile 或容器镜像。Elastic Beanstalk 在其下创建并管理生产环境。你管应用,其余全归 AWS——持续部署、扩缩容、打补丁、监控和维护。这份运维责任始终留在 AWS 手中,贯穿应用的整个生命周期。 我们一直在重建底层的运维引擎,并陆续交付了一系列能力,让它比以往更强大。Elastic Beanstalk 现在使用 AI 驱动的环境分析自动诊断健康问题并给出修复建议。新的官方 GitHub Action让团队只需一份 YAML 配置,就能直接从现有 CI/CD 工作流部署。我们还重建了基础设施底座,带来基于 OpenTelemetry 的可观测性、带自动回滚的流量拆分部署、事件驱动的自动扩缩容、通过 AWS Secrets Manager 管理密钥,以及通过 AWS Certificate Manager 默认启用 HTTPS。 今天,我们宣布 AWS Elastic Beanstalk 的下一章:全新的全托管 Cluster Mode,在负载的整个生命周期内持续部署、扩缩容、打补丁、监控并升级你的应用。你带来应用,AWS 负责运行。 新的 Cluster Mode 面向运行应用组合的团队。你不必再孤立地运维每个应用,而是运行多个共享基础设施的应用,底层由 Amazon Elastic Kubernetes Service (Amazon EKS) 驱动,全托管,统一运维基线。多个应用共享资源,因此随着应用组合扩大,单应用成本下降,运维复杂度不增。无论运行十个还是一百个应用,你都通过同一套体验管理,每个技术栈享有相同的运维保障。 Elastic Beanstalk Cluster Mode 为你的负载带来的好处:
- 从源代码到生产环境,支持任意运行时。上传 Java、.NET、Python、Node.js、PHP、Ruby 或 Go 源代码。需要时,Elastic Beanstalk 会通过 Cloud Native Buildpacks 自动完成容器化。无需 Dockerfile,也无需重构架构。你可以把本地数据中心的遗留应用迁移上来,也可以用任何受支持的语言部署新服务。
- 企业级合规开箱即用。Elastic Beanstalk 符合 HIPAA 资格、满足 PCI DSS 合规要求,并对齐 SOC 1/2/3,无需额外配置,受监管行业的团队可以直接用它部署生产工作负载,满足既有的合规要求。
- 生产级部署策略。支持一次性全量、滚动、不可变和流量拆分部署,失败时自动回滚。事件驱动的自动扩缩容。集成 AWS Secrets Manager。原生支持 OpenTelemetry,可轻松对接大多数可观测性后端,包括 Amazon CloudWatch。
- AI 驱动的故障排查。出问题时,Elastic Beanstalk 会收集服务端日志并给出 AI 生成的建议,帮你更快定位和解决问题,不必再翻基础设施的细节。
初识 Elastic Beanstalk Cluster Mode
首先打开 Elastic Beanstalk 控制台,创建一个新环境,在 Deployment type 中选择 Cluster。

Elastic Beanstalk 接受源代码、Dockerfile 或容器镜像来部署应用。例如,你可以选择 Local file 并提供应用代码,同时指定容器镜像构建选项。其余部分用默认值,大多数场景下都够用。

点击 Create,部署就开始了。注意:对一组新的子网做首次部署会触发创建 EKS 集群,大约需要十分钟出头。之后的部署会更快,因为复用了已有的 EKS 集群。 部署成功后的界面如下:

你也可以使用 AWS Command Line Interface (AWS CLI)、EB CLI 或 AWS SDK。举例来说,假设要把一个由多个微服务组成的应用部署到 Kubernetes。首先创建一个应用。
aws elasticbeanstalk create-application \
--application-name "my-microservice" \
--description "Multi-services demo" \
每个微服务可能已经在 Amazon Elastic Container Registry (Amazon ECR) 中有构建好的镜像。把它们注册为应用版本:
IMAGES=(
"frontend-v1|public.ecr.aws/my-microservices/frontend:v1"
"cartservice-v1|public.ecr.aws/my-microservices/cart:v1"
"paymentservice-v1|public.ecr.aws/my-microservices/payment:v1"
"shippingservice-v1|public.ecr.aws/my-microservices/shipping:v1"
)
for entry in "${IMAGES[@]}"; do
IFS='|' read -r label uri <<< "$entry"
aws elasticbeanstalk create-application-version \
--application-name $APP_NAME \
--version-label "$label" \
--image-configuration Source="{Uri=$uri}" \
--region "us-west-2
echo "Registered: $label"
done
你可以为每个服务设置并部署对应的服务选项。例如,frontend 服务是唯一需要公网接口(如 Application Load Balancer)的服务,同时由于它是 HTTP 服务,还需要设置健康检查路径:
[
{"Namespace": "aws:elasticbeanstalk:eks", "OptionName": "cluster-role", "Value": "arn:aws:iam::0123456789012:rol<...>"},
{"Namespace": "aws:elasticbeanstalk:eks", "OptionName": "node-role", "Value": "arn:aws:iam::0123456789012:role/E<...>"},
{"Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "observability-role", "Value": "arn:aws:iam::0123456<...>"},
{"Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "subnets", "Value": "subnet-1,subnet-2,subnet-3,<...>"},
{"Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling", "OptionName": "min-replica", "Value": "1"},
{"Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling", "OptionName": "max-replica", "Value": "2"},
{"Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "cpu", "Value": "0.5"},
{"Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "memory", "Value": "256Mi"},
{"Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "memory-limit", "Value": "512Mi"},
{"Namespace": "aws:elasticbeanstalk:eks:environment", "OptionName": "service-port", "Value": "8080"},
{"Namespace": "aws:elasticbeanstalk:eks:alb", "OptionName": "scheme", "Value": "internet-facing"},
{"Namespace": "aws:elasticbeanstalk:eks:alb", "OptionName": "healthcheck-path", "Value": "/_healthz"}
] #frontend-options.json namespaces
接下来用这些选项创建 frontend 服务环境。其余服务环境可以照此方式逐个部署。
aws elasticbeanstalk create-environment \
--application-name my-microservice \
--environment-name frontend \
--version-label frontend-v1 \
--tier Name=Cluster,Type=EKS \
--option-settings file:///tmp/frontend-options.json \
所有服务部署完成后,控制台大致如下:

由 Amazon Elastic Compute Cloud (EC2) 驱动的 Elastic Beanstalk Standard 仍将获得完整支持。Standard 和 Cluster Mode 环境可以在同一个 Elastic Beanstalk 应用中共存,团队因此能按自己的节奏逐个迁移环境。迁移前会通过校验检查确认兼容性,不会有环境被强制迁移。 Elastic Beanstalk Standard Mode 仍然最适合以下场景:
- 单一应用或单环境用例
- IIS 上的 Windows/.NET Framework 工作负载
- 无法容器化的应用
- 每月支出低于 500 美元的工作负载——EKS 控制平面费用和 EKS Auto Mode 溢价会带来额外开销,而单一应用无法通过装箱调度(bin-packing)把这部分开销抵消掉
要了解如何在 Cluster Mode 中部署和管理应用,请参阅 Elastic Beanstalk Cluster Mode 文档。 现已推出
AWS Elastic Beanstalk Cluster Mode 即日起在所有提供 Elastic Beanstalk 的 AWS 区域正式可用。区域可用性及未来路线图请参阅 AWS Capabilities by Region。如果你想调用 API、查阅文档、了解区域可用性或排查这一新功能的问题,可以搭配你常用的 AI 工具使用 AWS MCP Server 和插件。 Elastic Beanstalk Cluster Mode 不额外收费。你只需为应用实际消耗的底层 AWS 资源付费,包括 EKS 控制平面费用、EKS Auto Mode 计算、Amazon ECR 和 Amazon CloudWatch。请注意,Elastic Beanstalk Cluster Mode 不适用于 AWS Free Tier。了解更多请访问 AWS Elastic Beanstalk 定价页面。 欢迎在 Elastic Beanstalk 控制台中试用,并通过 AWS re:Post for AWS Elastic Beanstalk 或你常用的 AWS Support 渠道反馈意见。 — Channy