亚马逊AWS官方博客

AWS Elastic Beanstalk 推出集群模式

自 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 现在使用人工智能驱动的环境分析来诊断运行状况问题并自动建议修复方法。一项新的官方 GitHub 操作使团队能够使用单个 YAML 配置直接从现有的 CI/CD 工作流进行部署。我们还重建了基础设施基础,以提供基于 OpenTelemetry 的可观测性、带自动回滚功能的流量拆分部署、事件驱动的自动扩展、通过 AWS Secrets Manager 进行的密钥管理,以及默认情况下通过 AWS Certificate Manager 提供的 HTTPS。

今天,我们正式发布 AWS Elastic Beanstalk 的下一章节:推出全面托管式集群模式,可在工作负载的全生命周期内持续完成应用程序的部署、扩缩、修复、监控与升级‌。请接入您的应用程序。AWS 将运行它。

新的集群模式专为运行应用程序组合的团队而构建。您可以运行多个应用程序,而不是单独操作每个应用程序,这些应用程序共享由 Amazon Elastic Kubernetes Service(Amazon EKS)提供支持的基础设施,并使用单一操作基准进行完全管理。多个应用程序共享资源,因此每个应用程序的成本会随着产品组合的增长而降低,而不会增加运营复杂性。无论您运行十个应用程序还是一百个应用程序,您都可以通过一种体验来管理它们,每个堆栈都有相同的运营保障。

Elastic Beanstalk 集群模式为您的工作负载带来的益处:

  • 从源代码到生产环境,任何运行时。在 Java、.NET、Python、Node.js、PHP、Ruby 或 Go 中上传源代码。Elastic Beanstalk 在需要时通过云原生构建包自动处理容器化。不需要 Dockerfile,也无需重新架构。您可以从本地引入传统应用程序,也可以使用任何支持的语言部署新服务。
  • 内置企业合规性。 Elastic Beanstalk 符合 HIPAA 资格,符合 PCI DSS 标准,并且与 SOC 1/2/3 一致,无需额外配置,受监管行业的团队即可直接部署符合自身合规性要求的生产级工作负载‌。
  • 生产级部署策略。支持全部一次性部署、滚动部署、不可变部署与流量拆分部署,且失败时可自动回滚‌。事件驱动的自动扩缩。AWS Secrets Manager 集成。所有原生 OpenTelemetry 均支持与包括 Amazon CloudWatch 在内的大多数可观测性后端轻松集成。
  • 人工智能驱动的故障排除。出现问题时,Elastic Beanstalk 会收集服务端日志并提供人工智能生成的建议,以帮助您更快地解决问题,而无需逐层排查基础设施。

Elastic Beanstalk 集群模式初览
要开始使用,请前往 Elastic Beanstalk 控制台,创建一个新环境,然后在部署类型中选择集群

Elastic Beanstalk 接受源代码、docker 文件或容器镜像来部署您的应用程序。例如,您可以通过选择本地文件并指定容器镜像生成选项来为您的环境提供应用程序代码。对于其余部分,默认值应该适用于大多数场景。

选择创建按钮,部署即开始! 请注意,给定子网集的第一次部署将触发 EKS 集群创建,这大约需要 10 分钟。后续部署速度更快,因为它们会重复使用现有的 EKS 集群。

部署成功后的样子如下:

您还可以使用 AWS 命令行界面(AWS CLI)EB CLIAWS 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

您可以为每项服务设置和部署相应的服务选项。例如,前端服务是唯一需要公共互联网接口(例如应用程序负载均衡器)的服务,并且由于它是 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

现在,使用这些选项创建前端服务环境。您可以继续以类似的方式部署每个服务环境。

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 标准模式。标准和集群模式环境在同一 Elastic Beanstalk 应用程序中并行运行,使团队能够按照自己的节奏一次迁移一个环境。验证检查在进行任何更改之前会确认兼容性,因此不会强制移动任何环境。

Elastic Beanstalk 标准模式仍然最适合以下场景:

  • 单一应用程序或单一环境应用场景
  • IIS 上的 Windows/.NET Framework 工作负载
  • 无法容器化的应用程序
  • 工作负载支出低于 500 美元/月,其中 EKS 控制面板费用和 EKS 自动模式溢价增加了单个应用程序无法通过装箱来抵消的开销

要详细了解如何在集群模式下部署和管理应用程序,请访问 Elastic Beanstalk 集群模式文档

现已推出
AWS Elastic Beanstalk 集群模式现已在提供 Elastic Beanstalk 的所有 AWS 区域正式推出。有关区域可用性和未来路线图,请访问按区域列出的 AWS 功能。如果您想调用 API、搜索文档、查找区域可用性并对此新功能进行问题排查,请尝试在首选人工智能工具中使用 AWS MCP 服务器插件

Elastic Beanstalk 集群模式不收取额外费用。您只需为应用程序消耗的底层 AWS 资源付费,包括 EKS 控制面板费用、EKS 自动模式计算、Amazon ECR 和 Amazon CloudWatch。注意,Elastic Beanstalk 集群模式不符合 AWS 免费套餐资格。要了解更多信息,请访问 AWS Elastic Beanstalk 定价页面

Elastic Beanstalk 控制台中试用该功能,并将反馈发送至 AWS re:Post for AWS Elastic Beanstalk 或通过常用的 AWS Support 联系方式发送反馈。

Channy