

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Step Functions を使用した Amazon EKS クラスターの作成と管理
<a name="connect-eks"></a>

Step Functions を Amazon EKS と統合して Kubernetes クラスターを管理する方法について説明します。Step Functions は、Amazon Elastic Kubernetes Service と統合するため、2 種類のサービス統合 API を提供します。1 種類では、Amazon EKS API を使用して Amazon EKS クラスターを作成および管理できます。もう一方では、Kubernetes API を使用してクラスターと対話し、アプリケーションのワークフローの一部としてジョブを実行できるようにします。

 **eksctl** ツールまたは [Amazon EKS コンソール](https://console.aws.amazon.com/eks/home)、または同様の方法によって作成した Amazon EKS クラスターで Step Functions を使って作成した Amazon EKS クラスターとの Kubernetes API 統合を使用できます。詳細については、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)。

**最適化された 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 API だけをサポートします。デフォルトでは、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)。

**入力または結果データのクォータ**  
サービス間でデータを送受信する際、タスクの入力または結果の最大サイズは、UTF-8 でエンコードされた文字列で 256 KiB です。「[ステートマシンの実行に関連するクォータ](service-quotas.md#service-limits-state-machine-executions)」を参照してください。

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

Step Functions は、次の Kubernetes API をサポートしています。

### 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 分あたり約 1 ポーリングの割合でポーリングします。このレートは低速になり、最終的には 5 分ごとに約 1 ポーリングとなります。ポーリングの頻度を増やす必要がある場合、またはこれまでよりもポーリング戦略の制御を行う必要がある場合は、`eks:call` 統合を使って、ジョブの状態のクエリを出すことができます。

`eks:runJob` 統合は、`batch/v1` Kubernetes ジョブ固有のものです。詳細については、Kubernetes ドキュメントの[ジョブ](https://kubernetes.io/docs/concepts/workloads/controllers/job/)を参照してください。カスタムリソースを含む他の Kubernetes リソースを管理する場合は、`eks:call` サービス統合を使用します。[Lambda および AWS Batch でのジョブステータスのポーリング](sample-project-job-poller.md) サンプルプロジェクトで示すように、Step Functions を使用してポーリングループを構築できます。

サポートされるパラメータには次のものが含まれます。
+ `ClusterName`: コールしたい Amazon EKS クラスター名。
  + `Type`: `String`
  + 必須: はい
+ `CertificateAuthority`: ご自分のクラスターとの通信に必要な Base64 でエンコードされた証明書データ。この値は、[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 サーバーのエンドポイント。この値は、[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 Job の定義。Kubernetes ドキュメントの[ジョブ](https://kubernetes.io/docs/concepts/workloads/controllers/job/)を参照してください。
  + `Type`: `JSON` または `String`
  + 必須: はい
+ `LogOptions`: ログのオプションの取得を制御するオプションのセット。[Run a Job] (ジョブの実行) (.sync) サービス統合パターンを使用してジョブの完了を待機するために使われるのが唯一適切です。
  + `Type`: `JSON`
  + 必須: いいえ
  + ログはキー `logs` の下のレスポンスに含まれます。ジョブ内には複数のポッドがあり、それぞれに複数のコンテナがあります。

    ```
    { 
      ...
      "logs": { 
        "pods": { 
          "pod1": { 
            "containers": { 
              "container1": { 
                "log": <log> 
              },
              ...
            }
          },
          ...
        }
      }
    ```
  + ログの取得は、ベストエフォートベースで実行されます。ログの取得エラーが発生した場合は、`log` フィールドの代わりに、`error` および `cause` フィールドが存在します。
+ `LogOptions.RetrieveLogs`: ジョブの完了後にログの取得を有効にします。デフォルトでは、ログは取得されません。
  + `Type`: `Boolean`
  + 必須: いいえ
+ `LogOptions.RawLogs`: `RawLogs` が true に設定されている場合、ログは JSON に解析しようとせずに生文字列として返されます。デフォルトでは、可能であれば、ログは JSON に逆シリアル化されます。場合によっては、このような解析によって、多くの桁数を含む数値の精度を制限するなど、望ましくない変更を導入しかねません。
  + `Type`: `Boolean`
  + 必須: いいえ
+ `LogOptions.LogParameters`: Kubernetes API のログ読み取り API は、ログの取得を制御するクエリパラメータをサポートしています。例えば、`tailLines` または `limitBytes` を使用して、取得したログのサイズを制限し、Step Functions のデータサイズクォータ内に留まります。詳細については、SDK for Go API リファレンスの[ログを読み取り](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#read-log-pod-v1-core)セクションを参照してください。
  + `List of Strings` への `String` の `Type: ` マッピング
  + 必須: いいえ
  + 例:

    ```
    "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`: 文字列
  + 必須: はい
+ `CertificateAuthority`: ご自分のクラスターとの通信に必要な Base64 でエンコードされた証明書データ。この値は、[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 サーバーのエンドポイント。この値は、[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 クエリパラメーター。
  + `List of Strings` への `String` の `Type: ` マッピング
  + 必須: いいえ
  + 例:

    ```
    "QueryParameters": {
      "labelSelector": [ "job-name=example-job" ]
    }
    ```
+ `RequestBody`: Kubernetes REST API オペレーションの HTTP メッセージ本文。
  + `Type`: `JSON` または `String`
  + 必須: いいえ

以下には、`eks:call` を使用して、ジョブ `example-job` に所属するポッドをリストする `Task` 状態が含まれます。

```
{
  "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` を使用して、ジョブ `example-job` を削除する `Task` 状態が含まれ、`propagationPolicy` をジョブのポッドも確実に削除されるよう設定します。

```
{
  "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 API
<a name="connect-eks-apis"></a>

サポートされている Amazon EKS API と構文には次のものが含まれます。
+ [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 認可テーブルに (システム: マスター許可のある) 管理者として追加されます。初期状態では、その 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 が必要な許可を含むサービスにリンクされたロールを使用します。これらのサービスにリンクされたロールがアカウントにまだ存在しない場合は、Step Functions で使用される IAM ロールに対する `iam:CreateServiceLinkedRole` 許可を追加する必要があります。詳細については、*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 が必要な許可を含むサービスにリンクされたロールを使用します。これらのサービスにリンクされたロールがアカウントにまだ存在しない場合は、Step Functions で使用される IAM ロールに対する `iam:CreateServiceLinkedRole` 許可を追加する必要があります。詳細については、*Amazon EKS ユーザーガイド*の[サーバーがリンクしたロールを使用](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html)を参照してください。

    Fargate 上の Amazon EKS はすべてのリージョンで利用可能なわけではありません。リージョンの可用性の詳細については、[Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) の *Amazon EKS ユーザーガイド*の Fargate に関するセクションを参照してください。

    Step Functions で使用されている IAM ロールには、ポッド実行 IAM ロールを Amazon EKS に渡す `iam:PassRole` 許可が必要です。詳細については、*Amazon EKS ユーザーガイド*の[ポッド実行ロール](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 が必要な許可を含むサービスにリンクされたロールを使用します。これらのサービスにリンクされたロールがアカウントにまだ存在しない場合は、Step Functions で使用される IAM ロールに対する `iam:CreateServiceLinkedRole` 許可を追加する必要があります。詳細については、*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 ロールを `system:masters` 許可を受けた管理者として、Kubernetes RBAC 認可テーブルに追加されています。初期状態では、その IAM エンティティのみが、Kubernetes API サーバーを呼び出すことができます。例えば、Step Functions ステートマシンと同じロールを引き受けるのでなければ、または追加の IAM エンティティに許可を付与するように Kubernetes を構成している場合は、**kubectl** を使用して、Kubernetes API と対話することはできません。詳細については、*Amazon EKS ユーザーガイド*の[クラスター用ユーザーまたは IAM ロールを管理](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)を参照してください。

kube-system 名前空間の中の `aws-auth` `ConfigMap` に追加して、ユーザーまたはロールなど、追加 IAM エンティティの許可を追加できます。Step Functions からクラスターを作成する場合は、`eks:call` サービス統合を使用します。

以下には、`aws-auth` `ConfigMap` を作成し、ユーザー `arn:aws:iam::account-id:user/my-user` と IAM ロール `arn:aws:iam::account-id:role/my-role` に `system:masters` 許可を付与する `Task` 状態が含まれます。

```
{
  "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 が、`arn:aws:iam::account-id:role/service-role/my-role` などのパス **/service-role/** を含む形式で表示されるのをご覧になるかもしれません。`aws-auth` でロールを一覧表示するときは、この **service-role** パストークンを含めないでください。

クラスターが最初に作成されるときは、`aws-auth` `ConfigMap` は存在しませんが、Fargate プロファイルを作成すると、自動的に追加されます。`aws-auth` の現在の値を取得し、追加許可を追加し、新しいバージョンを `PUT` します。通常、Fargate プロファイルの前に `aws-auth` を作成するほうが簡単です。

Step Functions の外部でクラスターが作成された場合は、**kubectl** を設定して、Kubernetes API サーバーと通信します。次に、`kubectl apply -f aws-auth.yaml` を使って新しい `aws-auth` `ConfigMap` を作成します。または、`kubectl edit -n kube-system configmap/aws-auth` を使用して既に存在するものを編集します。詳細については、以下を参照してください。
+  *Amazon EKS ユーザーガイド*の [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) 用 kubeconfig を作成します。
+  *Amazon EKS ユーザーガイド*の[クラスターのユーザーまたは IAM ロールを管理](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html)。

Kubernetes で IAM ロールに十分な許可がない場合、`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>

次のサンプルテンプレートは、 がステートマシン定義のリソースに基づいて IAM ポリシー AWS Step Functions を生成する方法を示しています。詳細については、「[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) を参照してください。