

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

# Beanstalk 集群入门
<a name="beanstalk-cluster-getting-started"></a>

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

预计持续时间：**15—20 分钟 **

**重要**  
Elastic Beanstalk 不收取额外费用，但您需要为环境使用的 AWS 资源付费，包括亚马逊 EKS 及其计算。有关更多信息，请参阅 E [ lastic Beanstalk 定价。](https://aws.amazon.com/elasticbeanstalk/pricing/)完成本教程后完成清理步骤。

## 开始前的准备工作
<a name="beanstalk-cluster-getting-started-prerequisites"></a>

完成以下先决任务：
+ 安装和配置 AWS CLI。有关说明，请参阅**《AWS Command Line Interface User Guide》中的 [Get started with the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。
+ 使用可以创建和管理 Elastic Beanstalk 应用程序和环境的 IAM 委托人，并且可以在创建环境时传递集群、节点和可观测性角色。有关确切的权限，请参阅[创建环境的权限](beanstalk-cluster-permissions.md#beanstalk-cluster-permissions-caller)。
+ 创建 Amazon EKS 担任的集群角色、集群的 Amazon EC2 节点担任的节点角色以及发布环境指标、日志和跟踪的可观察性角色，如中所[创建 IAM 角色](#beanstalk-cluster-getting-started-roles)述。要选择环境使用的 VPC 子网，请参阅[为 Beanstalk 集群环境配置网络](configuring-cluster-networking.md)。
+ 选择 Beanstalk 集群可用的 AWS 区域。这些命令使用您的 AWS CLI 配置中的区域。

## 创建 IAM 角色
<a name="beanstalk-cluster-getting-started-roles"></a>

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

**创建集群、节点和可观测性角色**

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
   ```

1. 创建群集角色并附加其策略。

   ```
   $ 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
   ```

1. 创建节点角色并附加其策略。

   ```
   $ 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
   ```

1. 创建可观察性角色并附加其策略。

   ```
   $ 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
   ```

1. 记录三个角色 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
   ```

## 选择支持的配置工具
<a name="beanstalk-cluster-getting-started-tools"></a>

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

您也可以使用官方 Act GitHub ion 进行部署，也可以通过提供商使用 Terraform 将环境定义为基础架构即 AWS 代码。有关 GitHub 操作，请参阅[使用 GitHub 操作部署到 Elastic Beanstalk](deploying-github-actions.md)。

## 创建应用程序并部署示例
<a name="beanstalk-cluster-getting-started-deploy"></a>

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

   ```
   $ aws elasticbeanstalk create-application \
       --application-name getting-started-cluster-app
   ```

1. 创建环境。该`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-type`Elastic Beanstalk 将这些设置解析为其默认值，以及。`8080` `ALB`要选择不同的值，请将它们传递给`--option-settings`。有关完整的选项参考，请参阅[Beanstalk 集群环境的配置选项](command-options-general-eks.md)。

1. 等待环境准备就绪。第一个环境可能需要 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
   ```

1. 检查环境状态、运行状况颜色、运行状况和 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 集群环境配置网络](configuring-cluster-networking.md)空闲环境最初可以报告`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 集群环境](monitoring-cluster-environments.md)。

## 部署自己的容器镜像
<a name="beanstalk-cluster-getting-started-deploy-own"></a>

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

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

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`。由于镜像已经构建，因此该版本无需构建步骤即可部署。

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

   ```
   $ aws elasticbeanstalk update-environment \
       --environment-name getting-started-cluster-env \
       --version-label v1
   ```

1. 确认部署已完成且环境正在为您的应用程序提供服务。

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

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

## 清理教程资源
<a name="beanstalk-cluster-getting-started-cleanup"></a>

1. 终止环境。

   ```
   $ aws elasticbeanstalk terminate-environment \
       --environment-name getting-started-cluster-env
   ```

1. 等待环境达到`Terminated`状态。 AWS CLI 提供了一个内置的服务员，该服务员可以轮询直至终止为止。该服务员有相同的 20 次尝试次数限制，因此请再次运行直到它报告成功为止。

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

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

1. 删除应用程序及其应用程序版本，包括 Elastic Beanstalk 创建的示例版本和您添加的任何版本。这不会删除您提供的容器镜像或保存该镜像的存储库；请参阅[为 Beanstalk 集群环境构建容器镜像](beanstalk-cluster-app-versions.md)。

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

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

## 后续步骤
<a name="beanstalk-cluster-getting-started-next"></a>
+ 通过创建应用程序版本来部署自己的容器镜像或源代码。请参阅[为 Beanstalk 集群环境构建容器镜像](beanstalk-cluster-app-versions.md)。
+ 配置资源限制、扩展、部署行为、负载平衡和可观察性。请参阅[Beanstalk 集群环境的配置选项](command-options-general-eks.md)。
+ 学习如何更新和监控环境。请参阅[管理 Elastic Beanstalk 环境](using-features.managing.md)和[监控 Beanstalk 集群环境](monitoring-cluster-environments.md)。