

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

# 使用 Step Functions 建立和管理 Amazon EKS 叢集
<a name="connect-eks"></a>

了解如何將 Step Functions 與 Amazon EKS 整合，以管理 Kubernetes 叢集。Step Functions 提供兩種類型的服務整合 APIs可與 Amazon Elastic Kubernetes Service 整合。其中之一可讓您使用 Amazon EKS APIs 來建立和管理 Amazon EKS 叢集。另一個可讓您使用 Kubernetes API 與叢集互動，並在應用程式的工作流程中執行任務。

 您可以使用 Kubernetes API 整合搭配使用 Step Functions 建立的 Amazon EKS 叢集，以及 **eksctl** 工具或 Amazon EKS [主控台建立的 Amazon EKS](https://console.aws.amazon.com/eks/home) 叢集，或類似方法。如需詳細資訊，請參閱《[Amazon EKS 使用者指南》中的建立 Amazon EKS 叢集](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。

若要了解如何在 Step Functions 中整合 AWS 服務，請參閱 [整合 服務](integrate-services.md)和 [在 Step Functions 中將參數傳遞至服務 API](connect-parameters.md)。

**Optimized Amazon EKS 整合的主要功能**  
支援[執行任務 (.sync)](connect-to-resource.md#connect-sync)整合模式。
[請求回應](connect-to-resource.md#connect-default) 整合模式沒有特定的最佳化。
不支援[使用任務字符等待回呼](connect-to-resource.md#connect-wait-token)整合模式。

**注意**  
Step Functions EKS 整合僅支援具有公有端點存取的 Kubernetes APIs。根據預設，EKS 叢集 API 伺服器端點具有公有存取權。如需詳細資訊，請參閱《[Amazon EKS 使用者指南》中的 Amazon EKS 叢集端點存取控制](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html)。 ****

如果執行停止，Step Functions 不會自動終止 Amazon EKS 叢集。如果您的狀態機器在 Amazon EKS 叢集終止之前停止，您的叢集可能會無限期地繼續執行，並可能產生額外費用。若要避免這種情況，請確定您建立的任何 Amazon EKS 叢集都已正確終止。如需詳細資訊，請參閱：
+ 《Amazon EKS 使用者指南》中的[刪除叢集](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)。
+ [執行任務 (.sync)](connect-to-resource.md#connect-sync) 服務整合模式。

**輸入或結果資料的配額**  
在服務之間傳送或接收資料時，任務的最大輸入或結果為 256 KiB 的資料，做為 UTF-8 編碼字串。請參閱 [狀態機器執行的相關配額](service-quotas.md#service-limits-state-machine-executions)。

## Kubernetes API 整合
<a name="connect-eks-kubernetes-apis"></a>

Step Functions 支援下列 Kubernetes APIs：

### RunJob
<a name="connect-eks-kubernetes-apis-runjob"></a>

`eks:runJob` 服務整合可讓您在 Amazon EKS 叢集上執行任務。`eks:runJob.sync` 變體可讓您等待任務完成，並選擇性地擷取日誌。

您的 Kubernetes API 伺服器必須將許可授予狀態機器所使用的 IAM 角色。如需詳細資訊，請參閱[許可](#connect-eks-permissions)。

對於**執行任務** (`.sync`) 模式，任務的狀態取決於輪詢。Step Functions 一開始會以每分鐘大約 1 個輪詢的速率輪詢。此速率最終會減慢到每 5 分鐘大約 1 次輪詢。如果您需要更頻繁的輪詢，或需要更多地控制輪詢策略，您可以使用 `eks:call`整合來查詢任務的狀態。

`eks:runJob` 整合專屬於 `batch/v1` Kubernetes 任務。如需詳細資訊，請參閱 Kubernetes 文件中的[任務](https://kubernetes.io/docs/concepts/workloads/controllers/job/)。如果您想要管理其他 Kubernetes 資源，包括自訂資源，請使用 `eks:call`服務整合。您可以使用 Step Functions 來建置輪詢迴圈，如[使用 Lambda 和 輪詢任務狀態 AWS Batch](sample-project-job-poller.md)範例專案所示。

支援的參數包括：
+ `ClusterName`：您要呼叫的 Amazon EKS 叢集名稱。
  + `Type`: `String`
  + 必要：是
+ `CertificateAuthority`：與叢集通訊所需的 Base64-encoded憑證資料。您可以從 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home)或使用 Amazon EKS [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html) API 取得此值。
  + `Type`: `String`
  + 必要：是
+ `Endpoint`：Kubernetes API 伺服器的端點 URL。您可以從 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home)或使用 Amazon EKS [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html) API 取得此值。
  + `Type`: `String`
  + 必要：是
+ `Namespace`：要在其中執行任務的命名空間。如果未提供，`default`則會使用 命名空間。
  + `Type`: `String`
  + 必要：否
+ `Job`：Kubernetes 任務的定義。請參閱 Kubernetes 文件中的[任務](https://kubernetes.io/docs/concepts/workloads/controllers/job/)。
  + `Type`：`JSON` 或 `String`
  + 必要：是
+ `LogOptions`：一組選項，用於控制日誌的選用擷取。只有在使用執行任務 (.sync) 服務整合模式等待任務完成時才適用。
  + `Type`: `JSON`
  + 必要：否
  + 日誌包含在金鑰 下的回應中`logs`。任務中可能有多個 Pod，每個都有多個容器。

    ```
    { 
      ...
      "logs": { 
        "pods": { 
          "pod1": { 
            "containers": { 
              "container1": { 
                "log": {{<log> }}
              },
              ...
            }
          },
          ...
        }
      }
    ```
  + 日誌擷取會盡最大努力執行。如果擷取日誌時發生錯誤，則會有欄位 `error`和 取代 `log` 欄位`cause`。
+ `LogOptions.RetrieveLogs`：在任務完成後啟用日誌擷取。根據預設，不會擷取日誌。
  + `Type`: `Boolean`
  + 必要：否
+ `LogOptions.RawLogs`：如果 `RawLogs` 設為 true，日誌將傳回為原始字串，而不會嘗試將它們剖析為 JSON。根據預設，日誌會盡可能還原序列化為 JSON。在某些情況下，這類剖析可能會導致不必要的變更，例如限制包含許多數字的數字精確度。
  + `Type`: `Boolean`
  + 必要：否
+ `LogOptions.LogParameters`：Kubernetes API 的讀取日誌 API 支援查詢參數來控制日誌擷取。例如，您可以使用 `tailLines`或 `limitBytes` 來限制擷取日誌的大小，並保留在 Step Functions 資料大小配額內。如需詳細資訊，請參閱 Kubernetes API 參考的[讀取日誌](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#read-log-pod-v1-core)一節。
  + `Type: `的映射`String`至 `List of Strings`
  + 必要：否
  + 範例：

    ```
    "LogParameters": {
      "tailLines": [ "6" ]
    }
    ```

下列範例包含執行任務、等待任務完成，然後擷取任務日誌`Task`的狀態：

```
{
  "StartAt": "Run a job on EKS",
  "States": {
    "Run a job on EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:runJob.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://AKIAIOSFODNN7EXAMPLE.yl4.us-east-1.eks.amazonaws.com",
        "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-2000",
                    "image": "perl",
                    "command": [ "perl" ],
                    "args": [
                      "-Mbignum=bpi",
                      "-wle",
                      "print bpi(2000)"
                    ]
                  }
                ],
                "restartPolicy": "Never"
              }
            }
          }
        }
      },
      "End": true
    }
  }
}
```

### `Call`
<a name="connect-eks-kubernetes-apis-call"></a>

`eks:call` 服務整合可讓您使用 Kubernetes API 透過 Kubernetes API 端點讀取和寫入 Kubernetes 資源物件。

您的 Kubernetes API 伺服器必須將許可授予狀態機器所使用的 IAM 角色。如需詳細資訊，請參閱[許可](#connect-eks-permissions)。

如需可用操作的詳細資訊，請參閱 [Kubernetes API 參考](https://kubernetes.io/docs/reference/kubernetes-api/)。

支援的參數`Call`包括：
+ `ClusterName`：您要呼叫的 Amazon EKS 叢集名稱。
  + `Type`：String
  + 必要：是
+ `CertificateAuthority`：與叢集通訊所需的 Base64-encoded憑證資料。您可以從 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home)或使用 Amazon EKS [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html) API 取得此值。
  + `Type`: `String`
  + 必要：是
+ `Endpoint`：Kubernetes API 伺服器的端點 URL。您可以在 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home)或使用 Amazon EKS 的 DescribeCluster API 找到此值。
  + `Type`: `String`
  + 必要：是
+ `Method`：請求的 HTTP 方法。下列其中一項：`GET`、`POST`、`PUT`、`DELETE`、`HEAD` 或 `PATCH`。
  + `Type`: `String`
  + 必要：是
+ `Path`：Kubernetes REST API 操作的 HTTP 路徑。
  + `Type`: `String`
  + 必要：是
+ `QueryParameters`：Kubernetes REST API 操作的 HTTP 查詢參數。
  + `Type: `的映射`String`至 `List of Strings`
  + 必要：否
  + 範例：

    ```
    "QueryParameters": {
      "labelSelector": [ "job-name=example-job" ]
    }
    ```
+ `RequestBody`：Kubernetes REST API 操作的 HTTP 訊息內文。
  + `Type`：`JSON` 或 `String`
  + 必要：否

以下包含使用 `eks:call`列出屬於任務 之 Pod `Task`的狀態`example-job`。

```
{
  "StartAt": "Call EKS",
  "States": {
    "Call EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
        "Method": "GET",
        "Path": "/api/v1/namespaces/default/pods",
        "QueryParameters": {
          "labelSelector": [
            "job-name=example-job"
          ]
        }
      },
      "End": true
    }
  }
}
```

以下包含使用 `eks:call`刪除任務 `Task`的狀態`example-job`，並設定 `propagationPolicy` 以確保任務的 Pod 也會遭到刪除。

```
{
  "StartAt": "Call EKS",
  "States": {
    "Call EKS": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "ANPAJ2UCCR6DPCEXAMPLE",
        "Endpoint": "https://444455556666.yl4.us-east-1.eks.amazonaws.com",
        "Method": "DELETE",
        "Path": "/apis/batch/v1/namespaces/default/jobs/example-job",
        "QueryParameters": {
          "propagationPolicy": [
            "Foreground"
          ]
        }
      },
      "End": true
    }
  }
}
```

## 最佳化 Amazon EKS APIs
<a name="connect-eks-apis"></a>

支援的 Amazon EKS APIs 和語法包括：
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html)
  +  [請求語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_RequestSyntax) 
  +  [回應語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_ResponseSyntax) 

    使用 `eks:createCluster`服務整合建立 Amazon EKS 叢集時，IAM 角色會以管理員身分新增至 Kubernetes RBAC 授權表 （具有 system：masters 許可）。一開始，只有該 IAM 實體可以呼叫 Kubernetes API 伺服器。如需詳細資訊，請參閱：
    + 《*Amazon* [EKS 使用者指南》中的管理叢集的使用者或 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) 
    + [許可](#connect-eks-permissions) 區段 

    Amazon EKS 使用服務連結角色，其中包含 Amazon EKS 代表您呼叫其他 服務所需的許可。如果您的帳戶中尚不存在這些服務連結角色，您必須將 `iam:CreateServiceLinkedRole` 許可新增至 Step Functions 使用的 IAM 角色。如需詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的[使用服務連結角色](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html)。

    Step Functions 使用的 IAM 角色必須具有將叢集 IAM 角色傳遞至 Amazon EKS 的`iam:PassRole`許可。如需詳細資訊，請參閱《[Amazon EKS 使用者指南》中的 Amazon EKS 叢集 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html)。 **
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html)
  +  [請求語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_RequestSyntax) 
  +  [回應語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_ResponseSyntax) 

    您必須先刪除任何 Fargate 設定檔或節點群組，才能刪除叢集。
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html)
  +  [請求語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_RequestSyntax) 
  +  [回應語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_ResponseSyntax) 

    Amazon EKS 使用服務連結角色，其中包含 Amazon EKS 代表您呼叫其他 服務所需的許可。如果您的帳戶中尚不存在這些服務連結角色，您必須將 `iam:CreateServiceLinkedRole` 許可新增至 Step Functions 使用的 IAM 角色。如需詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的[使用服務連結角色](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html)。

    Fargate 上的 Amazon EKS 可能不適用於所有區域。如需區域可用性的資訊，請參閱《*Amazon EKS 使用者指南*》中的 [Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) 一節。

    Step Functions 使用的 IAM 角色必須具有將 Pod 執行 IAM 角色傳遞至 Amazon EKS 的`iam:PassRole`許可。如需詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的 [Pod 執行角色](https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html)。
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html)
  +  [請求語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html#API_DeleteFargateProfile_RequestSyntax) 
  +  [回應語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html#API_DeleteFargateProfile_ResponseSyntax) 
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html)
  +  [請求語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_RequestSyntax) 
  +  [回應語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_ResponseSyntax) 

    Amazon EKS 使用服務連結角色，其中包含 Amazon EKS 代表您呼叫其他 服務所需的許可。如果這些服務連結角色尚未存在於您的帳戶中，您必須將 `iam:CreateServiceLinkedRole` 許可新增至 Step Functions 所使用的 IAM 角色。如需詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的[使用服務連結角色](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html)。

    Step Functions 使用的 IAM 角色必須具有將節點 IAM 角色傳遞至 Amazon EKS 的`iam:PassRole`許可。如需詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的[使用服務連結角色](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html)。
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html)
  +  [請求語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_RequestSyntax) 
  +  [回應語法](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_ResponseSyntax) 

以下包含可建立 Amazon EKS 叢集`Task`的 。

```
{
  "StartAt": "CreateCluster.sync",
  "States": {
    "CreateCluster.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createCluster.sync",
      "Arguments": {
        "Name": "MyCluster",
        "ResourcesVpcConfig": {
          "SubnetIds": [
            "subnet-053e7c47012341234",
            "subnet-027cfea4b12341234"
          ]
        },
        "RoleArn": "arn:aws:iam::{{account-id}}:role/MyEKSClusterRole"
      },
      "End": true
    }
  }
}
```

下列包含刪除 Amazon EKS 叢集`Task`的狀態。

```
{
  "StartAt": "DeleteCluster.sync",
  "States": {
    "DeleteCluster.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteCluster.sync",
      "Arguments": {
        "Name": "MyCluster"
      },
      "End": true
    }
  }
}
```

以下包含建立 Fargate 設定檔`Task`的狀態。

```
{
  "StartAt": "CreateFargateProfile.sync",
  "States": {
    "CreateFargateProfile.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createFargateProfile.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "FargateProfileName": "MyFargateProfile",
        "PodExecutionRoleArn": "arn:aws:iam::{{account-id}}:role/MyFargatePodExecutionRole",
        "Selectors": [{
            "Namespace": "my-namespace",
            "Labels": { "my-label": "my-value" }
          }]
      },
      "End": true
    }
  }
}
```

下列包含刪除 Fargate 設定檔`Task`的狀態。

```
{
  "StartAt": "DeleteFargateProfile.sync",
  "States": {
    "DeleteFargateProfile.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteFargateProfile.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "FargateProfileName": "MyFargateProfile"
      },
      "End": true
    }
  }
}
```

以下包含建立節點群組`Task`的狀態。

```
{
  "StartAt": "CreateNodegroup.sync",
  "States": {
    "CreateNodegroup.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:createNodegroup.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "NodegroupName": "MyNodegroup",
        "NodeRole": "arn:aws:iam::{{account-id}}:role/MyNodeInstanceRole",
        "Subnets": ["subnet-09fb51df01234", "subnet-027cfea4b1234"] 
      },
      "End": true
    }
  }
}
```

下列包含刪除節點群組`Task`的狀態。

```
{
  "StartAt": "DeleteNodegroup.sync",
  "States": {
    "DeleteNodegroup.sync": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
      "Arguments": {
        "ClusterName": "MyCluster",
        "NodegroupName": "MyNodegroup"
      },
      "End": true
    }
  }
}
```

## 許可
<a name="connect-eks-permissions"></a>

使用 `eks:createCluster`服務整合建立 Amazon EKS 叢集時，IAM 角色會以管理員身分新增至 Kubernetes RBAC 授權表，並具有 `system:masters` 許可。一開始，只有該 IAM 實體可以呼叫 Kubernetes API 伺服器。例如，除非您擔任與 Step Functions 狀態機器相同的角色，或設定 Kubernetes 將許可授予其他 IAM 實體，否則您將無法使用 **kubectl** 與您的 Kubernetes API 伺服器互動。如需詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的[管理叢集的使用者或 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)。

您可以將使用者或角色等其他 IAM 實體的許可新增至 kube-system 命名空間`aws-auth``ConfigMap`中的 。如果您要從 Step Functions 建立叢集，請使用 `eks:call`服務整合。

以下包含建立 `aws-auth``ConfigMap`並授予`system:masters`許可給使用者 `arn:aws:iam::{{account-id}}:user/my-user` 和 IAM 角色 `Task`的狀態`arn:aws:iam::{{account-id}}:role/my-role`。

```
{
  "StartAt": "Add authorized user",
  "States": {
    "Add authorized user": {
      "Type": "Task",
      "Resource": "arn:aws:states:::eks:call",
      "Arguments": {
        "ClusterName": "MyCluster",
        "CertificateAuthority": "LS0tLS1CRUd...UtLS0tLQo=",
        "Endpoint": "https://444455556666.yl4.{{region}}.eks.amazonaws.com",
        "Method": "POST",
        "Path": "/api/v1/namespaces/kube-system/configmaps",
        "RequestBody": {
           "apiVersion": "v1",
           "kind": "ConfigMap",
           "metadata": {
              "name": "aws-auth",
              "namespace": "kube-system"
           },
           "data": {
             "mapUsers": "[{ \"userarn\": \"arn:aws:iam::{{account-id}}:user/my-user\", \"username\": \"my-user\", \"groups\": [ \"system:masters\" ] } ]",
             "mapRoles": "[{ \"rolearn\": \"arn:aws:iam::{{account-id}}:role/my-role\", \"username\": \"my-role\", \"groups\": [ \"system:masters\" ] } ]"
           }
        }
      },
      "End": true
    }
  }
```

**注意**  
您可能會看到 IAM 角色的 ARN，以包含路徑 **/service-role/** 的格式顯示，例如 `arn:aws:iam::{{account-id}}:role/{{service-role}}/my-role`。在 **中列出角色時，不應包含此服務角色**路徑字符`aws-auth`。

當您的叢集首次建立時， `aws-auth` `ConfigMap` 將不存在，但會在您建立 Fargate 設定檔時自動新增。您可以擷取 的目前值`aws-auth`、新增其他許可`PUT`和新版本。通常在 Fargate 描述檔`aws-auth`之前更容易建立 。

如果您的叢集是在 Step Functions 之外建立的，您可以設定 **kubectl** 以與您的 Kubernetes API 伺服器通訊。然後，`aws-auth``ConfigMap`使用 建立新的 ，`kubectl apply -f aws-auth.yaml`或使用 編輯已存在的 `kubectl edit -n kube-system configmap/aws-auth`。如需詳細資訊，請參閱：
+  《[Amazon EKS 使用者指南》中的為 Amazon EKS 建立 kubeconfig](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html)。 **
+  《*Amazon* [EKS 使用者指南》中的管理叢集的使用者或 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)。

如果您的 IAM 角色在 Kubernetes 中沒有足夠的許可， `eks:call``eks:runJob`或服務整合將會失敗，並顯示下列錯誤：

```
Error:
EKS.401

Cause:
{
  "ResponseBody": {
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "Unauthorized",
    "reason": "Unauthorized",
    "code": 401
  },
  "StatusCode": 401,
  "StatusText": "Unauthorized"
}
```

## 用於呼叫 Amazon EKS 的 IAM 政策
<a name="eks-iam"></a>

下列範例範本顯示 如何根據狀態機器定義中的資源 AWS Step Functions 產生 IAM 政策。如需詳細資訊，請參閱[Step Functions 如何為整合服務產生 IAM 政策](service-integration-iam-templates.md)及[探索 Step Functions 中的服務整合模式](connect-to-resource.md)。

### `CreateCluster`
<a name="eks-iam-createcluster"></a>

*資源*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:CreateCluster"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeCluster",
                "eks:DeleteCluster"
            ],
            "Resource": "arn:aws:eks:us-east-1:444455556666:cluster/*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterManag-EKSServiceRole-ANPAJ2UCCR6DPCEXAMPLE"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "eks.amazonaws.com"
                }
            }
        }
    ]
}
```

```


```

### `CreateNodeGroup`
<a name="eks-iam-createnodegroup"></a>

*資源*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeSubnets",
                "eks:CreateNodegroup"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "eks:DescribeNodegroup",
                "eks:DeleteNodegroup"
            ],
            "Resource": "arn:aws:eks:us-east-1:444455556666:nodegroup/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:ListAttachedRolePolicies"
            ],
            "Resource": "arn:aws:iam::444455556666:role/*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::444455556666:role/StepFunctionsSample-EKSClusterMan-NodeInstanceRole-ANPAJ2UCCR6DPCEXAMPLE"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "eks.amazonaws.com"
                }
            }
        }
    ]
}
```

### `DeleteCluster`
<a name="eks-iam-deletecluster"></a>

*資源*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DeleteCluster",
                "eks:DescribeCluster"
            ],
            "Resource": [
                "arn:aws:eks:us-east-1:444455556666:cluster/ExampleCluster"
            ]
        }
    ]
}
```

### `DeleteNodegroup`
<a name="eks-iam-deletenodegroup"></a>

*資源*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DeleteNodegroup",
                "eks:DescribeNodegroup"
            ],
            "Resource": [
                "arn:aws:eks:us-east-1:444455556666:nodegroup/ExampleCluster/ExampleNodegroup/*"
            ]
        }
    ]
}
```

如需搭配 Step Functions 使用 Amazon EKS 的詳細資訊，請參閱 [使用 Step Functions 建立和管理 Amazon EKS 叢集](#connect-eks)。