View a markdown version of this page

Beanstalk 集群入门 - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Beanstalk 集群入门

在本教程中,您将创建 Elastic Beanstalk 应用程序和 Beanstalk 集群环境。您可以省略应用程序版本,这样 Elastic Beanstalk 就可以部署其预建的示例容器镜像。然后,等待环境准备就绪,检索其 URL 并终止它。或者,你可以在管理控制台中开始使用, AWS 管理控制台提供全方位的指导性体验,或者让你的AI代理查看Beanstalk 集群文档。

预计持续时间:15—20 分钟

重要

Elastic Beanstalk 不收取额外费用,但您需要为环境使用的 AWS 资源付费,包括亚马逊 EKS 及其计算。有关更多信息,请参阅 E lastic Beanstalk 定价。完成本教程后完成清理步骤。

开始前的准备工作

完成以下先决任务:

  • 安装和配置 AWS CLI。有关说明,请参阅《AWS Command Line Interface User Guide》中的 Get started with the AWS CLI。

  • 使用可以创建和管理 Elastic Beanstalk 应用程序和环境的 IAM 委托人,并且可以在创建环境时传递集群、节点和可观测性角色。有关确切的权限,请参阅创建环境的权限。

  • 创建 Amazon EKS 担任的集群角色、集群的 Amazon EC2 节点担任的节点角色以及发布环境指标、日志和跟踪的可观察性角色,如中所创建 IAM 角色述。要选择环境使用的 VPC 子网,请参阅为 Beanstalk 集群环境配置网络。

  • 选择 Beanstalk 集群可用的 AWS 区域。这些命令使用您的 AWS CLI 配置中的区域。

创建 IAM 角色

Beanstalk 集群环境需要您提供三个 IAM 角色:集群角色、节点角色和可观察性角色。Elastic Beanstalk 控制台会为您创建它们,但是本教程使用它们 AWS CLI,因此请先创建它们。使用这些名称,因为控制台按名称选择现有角色。有关每个角色的用途以及您需要传递的呼叫者权限,请参阅Beanstalk 集群的权限。

创建集群、节点和可观测性角色
  1. 为承担角色的每项服务创建信任策略文件。集群角色信任亚马逊 EKS,节点角色信任亚马逊 EC2,可观察性角色信任亚马逊 EKS Pod 身份。

    $ cat > eks-trust.json <<'EOF' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "eks.amazonaws.com"}, "Action": ["sts:AssumeRole", "sts:TagSession"] }] } EOF
    $ cat > ec2-trust.json <<'EOF' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" }] } EOF
    $ cat > pods-trust.json <<'EOF' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "pods.eks.amazonaws.com"}, "Action": ["sts:AssumeRole", "sts:TagSession"] }] } EOF
  2. 创建群集角色并附加其策略。

    $ aws iam create-role \ --role-name aws-elasticbeanstalk-eks-cluster-role \ --assume-role-policy-document file://eks-trust.json $ for p in AmazonEKSClusterPolicy AmazonEKSNetworkingPolicy AmazonEKSComputePolicy \ AmazonEKSBlockStoragePolicy AmazonEKSLoadBalancingPolicy AWSElasticBeanstalkEKSTagging; do aws iam attach-role-policy \ --role-name aws-elasticbeanstalk-eks-cluster-role \ --policy-arn arn:aws:iam::aws:policy/$p done
  3. 创建节点角色并附加其策略。

    $ aws iam create-role \ --role-name aws-elasticbeanstalk-eks-node-role \ --assume-role-policy-document file://ec2-trust.json $ for p in AmazonEKSWorkerNodeMinimalPolicy AmazonEC2ContainerRegistryPullOnly \ AmazonSSMManagedInstanceCore; do aws iam attach-role-policy \ --role-name aws-elasticbeanstalk-eks-node-role \ --policy-arn arn:aws:iam::aws:policy/$p done
  4. 创建可观察性角色并附加其策略。

    $ aws iam create-role \ --role-name aws-elasticbeanstalk-eks-observability-role \ --assume-role-policy-document file://pods-trust.json $ for p in CloudWatchAgentServerPolicy AWSElasticBeanstalkEKSObservability; do aws iam attach-role-policy \ --role-name aws-elasticbeanstalk-eks-observability-role \ --policy-arn arn:aws:iam::aws:policy/$p done
  5. 记录三个角色 ARN。你在创建环境时传递它们。

    $ for r in cluster node observability; do aws iam get-role --role-name aws-elasticbeanstalk-eks-$r-role \ --query 'Role.Arn' --output text done

选择支持的配置工具

您可以使用 Elastic Beanstalk 控制台、Elastic Beanstalk API 或 Elastic Beanstalk API 来创建和管理 Beanstalk 集群环境。 AWS CLI本教程使用 AWS CLI 使每个请求都可见且可重复。

您也可以使用官方 Act GitHub ion 进行部署,也可以通过提供商使用 Terraform 将环境定义为基础架构即 AWS 代码。有关 GitHub 操作,请参阅使用 GitHub 操作部署到 Elastic Beanstalk。

创建应用程序并部署示例

  1. 创建一个 Elastic Beanstalk 应用程序来容纳环境。

    $ aws elasticbeanstalk create-application \ --application-name getting-started-cluster-app
  2. 创建环境。该Cluster等级选择 Beanstalk 集群。由于此请求没有版本标签,因此 Elastic Beanstalk 会部署示例应用程序。

    $ aws elasticbeanstalk create-environment \ --application-name getting-started-cluster-app \ --environment-name getting-started-cluster-env \ --tier Name=Cluster,Type=EKS \ --option-settings \ Namespace=aws:elasticbeanstalk:eks,OptionName=cluster-role,Value=cluster-role-arn \ Namespace=aws:elasticbeanstalk:eks,OptionName=node-role,Value=node-role-arn \ Namespace=aws:elasticbeanstalk:eks:environment,OptionName=observability-role,Value=observability-role-arn

    用您准备的角色替换角色 ARN 占位符。该请求省略了service-port和。load-balancer-typeElastic Beanstalk 将这些设置解析为其默认值,以及。8080 ALB要选择不同的值,请将它们传递给--option-settings。有关完整的选项参考,请参阅Beanstalk 集群环境的配置选项。

  3. 等待环境准备就绪。第一个环境可能需要 15 到 20 分钟,而 Elastic Beanstalk 会创建亚马逊 EKS 集群并部署示例。 AWS CLI 它提供了一个内置的服务员,可以进行轮询直到环境报告Ready为止。服务员每隔 20 秒最多投票 20 次,大约 6 分 40 秒,因此在第一个环境下,服务员预计会报告。Max attempts exceeded再次运行它,直到它报告成功。

    $ aws elasticbeanstalk wait environment-exists \ --environment-names getting-started-cluster-env

    服务员会报告Max attempts exceeded何时仍在创建环境以及何时创建失败。如果运行几次后仍未报告成功,请检查环境的最新事件并解决报告的错误,然后继续。

    $ aws elasticbeanstalk describe-events \ --environment-name getting-started-cluster-env \ --query 'Events[].[EventDate,Severity,Message]' \ --output table
  4. 检查环境状态、运行状况颜色、运行状况和 URL。

    $ aws elasticbeanstalk describe-environments \ --application-name getting-started-cluster-app \ --environment-names getting-started-cluster-env \ --query 'Environments[0].[Status,Health,HealthStatus,CNAME]' \ --output table

    确认环境报告Ready并返回非空CNAME值。在 Web 浏览器中打开 CNAME,https://然后确认示例应用程序已响应。负载均衡器仅通过 HTTPS 进行响应,因此请求会http://等待直到超时。要接受 HTTP 请求并让 Elastic Beanstalk 将其重定向到 HTTPS,请参阅。为 Beanstalk 集群环境配置网络空闲环境最初可以报告Grey,但NoData由于收到的请求太少,无法确定应用程序运行状况;运行状况事件将此状态显示为No Data。这并不表示部署失败。在应用程序收到足够的成功请求后,运行状况通常会移至Green和Ok。如果 CNAME 为空、应用程序不响应或运行状况报告故障,请先检查环境的最新事件,然后继续:

    $ aws elasticbeanstalk describe-events \ --environment-name getting-started-cluster-env \ --query 'Events[].[EventDate,Severity,Message]' \ --output table

    有关集群运行状况模型,请参阅监控 Beanstalk 集群环境。

部署自己的容器镜像

环境正在运行示例应用程序,因为创建请求没有版本标签。要运行自己的应用程序,请创建一个命名容器镜像的应用程序版本,然后将该版本部署到环境中。这是正常的 Elastic Beanstalk 流程:应用程序版本是可部署的工件,而示例则是当你不提供应用程序时 Elastic Beanstalk 部署的内容。

在开始之前,您需要一个已经推送到注册表的容器镜像,例如账户中的亚马逊弹性容器注册表 (Amazon ECR) 存储库,并且该映像必须监听环境的镜像service-port,8080除非您对其进行了更改。部署自己的版本会取代示例应用程序。要让 Elastic Beanstalk 改用您的源代码构建镜像,以及构建选项,请参阅。为 Beanstalk 集群环境构建容器镜像

  1. 创建指向您的图像的应用程序版本。

    $ aws elasticbeanstalk create-application-version \ --application-name getting-started-cluster-app \ --version-label v1 \ --image-configuration Source={Uri=your-image-uri}

    例如your-image-uri,用你的图片替换111122223333.dkr.ecr.us-east-1.amazonaws.com/my-app:v1。由于镜像已经构建,因此该版本无需构建步骤即可部署。

  2. 将版本部署到环境中。

    $ aws elasticbeanstalk update-environment \ --environment-name getting-started-cluster-env \ --version-label v1
  3. 确认部署已完成且环境正在为您的应用程序提供服务。

    $ aws elasticbeanstalk describe-events \ --environment-name getting-started-cluster-env \ --query 'Events[].[EventDate,Severity,Message]' \ --output table

    在 Web 浏览器中打开环境的 CNAME,https://然后确认您的应用程序已响应。如果不是,请检查事件中是否存在部署故障,并确认镜像监听了环境的service-port监听。

清理教程资源

  1. 终止环境。

    $ aws elasticbeanstalk terminate-environment \ --environment-name getting-started-cluster-env
  2. 等待环境达到Terminated状态。 AWS CLI 提供了一个内置的服务员,该服务员可以轮询直至终止为止。该服务员有相同的 20 次尝试次数限制,因此请再次运行直到它报告成功为止。

    $ aws elasticbeanstalk wait environment-terminated \ --environment-names getting-started-cluster-env

    服务员Max attempts exceeded既要报告终止仍在进行中,也要报告终止失败的情况。如果它在几次运行后仍未报告成功,请解决环境事件中的错误。不要在环境仍然存在时删除应用程序。

  3. 删除应用程序及其应用程序版本,包括 Elastic Beanstalk 创建的示例版本和您添加的任何版本。这不会删除您提供的容器镜像或保存该镜像的存储库;请参阅为 Beanstalk 集群环境构建容器镜像。

    $ aws elasticbeanstalk delete-application \ --application-name getting-started-cluster-app

只有在您终止最后一个使用共享的亚马逊 EKS 集群的环境后,Elastic Beanstalk 才会删除该集群。集群删除最多可能需要三个小时;Amazon EKS 和其他资源费用将持续到删除完成为止。终止不会删除客户提供的集群、节点和可观测性 IAM 角色。按照中所述验证群集删除群集删除。

后续步骤