Step Functions を使用してAmazon EKSを呼び出す - AWS Step Functions

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

Step Functions を使用してAmazon EKSを呼び出す

Step Functions、特定のAWS『Amazon ステートメント言語』の「」を参照してください。の使用方法の詳細については、「」を参照してください。AWS Step Functionsとの統合に関する詳細については、以下を参照してください。

最適化された Amazon EKS 統合と Amazon EKS の違いAWSSDK統合

他のででを使用してを設定する方法については、「Step Functions」を設定する方法の詳細については、AWSサービスの詳細については、」統合サービスの IAM ポリシー

Step Functions、Amazon Elastic Kubernetes サービスと統合するための 2 種類のサービス統合 API を提供します。1 つでは、Amazon EKS API を使用して Amazon EKS クラスターを作成および管理することができます。もう 1 つは、Kubernetes API を使用してクラスターを操作し、アプリケーションのワークフローの一部としてジョブを実行できます。Kubernetes API 統合は、Step Functions を使用して作成された Amazon EKS クラスターと、eksctlツールまたはAmazon EKS コンソール、または同様のメソッドを使用します。Step Functions EKS 統合は、パブリックエンドポイントアクセスを持つ Kubernetes API のみをサポートします。詳細については、「」を参照してください。Amazon EKS クラスターの作成Amazon EKS ユーザーガイドの「」。

実行が停止しても、Step Functions Amazon EKS クラスターを自動的に終了しません。Amazon EKS クラスターが終了する前にステートマシンが停止した場合、クラスターは無期限に実行され続け、追加料金が発生する可能性があります。これを回避するには、作成した Amazon EKS クラスターが正しく終了していることを確認してください。詳細については、以下を参照してください。

注記

Step Functions には、タスクの最大の入力または結果データサイズのクォータがあります。これにより、別のサービスとの間でデータを送受信するときに、UTF-8 でエンコードされた文字列として 262,144 バイトのデータに制限されます。「ステートマシンの実行に関連するクォータ」を参照してください。

Kubernetes API 統合

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

RunJob

-eks:runJobサービス統合により、Amazon EKS クラスターでジョブを実行できます。-eks:runJob.syncバリアントを使用すると、ジョブが完了するまで待機し、オプションでログを取得できます。

Kubernetes API サーバーは、ステートマシンで使用される IAM ロールにアクセス許可を付与する必要があります。詳細については、「Permissions」を参照してください。

向けのジョブを実行する(.sync) パターンでは、ポーリングによってジョブのステータスが決まります。Step Functions、最初に 1 分あたり約 1 ポーリングの割合でポーリングします。このレートは、最終的には 5 分ごとに約 1 ポーリングまで遅くなります。より頻繁なポーリングが必要な場合、またはポーリング戦略をより詳細に制御する必要がある場合は、eks:call統合を使用して、ジョブのステータスを照会します。

-eks:runJob統合は、batch/v1Kubernetes ジョブズ. 詳細については、「」を参照してください。ジョブKubernetes ドキュメントの「」。カスタムリソースを含む他の Kubernetes リソースを管理する場合は、eks:callのサービス統合が含まれます。Step Functions を使用して、ポーリングループを構築できます。これは、Job ステータスのポーリング (Lambda、AWS Batch) サンプルプロジェクト.

サポートされているパラメータは次のとおりです。

  • ClusterName: 呼び出す Amazon EKS クラスターの名前。

    • Type: String

    • 必須: はい

  • CertificateAuthority: クラスターとの通信に必要な Base64 エンコードされた証明書データ。この値は、Amazon EKS コンソールAmazon EKS を使用してDescribeClusterAPI.

    • Type: String

    • 必須: はい

  • Endpoint: Kubernetes API サーバーのエンドポイント URL。この値は、Amazon EKS コンソールAmazon EKS を使用してDescribeClusterAPI.

    • Type: String

    • 必須: はい

  • Namespace: ジョブを実行する名前空間。指定されていない場合、名前空間defaultが用いられる。

    • Type: String

    • 必須: いいえ

  • Job: Kubernetes Job 定義。「」を参照してください。ジョブKubernetes ドキュメントの「」。

    • Type: JSON または String

    • 必須: はい

  • LogOptions: ログのオプションの取得を制御する一連のオプション。ジョブの完了を待機するために [Run a Job (.sync)] サービス統合パターンが使用されている場合にのみ適用されます。

    • Type: JSON

    • 必須: いいえ

    • ログは、キーの下のレスポンスに含まれていますlogs。ジョブ内に複数の Pod があり、それぞれに複数のコンテナーがある場合があります。

      { ... "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 のデータサイズクォータ内に収まるようにします。詳細については、「」を参照してください。読み取りログセクション (Kubernetes API リファレンス) を参照してください。

    • Type: MapStringList 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", "Parameters": { "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

-eks:callサービス統合により、Kubernetes API を使用して Kubernetes API エンドポイントを介して Kubernetes リソースオブジェクトを読み書きできます。

Kubernetes API サーバーは、ステートマシンで使用される IAM ロールにアクセス許可を付与する必要があります。詳細については、「Permissions」を参照してください。

使用できるオペレーションの詳細については、『」の「」を参照してください。Kubernetes API リファレンス

サポートされているパラメータCall以下が含まれます。

  • ClusterName: 呼び出す Amazon EKS クラスターの名前。

    • Type: 文字列

    • 必須: はい

  • CertificateAuthority: クラスターとの通信に必要な Base64 エンコードされた証明書データ。この値は、Amazon EKS コンソールAmazon EKS を使用してDescribeClusterAPI.

    • Type: String

    • 必須: はい

  • Endpoint: Kubernetes API サーバーのエンドポイント URL。この値は、「」にあります。Amazon EKS コンソールを使用するか、Amazon EKS のDescribeCluster APIを使用して作成する必要があります。

    • Type: String

    • 必須: はい

  • Method: リクエストの HTTP メソッド。GETPOSTPUTDELETEHEADPATCH のいずれかです。

    • Type: String

    • 必須: はい

  • Path: Kubernetes REST API 操作の HTTP パス。

    • Type: String

    • 必須: はい

  • QueryParameters: Kubernetes REST API 操作の HTTP クエリパラメーター。

    • Type: MapStringList of Strings

    • 必須: いいえ

    • 例:

      "QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
  • RequestBody: Kubernetes REST API 操作の HTTP メッセージ本文。

    • Type: JSON または String

    • 必須: いいえ

以下には、が含まれます。Taskを使用する状態eks:callを使用して、ジョブに属する Pod を一覧表示します。example-job

{ "StartAt": "Call EKS", "States": { "Call EKS": { "Type": "Task", "Resource": "arn:aws:states:::eks:call", "Parameters": { "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 } } }

以下には、が含まれます。Taskを使用する状態eks:callをクリックして、ジョブを削除します。example-jobを設定し、propagationPolicyをクリックして、ジョブの Pod も確実に削除されるようにします。

{ "StartAt": "Call EKS", "States": { "Call EKS": { "Type": "Task", "Resource": "arn:aws:states:::eks:call", "Parameters": { "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

サポートされる Amazon EKS API と構文は次のとおりです。

  • CreateCluster

    • リクエストの構文

    • レスポンスの構文

      Amazon EKS クラスターが、eks:createClusterサービス統合により、IAM ロールは、管理者 (system: masters のアクセス許可が付与されている) として Kubernetes RBAC 認証テーブルに追加されます。最初は、その IAM エンティティだけが Kubernetes API サーバーを呼び出すことができます。詳細については、以下を参照してください。

      Amazon EKS は、ユーザーに代わって他ののサービスを呼び出すために Amazon EKS が必要とする許可を含むサービスにリンクされたロールを使用します。これらのサービスリンクされたロールがアカウントにまだ存在しない場合は、iam:CreateServiceLinkedRoleアクセス許可を Step Functions で使用する IAM ロールに追加します。詳細については、「」を参照してください。サービスにリンクされたロールの使用Amazon EKS ユーザーガイド

      Step Functions で使用される IAM ロールには、iam:PassRoleアクセス許可を使用して、クラスター IAM ロールを Amazon EKS に渡します。詳細については、「」を参照してください。Amazon EKS クラスター の IAM ロールAmazon EKS ユーザーガイド

  • DeleteCluster

  • CreateFargateProfile

    • リクエストの構文

    • レスポンスの構文

      Amazon EKS は、ユーザーに代わって他ののサービスを呼び出すために Amazon EKS が必要とする許可を含むサービスにリンクされたロールを使用します。これらのサービスリンクされたロールがアカウントにまだ存在しない場合は、iam:CreateServiceLinkedRoleアクセス許可を Step Functions で使用する IAM ロールに追加します。詳細については、「」を参照してください。サービスにリンクされたロールの使用Amazon EKS ユーザーガイド

      Fargate の Amazon EKS は、一部のリージョンでは使用できません。リージョンの可用性の詳細については、」FargateAmazon EKS ユーザーガイド

      Step Functions で使用される IAM ロールには、iam:PassRoleアクセス許可を使用して、Pod 実行 IAM ロールを Amazon EKS に渡します。詳細については、「」を参照してください。ポッド実行ロールAmazon EKS ユーザーガイド

  • DeleteFargateProfile

  • CreateNodegroup

    • リクエストの構文

    • レスポンスの構文

      Amazon EKS は、ユーザーに代わって他ののサービスを呼び出すためにAmazon EKS が必要とする許可を持つサービスにリンクされたロールを使用します。これらのサービスリンクされたロールがアカウントにまだ存在しない場合は、iam:CreateServiceLinkedRoleアクセス許可を Step Functions で使用する IAM ロールに追加します。詳細については、「」を参照してください。サービスにリンクされたロールの使用Amazon EKS ユーザーガイド

      Step Functions で使用される IAM ロールには、iam:PassRoleアクセス許可を使用して、ノード IAM ロールを Amazon EKS に渡します。詳細については、「」を参照してください。サービスにリンクされたロールの使用Amazon EKS ユーザーガイド

  • DeleteNodegroup

以下には、が含まれます。TaskAmazon EKS クラスターを作成します。

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

以下には、が含まれます。TaskAmazon EKS クラスターを削除します。

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

以下には、が含まれます。Task状態は、Fargate プロファイルを作成します。

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

以下には、が含まれます。Task状態は、Fargate プロファイルを削除します。

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

以下には、が含まれます。Task状態。ノードグループを作成します。

{ "StartAt": "CreateNodegroup.sync", "States": { "CreateNodegroup.sync": { "Type": "Task", "Resource": "arn:aws:states:::eks:createNodegroup.sync", "Parameters": { "ClusterName": "MyCluster", "NodegroupName": "MyNodegroup", "NodeRole": "arn:aws:iam::123456789012: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", "Parameters": { "ClusterName": "MyCluster", "NodegroupName": "MyNodegroup" }, "End": true } } }

Permissions

Amazon EKS クラスターが、eks:createClusterサービス統合により、IAM ロールは、管理者として Kubernetes RBAC 認証テーブルに追加されます。また、管理者として IAM ロールが追加され、system:mastersアクセス許可。最初は、その IAM エンティティだけが Kubernetes API サーバーを呼び出すことができます。たとえば、使用することはできません。クーベクトルを使用して Kubernetes API サーバーと対話します。ただし、Step Functions ステートマシンと同じロールを引き受けるか、追加の IAM エンティティにアクセス許可を付与するように Kubernetes を設定する場合を除きます。詳細については、「」を参照してください。クラスターのユーザーまたは IAM ロールの管理Amazon EKS ユーザーガイド

ユーザーやロールなどの追加の IAM エンティティのアクセス許可を追加するには、aws-auth ConfigMapをkube-system名前空間に配置します。Step Functions からクラスターを作成する場合は、eks:callのサービス統合が含まれます。

以下には、が含まれます。Task状態を作成します。aws-auth ConfigMapおよびの許可system:mastersIAM ユーザーにアクセス許可を割り当てます。arn:aws:iam::123456789012:user/my-userIAM ロールarn:aws:iam::123456789012:role/my-role

{ "StartAt": "Add authorized user", "States": { "Add authorized user": { "Type": "Task", "Resource": "arn:aws:states:::eks:call", "Parameters": { "ClusterName": "MyCluster", "CertificateAuthority": "LS0tLS1CRUd...UtLS0tLQo=", "Endpoint": "https://444455556666.yl4.us-east-1.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::123456789012:user/my-user\", \"username\": \"my-user\", \"groups\": [ \"system:masters\" ] } ]", "mapRoles": "[{ \"rolearn\": \"arn:aws:iam::123456789012:role/my-role\", \"username\": \"my-role\", \"groups\": [ \"system:masters\" ] } ]" } } }, "End": true } }
注記

IAM ロールの ARN が、パスを含む形式で表示される場合があります。/サービス・ロール/またはarn:aws:iam::123456789012:role/service-role/my-role。このサービスロールpath トークンは、ロールをaws-auth

クラスターを最初に作成すると、aws-auth ConfigMapは存在しませんが、Fargate プロファイルを作成すると自動的に追加されます。現在の値を取得するには、「」を参照してください。aws-authをクリックし、追加の権限を追加し、PUT新しいバージョン. 作成するのは通常、簡単ですaws-authFargate プロファイルの前に。

クラスターが Step Functions の外部で作成された場合は、クーベクトルKubernetes API サーバーと通信します。次に、新しいaws-auth ConfigMapを使用したkubectl apply -f aws-auth.yamlを使用して既に存在するものを編集するか、kubectl edit -n kube-system configmap/aws-auth。詳細については、以下を参照してください。

IAM ロールが 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" }