本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用節點群組建立和管理 Amazon EKS 叢集
此範例專案示範如何使用 Step Functions 和 Amazon Elastic Kubernetes Service 建立具有節點群組的 Amazon EKS 叢集、在 Amazon 上執行任務EKS,然後檢查輸出。完成後,它會移除節點群組和 Amazon EKS 叢集。
如需有關步驟函數和步驟函數服務整合的詳細資訊,請參閱下列內容:
注意
此範例專案可能需要付費。
對於新用 AWS 戶,可以使用免費用量方案。在此方案中,特定用量層級以下的服務皆為免費。如需有關 AWS 成本和免費方案的詳細資訊,請參閱 Amazon EKS 定價
步驟 1:建立狀態機器並佈建資源
-
開啟 Step Functions 主控台
,然後選擇建立狀態機器。 -
Manage an EKS cluster
在搜尋方塊中輸入,然後從傳回的搜尋結果中選擇 [管理EKS叢集]。 -
選擇 Next (下一步) 繼續。
-
Step Functions 會列出您選取的範例專案中 AWS 服務 使用的項目。它也會顯示範例專案的工作流程圖表。將此項目部署到您的項目中, AWS 帳戶 或將其用作構建自己的項目的起點。根據您想要的進行方式,選擇 [執行示範] 或 [在其上建置]。
此範例專案會部署下列資源:
-
Amazon Elastic Kubernetes Service叢集
-
Amazon SNS 主題
-
AWS Step Functions 狀態機器
-
相關 AWS Identity and Access Management (IAM) 角色
下圖顯示「管理EKS叢集範例專案」的工作流程圖形:
-
-
選擇「使用範本」繼續進行選取。
-
執行以下任意一項:
-
如果您選取「在其上建立」,Step Functions 會建立工作流程原型,但不會在工作流程定義中部署資源,因此您可以繼續建置工作流程原型。
在工作流 Studio 中設計模式,您可以將其他狀態納入您的工作流程原型。或者,您可以切換程式碼模式至使用整合的程式碼編輯器,從 Step Functions 主控台編輯狀態機器的 Amazon States Language (ASL) 定義。
重要
您可能需要更新範例專案中使用之資源的預留位置 Amazon 資源名稱 (ARN),才能執行工作流程。
-
如果您選取 [執行示範],Step Functions 會建立唯讀專案,該專案會使用 AWS CloudFormation 範本將該範本中的 AWS 資源部署到您的 AWS 帳戶. 您可以選擇「程式碼」模式來檢視狀態機定義。
選擇部署並執行以部署專案並建立資源。
請注意,建立資源和IAM權限最多可能需要 10 分鐘的時間。部署資源時,您可以開啟 AWS CloudFormation Stack ID 連結以查看正在佈建的資源。
建立完所有資源之後,您應該會在主控台的 [狀態機器] 頁面上看到專案。
重要
CloudFormation 範本中使用的每項服務可能會收取標準費用。
-
步驟 2:運行狀態機
-
在 [狀態電腦] 頁面上,選擇您的範例專案。
-
在範例專案頁面上,選擇 [開始執行]。
-
在 [開始執行] 對話方塊中,執行下列動作:
-
(選擇性) 若要識別您的執行項目,您可以指定名稱,或使用預設產生的執行名稱。
注意
Step Functions 接受包含非ASCII字元的狀態機器、執行項目、活動和標籤的名稱。由於ASCII包含非ASCII字元的名稱不適用於 Amazon CloudWatch,因此我們建議您僅使用字元,以便您可以追蹤中的指標。 CloudWatch
-
(選擇性) 在「輸入」方塊中,以JSON格式輸入輸入值以執行工作流程。
如果您選擇執行示範,則不需要提供任何執行輸入。
注意
如果您部署的示範專案包含預先填入的執行輸入資料,請使用該輸入來執行狀態機器。
-
選擇 Start execution (開始執行)。
-
Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為「執行詳細資訊」頁面。在此頁面上,您可以在執行進行時或完成之後複查執行結果。
若要複查執行結果,請在「圖形」檢視中選擇個別狀態,然後選擇步驟詳情窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需有關可在「執行詳細資訊」頁面檢視之執行資訊的詳細資訊,請參閱執行詳細資訊頁面 — 介面概觀。
-
範例狀態機器程式碼
此範例專案中的狀態機會EKS透過建立 Amazon EKS 叢集和節點群組與 Amazon 整合,並使用SNS主題傳回結果。
瀏覽此範例狀態機器,了解 Step Functions 如何管理 Amazon EKS 叢集和節點群組。
如需如何 AWS Step Functions 控制其他 AWS 服務的詳細資訊,請參閱將其他服務與 Step Functions 整合。
{
"Comment": "An example of the Amazon States Language for running Amazon EKS Cluster",
"StartAt": "Create an EKS cluster",
"States": {
"Create an EKS cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createCluster.sync",
"Parameters": {
"Name": "ExampleCluster",
"ResourcesVpcConfig": {
"SubnetIds": [
"subnet-0aacf887d9f00e6a7",
"subnet-0e5fc41e7507194ab"
]
},
"RoleArn": "arn:aws:iam::111122223333:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE"
},
"Retry": [{
"ErrorEquals": [ "States.ALL" ],
"IntervalSeconds": 30,
"MaxAttempts": 2,
"BackoffRate": 2
}],
"ResultPath": "$.eks",
"Next": "Create a node group"
},
"Create a node group": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:createNodegroup.sync",
"Parameters": {
"ClusterName": "ExampleCluster",
"NodegroupName": "ExampleNodegroup",
"NodeRole": "arn:aws:iam::111122223333:role/StepFunctionsSample-EKSClusterMan-NodeInstanceRole-ANPAJ2UCCR6DPCEXAMPLE",
"Subnets": [
"subnet-0aacf887d9f00e6a7",
"subnet-0e5fc41e7507194ab"]
},
"Retry": [{
"ErrorEquals": [ "States.ALL" ],
"IntervalSeconds": 30,
"MaxAttempts": 2,
"BackoffRate": 2
}],
"ResultPath": "$.nodegroup",
"Next": "Run a job on EKS"
},
"Run a job on EKS": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:runJob.sync",
"Parameters": {
"ClusterName": "ExampleCluster",
"CertificateAuthority.$": "$.eks.Cluster.CertificateAuthority.Data",
"Endpoint.$": "$.eks.Cluster.Endpoint",
"LogOptions": {
"RetrieveLogs": true
},
"Job": {
"apiVersion": "batch/v1",
"kind": "Job",
"metadata": {
"name": "example-job"
},
"spec": {
"backoffLimit": 0,
"template": {
"metadata": {
"name": "example-job"
},
"spec": {
"containers": [
{
"name": "pi-20",
"image": "perl",
"command": [
"perl"
],
"args": [
"-Mbignum=bpi",
"-wle",
"print '{ ' . '\"pi\": '. bpi(20) . ' }';"
]
}
],
"restartPolicy": "Never"
}
}
}
}
},
"ResultSelector": {
"status.$": "$.status",
"logs.$": "$.logs..pi"
},
"ResultPath": "$.RunJobResult",
"Next": "Examine output"
},
"Examine output": {
"Type": "Choice",
"Choices": [
{
"And": [
{
"Variable": "$.RunJobResult.logs[0]",
"NumericGreaterThan": 3.141
},
{
"Variable": "$.RunJobResult.logs[0]",
"NumericLessThan": 3.142
}
],
"Next": "Send expected result"
}
],
"Default": "Send unexpected result"
},
"Send expected result": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"TopicArn": "arn:aws:sns:sa-east-1:111122223333:StepFunctionsSample-EKSClusterManagement123456789012-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE",
"Message": {
"Input.$": "States.Format('Saw expected value for pi: {}', $.RunJobResult.logs[0])"
}
},
"ResultPath": "$.SNSResult",
"Next": "Delete job"
},
"Send unexpected result": {
"Type": "Task",
"Resource": "arn:aws:states:::sns:publish",
"Parameters": {
"TopicArn": "arn:aws:sns:sa-east-1:111122223333:StepFunctionsSample-EKSClusterManagement123456789012-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE",
"Message": {
"Input.$": "States.Format('Saw unexpected value for pi: {}', $.RunJobResult.logs[0])"
}
},
"ResultPath": "$.SNSResult",
"Next": "Delete job"
},
"Delete job": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:call",
"Parameters": {
"ClusterName": "ExampleCluster",
"CertificateAuthority.$": "$.eks.Cluster.CertificateAuthority.Data",
"Endpoint.$": "$.eks.Cluster.Endpoint",
"Method": "DELETE",
"Path": "/apis/batch/v1/namespaces/default/jobs/example-job"
},
"ResultSelector": {
"status.$": "$.ResponseBody.status"
},
"ResultPath": "$.DeleteJobResult",
"Next": "Delete node group"
},
"Delete node group": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
"Parameters": {
"ClusterName": "ExampleCluster",
"NodegroupName": "ExampleNodegroup"
},
"Next": "Delete cluster"
},
"Delete cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteCluster.sync",
"Parameters": {
"Name": "ExampleCluster"
},
"End": true
}
}
}
如需將 Step Functions 與其他 AWS 服務搭配使用IAM時如何設定的相關資訊,請參閱Step Functions 式如何為整合式服務產生IAM原則。
IAM例子
範例專案所產生的這些範例 AWS Identity and Access Management (IAM) 原則包含執行狀態機器及相關資源所需的最低權限。我們建議您僅在IAM原則中加入必要的權限。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:CreateCluster"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"eks:DescribeCluster",
"eks:DeleteCluster"
],
"Resource": "arn:aws:eks:sa-east-1:111122223333:cluster/*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": [
"arn:aws:iam::111122223333:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE"
],
"Condition": {
"StringEquals": {
"iam:PassedToService": "eks.amazonaws.com"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": [
"arn:aws:sns:sa-east-1:111122223333:StepFunctionsSample-EKSClusterManagement123456789012-SNSTopic-ANPAJ2UCCR6DPCEXAMPLE"
]
}
]
}
如需將 Step Functions 與其他 AWS 服務搭配使用IAM時如何設定的相關資訊,請參閱Step Functions 式如何為整合式服務產生IAM原則。