本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Beanstalk 叢集入門
在本教學課程中,您會建立 Elastic Beanstalk 應用程式和 Beanstalk 叢集環境。您省略應用程式版本,讓 Elastic Beanstalk 部署其預先建置的範例容器映像。然後,請等待環境就緒、擷取其 URL,然後終止它。或者,您可以在提供完全引導式體驗的 AWS 管理主控台中開始使用,或將 AI 代理器指向Beanstalk 叢集文件。
預估持續時間:15–20 分鐘
重要
Elastic Beanstalk 不收取額外費用,但您需要支付環境使用 AWS 的資源,包括 Amazon EKS 及其運算。如需詳細資訊,請參閱 Elastic Beanstalk 定價
開始之前
完成下列先決條件:
-
安裝及設定 AWS CLI。如需說明,請參閱AWS Command Line Interface 《 使用者指南》中的 入門 AWS CLI。
-
使用 IAM 主體來建立和管理 Elastic Beanstalk 應用程式和環境,並在建立環境時傳遞叢集、節點和可觀測性角色。如需確切的許可,請參閱 建立環境的許可。
-
建立 Amazon EKS 擔任的叢集角色、叢集 Amazon EC2 節點擔任的節點角色,以及發佈環境指標、日誌和追蹤的可觀測性角色,如中所述建立 IAM 角色。若要選擇環境使用的 VPC 子網路,請參閱 設定 Beanstalk 叢集環境的聯網。
-
選擇可使用 Beanstalk 叢集 AWS 的區域。命令會使用 AWS CLI 組態中的 區域。
建立 IAM 角色
Beanstalk 叢集環境需要您提供的三個 IAM 角色:叢集角色、節點角色和可觀測性角色。Elastic Beanstalk 主控台會為您建立它們,但本教學課程使用 AWS CLI,因此請先建立它們。使用這些名稱,因為主控台會依名稱選取現有的角色。如需了解每個角色的用途,以及您需要傳遞這些角色的呼叫者許可,請參閱 Beanstalk 叢集的許可。
建立叢集、節點和可觀測性角色
-
為每個擔任角色的服務建立信任政策檔案。叢集角色信任 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 -
建立叢集角色並連接其政策。
$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 -
記錄三個角色 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
選擇支援的佈建工具
您可以使用 Elastic Beanstalk 主控台、Elastic Beanstalk API 或 建立和管理 Beanstalk 叢集環境 AWS CLI。本教學課程使用 , AWS CLI 讓每個請求都可見且可重複。
您也可以使用官方 GitHub 動作部署 ,而且您可以透過 AWS 供應商將環境定義為具有 Terraform 的基礎設施程式碼。如需 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-type。Elastic Beanstalk 會將這些設定解析為其預設值8080和ALB。若要選擇不同的值,請使用 傳遞這些值--option-settings。如需完整的選項參考,請參閱 Beanstalk 叢集環境的組態選項。 -
等待環境準備就緒。第一個環境可能需要 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 -
檢查環境狀態、運作狀態顏色、運作狀態和 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 叢集環境的聯網。閒置環境一開始可以報告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 Elastic Container Registry (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 瀏覽器中開啟 ,
https://後面接著環境的 CNAME,並確認應用程式回應。如果沒有,請檢查部署失敗的事件,並確認映像監聽環境的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
Elastic Beanstalk 只會在您終止使用它的最後一個環境之後刪除共用的 Amazon EKS 叢集。叢集刪除最多可能需要三個小時;Amazon EKS 和其他資源費用會持續到刪除完成為止。終止不會刪除客戶提供的叢集、節點和可觀測性 IAM 角色。驗證叢集刪除,如 中所述刪除叢集。
後續步驟
-
透過建立應用程式版本來部署您自己的容器映像或來源。請參閱 為 Beanstalk 叢集環境建置容器映像。
-
設定資源限制、擴展、部署行為、負載平衡和可觀測性。請參閱 Beanstalk 叢集環境的組態選項。
-
了解如何更新和監控環境。請參閱管理 Elastic Beanstalk 環境和監控 Beanstalk 叢集環境。