

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 的資源，包括 Amazon EKS 及其運算。如需詳細資訊，請參閱 [Elastic Beanstalk 定價](https://aws.amazon.com/elasticbeanstalk/pricing/)。當您完成本教學課程時，請完成清除步驟。

## 開始之前
<a name="beanstalk-cluster-getting-started-prerequisites"></a>

完成下列先決條件：
+ 安裝及設定 AWS CLI。如需說明，請參閱*AWS Command Line Interface 《 使用者指南*》中的 [入門 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。
+ 使用 IAM 主體來建立和管理 Elastic Beanstalk 應用程式和環境，並在建立環境時傳遞叢集、節點和可觀測性角色。如需確切的許可，請參閱 [建立環境的許可](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. 為每個擔任角色的服務建立信任政策檔案。叢集角色信任 Amazon EKS、節點角色信任 Amazon EC2，而可觀測性角色信任 Amazon EKS Pod Identity。

   ```
   $ 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. 記錄三個角色 ARNs。您在建立環境時傳遞它們。

   ```
   $ 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 或 建立和管理 Beanstalk 叢集環境 AWS CLI。本教學課程使用 ， AWS CLI 讓每個請求都可見且可重複。

您也可以使用官方 GitHub 動作部署 ，而且您可以透過 AWS 供應商將環境定義為具有 Terraform 的基礎設施程式碼。如需 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 會建立 Amazon 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 瀏覽器中開啟`https://`後接 CNAME，並確認範例應用程式回應。負載平衡器僅在 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 Elastic Container Registry (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 瀏覽器中開啟 ，`https://`後面接著環境的 CNAME，並確認應用程式回應。如果沒有，請檢查部署失敗的事件，並確認映像監聽環境的 `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
   ```

Elastic Beanstalk 只會在您終止使用它的最後一個環境之後刪除共用的 Amazon EKS 叢集。叢集刪除最多可能需要三個小時；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)。