本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 集群的权限。
创建集群、节点和可观测性角色
-
为承担角色的每项服务创建信任策略文件。集群角色信任亚马逊 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 -
创建群集角色并附加其策略。
$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 -
创建节点角色并附加其策略。
$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 -
创建可观察性角色并附加其策略。
$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 -
记录三个角色 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。
创建应用程序并部署示例
-
创建一个 Elastic Beanstalk 应用程序来容纳环境。
$aws elasticbeanstalk create-application \ --application-name getting-started-cluster-app -
创建环境。该
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 将这些设置解析为其默认值,以及。8080ALB要选择不同的值,请将它们传递给--option-settings。有关完整的选项参考,请参阅Beanstalk 集群环境的配置选项。 -
等待环境准备就绪。第一个环境可能需要 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 -
检查环境状态、运行状况颜色、运行状况和 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 集群环境构建容器镜像
-
创建指向您的图像的应用程序版本。
$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。由于镜像已经构建,因此该版本无需构建步骤即可部署。 -
将版本部署到环境中。
$aws elasticbeanstalk update-environment \ --environment-name getting-started-cluster-env \ --version-label v1 -
确认部署已完成且环境正在为您的应用程序提供服务。
$aws elasticbeanstalk describe-events \ --environment-name getting-started-cluster-env \ --query 'Events[].[EventDate,Severity,Message]' \ --output table在 Web 浏览器中打开环境的 CNAME,
https://然后确认您的应用程序已响应。如果不是,请检查事件中是否存在部署故障,并确认镜像监听了环境的service-port监听。
清理教程资源
-
终止环境。
$aws elasticbeanstalk terminate-environment \ --environment-name getting-started-cluster-env -
等待环境达到
Terminated状态。 AWS CLI 提供了一个内置的服务员,该服务员可以轮询直至终止为止。该服务员有相同的 20 次尝试次数限制,因此请再次运行直到它报告成功为止。$aws elasticbeanstalk wait environment-terminated \ --environment-names getting-started-cluster-env服务员
Max attempts exceeded既要报告终止仍在进行中,也要报告终止失败的情况。如果它在几次运行后仍未报告成功,请解决环境事件中的错误。不要在环境仍然存在时删除应用程序。 -
删除应用程序及其应用程序版本,包括 Elastic Beanstalk 创建的示例版本和您添加的任何版本。这不会删除您提供的容器镜像或保存该镜像的存储库;请参阅为 Beanstalk 集群环境构建容器镜像。
$aws elasticbeanstalk delete-application \ --application-name getting-started-cluster-app
只有在您终止最后一个使用共享的亚马逊 EKS 集群的环境后,Elastic Beanstalk 才会删除该集群。集群删除最多可能需要三个小时;Amazon EKS 和其他资源费用将持续到删除完成为止。终止不会删除客户提供的集群、节点和可观测性 IAM 角色。按照中所述验证群集删除群集删除。
后续步骤
-
通过创建应用程序版本来部署自己的容器镜像或源代码。请参阅为 Beanstalk 集群环境构建容器镜像。
-
配置资源限制、扩展、部署行为、负载平衡和可观察性。请参阅Beanstalk 集群环境的配置选项。
-
学习如何更新和监控环境。请参阅管理 Elastic Beanstalk 环境和监控 Beanstalk 集群环境。