Rufen Sie Amazon EKS mit Step Functions - AWS Step Functions

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Rufen Sie Amazon EKS mit Step Functions

Step Functions können bestimmte steuernAWS-Services direkt aus der Amazon States Language. Weitere Informationen zur Arbeit mitAWS Step Functionsund seine Integrationen finden Sie im Folgenden:

Wie sich die optimierte Amazon EKS-Integration von der Amazon EKS unterscheidetAWSSDK-Integration

Informationen zur Konfiguration von IAM bei Verwendung von Step Functions mit anderenAWSDienstleistungen, sieheIAM-Richtlinien für integrierte Diensteaus.

Step Functions bietet zwei Arten von Service-Integrations-APIs zur Integration in Amazon Elastic Kubernetes Service. Mit einer können Sie die Amazon EKS-APIs verwenden, um einen Amazon EKS-Cluster zu erstellen und zu verwalten. Auf der anderen Seite können Sie mit Ihrem Cluster über die Kubernetes-API interagieren und Jobs als Teil des Workflows Ihrer Anwendung ausführen. Sie können die Kubernetes-API-Integrationen mit Amazon EKS-Clustern verwenden, die mit Step Functions erstellt wurden, wobei Amazon EKS-Cluster von dereksctl-Tool oderAmazon EKS-Konsoleoder ähnliche Methoden. Die Step Functions EKS Integration unterstützt nur Kubernetes-APIs mit öffentlichem Endpunktzugriff. Weitere Informationen finden Sie unterErstellen eines Amazon-EKS-Clustersim Amazon EKS-Benutzerhandbuch.

Step Functions beendet einen Amazon EKS-Cluster nicht automatisch, wenn die Ausführung gestoppt wird. Wenn Ihr Zustandscomputer stoppt, bevor Ihr Amazon EKS-Cluster beendet wurde, wird Ihr Cluster möglicherweise auf unbestimmte Zeit weiter ausgeführt und kann zusätzliche Gebühren anfallen. Um dies zu vermeiden, stellen Sie sicher, dass jeder von Ihnen erstellte Amazon EKS-Cluster ordnungsgemäß beendet wird. Weitere Informationen finden Sie unter:

Anmerkung

In Step Functions gibt es ein Kontingent für die maximale Größe von Eingabe- oder Ergebnisdaten für eine Aufgabe. Dies beschränkt Sie auf 262.144 Byte Daten als UTF-8-kodierte Zeichenfolge, wenn Sie an einen anderen Dienst senden oder Daten von diesem empfangen. Siehe Kontingente im Zusammenhang mit State-Machine-Ausführungen.

Kubernetes-API-Integrationen

Step Functions unterstützt die folgenden Kubernetes-APIs:

RunJob

Dieeks:runJobMit der -Serviceintegration können Sie einen Auftrag in Ihrem Amazon EKS-Cluster ausführen. Dieeks:runJob.syncvariant ermöglicht es Ihnen, auf den Abschluss des Auftrags zu warten und optional Protokolle abzurufen.

Ihr Kubernetes-API-Server muss Berechtigungen für die IAM-Rolle erteilen, die von Ihrem Statuscomputer verwendet wird. Weitere Informationen finden Sie unter Berechtigungen .

Für denAusführen eines Auftrags(.sync) -Muster wird der Status des Auftrags durch Abfragen bestimmt. Step Functions fragt zunächst mit einer Rate von etwa einer Umfrage pro Minute ab. Diese Rate verlangsamt sich schließlich alle 5 Minuten auf etwa eine Umfrage. Wenn Sie häufigere Abfragen benötigen oder mehr Kontrolle über die Polling-Strategie benötigen, können Sie dieeks:call-Integration zur Abfrage des Auftrags.

Dieeks:runJobIntegration ist spezifisch fürbatch/v1Kubernetes-Jobs. Weitere Informationen finden Sie unterJobsin der Kubernetes-Dokumentation. Wenn Sie andere Kubernetes-Ressourcen, einschließlich benutzerdefinierter Ressourcen, verwalten möchten, verwenden Sie dieeks:call-Serviceintegrationen Sie können Step Functions verwenden, um Polling-Schleifen zu erstellen, wie in derUmfrage des Auftragsstatus (Lambda,AWS Batch) -Beispielprojekt

Unterstützte Parameter umfassen:

  • ClusterName: Der Name des Amazon EKS-Clusters, den Sie anrufen möchten.

    • Type: String

    • Erforderlich: Ja

  • CertificateAuthority: Die Base64-kodierten Zertifikatsdaten, die für die Kommunikation mit Ihrem Cluster erforderlich sind. Sie können diesen Wert aus demAmazon EKS-Konsoleoder durch die Verwendung des Amazon EKSDescribeClusterAPI.

    • Type: String

    • Erforderlich: Ja

  • Endpoint: Die Endpunkt-URL für Ihren Kubernetes-API-Server. Sie können diesen Wert aus demAmazon EKS-Konsoleoder durch die Verwendung des Amazon EKSDescribeClusterAPI.

    • Type: String

    • Erforderlich: Ja

  • Namespace: Der Namespace, in dem der Job ausgeführt werden soll. Falls nicht angegeben, wird der Namespacedefaultwird verwendet.

    • Type: String

    • Erforderlich: nein

  • Job: Die Definition des Kubernetes Job. Siehe .Jobsin der Kubernetes-Dokumentation.

    • Type: JSON oder String

    • Erforderlich: Ja

  • LogOptions: Eine Reihe von Optionen zur Steuerung des optionalen Abrufs von Protokollen. Gilt nur, wenn das Service-Integrationsmuster „Einen Job ausführen“ (.sync) verwendet wird, um auf den Abschluss des Jobs zu warten.

    • Type: JSON

    • Erforderlich: nein

    • Protokolle sind in der Antwort unter dem Schlüssel enthaltenlogsaus. Es kann mehrere Pods innerhalb des Jobs geben, jeder mit mehreren Containern.

      { ... "logs": { "pods": { "pod1": { "containers": { "container1": { "log": <log> }, ... } }, ... } }
    • Der Protokollabruf wird auf einer Best-Effort-Basis durchgeführt. Wenn beim Abrufen eines Protokolls ein Fehler auftritt, anstelle deslogFeld es wird die Felder gebenerrorundcauseaus.

  • LogOptions.RetrieveLogs: Aktivieren Sie den Protokollabruf, nachdem der Job abgeschlossen ist. Standardmäßig werden Protokolle nicht abgerufen.

    • Type: Boolean

    • Erforderlich: nein

  • LogOptions.RawLogs: WennRawLogsist auf true festgelegt, werden Protokolle als rohe Strings zurückgegeben, ohne zu versuchen, sie in JSON zu analysieren. Standardmäßig werden Protokolle nach Möglichkeit in JSON deserialisiert. In einigen Fällen kann ein solches Parsen zu unerwünschten Änderungen führen, z. B. die Begrenzung der Genauigkeit von Zahlen, die viele Ziffern enthalten.

    • Type: Boolean

    • Erforderlich: nein

  • LogOptions.LogParameters: Die Read Log API der Kubernetes-API unterstützt Abfrageparameter zur Steuerung des Protokollabrufs. Sie können beispielsweise die Datei verwendentailLinesoderlimitBytesum die Größe der abgerufenen Protokolle zu begrenzen und innerhalb des Datengrößenkontingents Step Functions zu bleiben. Weitere Informationen finden Sie im .Log lesenAbschnitt der Kubernetes-API-Referenz.

    • Type: Zuordnung vonStringzuList of Strings

    • Erforderlich: nein

    • Beispiel:

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

Das folgende Beispiel enthält eineTaskStatus, der einen Job ausführt, darauf wartet, dass er abgeschlossen ist, und ruft dann die Protokolle des Jobs ab:

{ "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

Dieeks:callDie Service-Integration ermöglicht es Ihnen, Kubernetes-API zum Lesen und Schreiben von Kubernetes-Ressourcenobjekten über einen Kubernetes-API-Endpunkt zu verwenden.

Ihr Kubernetes-API-Server muss Berechtigungen für die IAM-Rolle erteilen, die von Ihrem Statuscomputer verwendet wird. Weitere Informationen finden Sie unter Berechtigungen .

Weitere Informationen zu den verfügbaren Operationen finden Sie in derKubernetes-API-Referenzaus.

Unterstützte Parameter fürCallumfassen:

  • ClusterName: Der Name des Amazon EKS-Clusters, den Sie anrufen möchten.

    • Type: Zeichenfolge

    • Erforderlich: Ja

  • CertificateAuthority: Die Base64-kodierten Zertifikatsdaten, die für die Kommunikation mit Ihrem Cluster erforderlich sind. Sie können diesen Wert aus demAmazon EKS-Konsoleoder durch die Verwendung des Amazon EKSDescribeClusterAPI.

    • Type: String

    • Erforderlich: Ja

  • Endpoint: Die Endpunkt-URL für Ihren Kubernetes-API-Server. Sie finden diesen Wert auf derAmazon EKS-Konsoleoder mithilfe der DescribeCluster-API von Amazon EKS.

    • Type: String

    • Erforderlich: Ja

  • Method: Die HTTP-Methode Ihrer Anfrage. Eins von: GET, POST, PUT, DELETE, HEAD oder von PATCH.

    • Type: String

    • Erforderlich: Ja

  • Path: Der HTTP-Pfad des Kubernetes REST-API-Vorgangs.

    • Type: String

    • Erforderlich: Ja

  • QueryParameters: Die HTTP-Abfrageparameter des Kubernetes REST-API-Vorgangs.

    • Type: Zuordnung vonStringzuList of Strings

    • Erforderlich: Nein

    • Beispiel:

      "QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
  • RequestBody: Der HTTP-Nachrichtentext des Kubernetes REST-API-Vorgangs.

    • Type: JSON oder String

    • Erforderlich: Nein

Das folgende Beispiel enthält eineTask-Status, dereks:callum die Pods aufzulisten, die zum Job gehörenexample-jobaus.

{ "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 } } }

Das folgende Beispiel enthält eineTask-Status, dereks:callum den Job zu löschenexample-job, und legt diepropagationPolicyum sicherzustellen, dass die Pods des Jobs ebenfalls gelöscht werden.

{ "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 } } }

Unterstützte Amazon EKS-APIs

Zu den unterstützten Amazon EKS-APIs und Syntax gehören:

  • CreateCluster

    • Erforderliche Syntax

    • Antwortsyntax

      Wenn ein Amazon EKS-Cluster mit dereks:createClusterIn der -Serviceintegration wird die IAM-Rolle zur Kubernetes-RBAC-Autorisierungstabelle als Administrator (mit system:masters -Berechtigungen) hinzugefügt. Anfänglich kann nur diese IAM-Entität Aufrufe an den Kubernetes-API-Server tätigen. Weitere Informationen finden Sie unter:

      Amazon EKS verwendet serviceverknüpfte Rollen, die die Berechtigungen enthalten, die Amazon EKS für den Aufruf anderer -Services in Ihrem Namen benötigt. Wenn diese dienstgebundenen Rollen in Ihrem Konto noch nicht vorhanden sind, müssen Sie dieiam:CreateServiceLinkedRoleBerechtigung für die von Step Functions verwendete IAM-Rolle. Weitere Informationen finden Sie unterVerwenden von serviceverknüpften RollenimBenutzerhandbuch für Amazon EKSaus.

      Die von Step Functions verwendete IAM-Rolle mussiam:PassRoleBerechtigungen zum Übergeben der IAM-Rolle des Clusters an Amazon EKS. Weitere Informationen finden Sie unterAmazon-EKS-Cluster-IAM-RolleimBenutzerhandbuch für Amazon EKSaus.

  • DeleteCluster

  • CreateFargateProfile

    • Erforderliche Syntax

    • Antwortsyntax

      Amazon EKS verwendet serviceverknüpfte Rollen, die die Berechtigungen enthalten, die Amazon EKS für den Aufruf anderer -Services in Ihrem Namen benötigt. Wenn diese dienstgebundenen Rollen in Ihrem Konto noch nicht vorhanden sind, müssen Sie dieiam:CreateServiceLinkedRoleBerechtigung für die von Step Functions verwendete IAM-Rolle. Weitere Informationen finden Sie unterVerwenden von serviceverknüpften RollenimBenutzerhandbuch für Amazon EKSaus.

      Amazon EKS auf Fargate ist möglicherweise nicht in allen Regionen verfügbar. Informationen zur Verfügbarkeit von Regionen finden Sie im Abschnitt überFargateimBenutzerhandbuch für Amazon EKSaus.

      Die von Step Functions verwendete IAM-Rolle mussiam:PassRoleBerechtigungen zum Übergeben der IAM-Rolle der Pod-Ausführung an Amazon EKS. Weitere Informationen finden Sie unterPod-AusführungsrolleimBenutzerhandbuch für Amazon EKSaus.

  • DeleteFargateProfile

  • CreateNodegroup

    • Erforderliche Syntax

    • Antwortsyntax

      Amazon EKS verwendet serviceverknüpfte Rolle, die die Berechtigungen enthält, die Amazon EKS für den Aufruf anderer -Services in Ihrem Namen benötigt. Wenn diese dienstgebundenen Rollen in Ihrem Konto noch nicht vorhanden sind, müssen Sie dieiam:CreateServiceLinkedRoleBerechtigung für die von Step Functions verwendete IAM-Rolle. Weitere Informationen finden Sie unterVerwenden von serviceverknüpften RollenimBenutzerhandbuch für Amazon EKSaus.

      Die von Step Functions verwendete IAM-Rolle mussiam:PassRoleBerechtigungen zum Übergeben der IAM-Rolle des Knotens an Amazon EKS. Weitere Informationen finden Sie unterVerwenden von serviceverknüpften RollenimBenutzerhandbuch für Amazon EKSaus.

  • DeleteNodegroup

Das folgende Beispiel enthält eineTaskdas einen Amazon EKS-Cluster erstellt.

{ "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 } } }

Das folgende Beispiel enthält eineTaskgibt an, dass ein Amazon EKS-Cluster gelöscht wird.

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

Das folgende Beispiel enthält eineTaskState, der ein Fargate-Profil erstellt.

{ "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 } } }

Das folgende Beispiel enthält eineTaskgeben an, dass ein Fargate-Profil gelöscht wird.

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

Das folgende Beispiel enthält eineTaskstatus, der eine Knotengruppe erstellt.

{ "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 } } }

Das folgende Beispiel enthält eineTaskstatus, der eine Knotengruppe löscht.

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

Berechtigungen

Wenn ein Amazon EKS-Cluster mit dereks:createCluster-Serviceintegration, die IAM-Rolle wird der Kubernetes-RBAC-Autorisierungstabelle als Administrator hinzugefügt.system:masters-Berechtigungen Anfänglich kann nur diese IAM-Entität Aufrufe an den Kubernetes-API-Server tätigen. Zum Beispiel können Sie nicht verwendenkubectlum mit Ihrem Kubernetes-API-Server zu interagieren, es sei denn, Sie übernehmen dieselbe Rolle wie Ihr Step Functions Functions-Statuscomputer oder wenn Sie Kubernetes so konfigurieren, dass zusätzliche IAM-Entitäten Berechtigungen erteilt werden. Weitere Informationen finden Sie unterVerwalten von Benutzern oder IAM-Rollen für Ihren ClusterimBenutzerhandbuch für Amazon EKSaus.

Sie können Berechtigungen für zusätzliche IAM-Entitäten wie Benutzer oder Rollen hinzufügen, indem Sie sie demaws-auth ConfigMapim kube-System-Namespace. Wenn Sie Ihren Cluster über Step Functions erstellen, verwenden Sie dieeks:call-Serviceintegrationen

Das folgende Beispiel enthält eineTaskStaat, der einaws-auth ConfigMapund Zuschüssesystem:mastersBerechtigung für den IAM-Benutzerarn:aws:iam::123456789012:user/my-userund die IAM-Rollearn:aws:iam::123456789012:role/my-roleaus.

{ "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 } }
Anmerkung

Möglicherweise wird der ARN für eine IAM-Rolle in einem Format angezeigt, das den Pfad enthält/Service-Rolle/, wie beispielsweisearn:aws:iam::123456789012:role/service-role/my-roleaus. Dieser-ServicerollePfad-Token sollte nicht einbezogen werden, wenn die Rolle inaws-authaus.

Wenn Ihr Cluster zum ersten Mal erstellt wirdaws-auth ConfigMapexistiert nicht, wird aber automatisch hinzugefügt, wenn Sie ein Fargate-Profil erstellen. Sie können den aktuellen Wert von abrufenaws-auth, fügen Sie die zusätzlichen Berechtigungen hinzu undPUTeine neue Version. Es ist normalerweise einfacher zu erstellenaws-authvor dem Fargate-Profil.

Wenn Ihr Cluster außerhalb von Step Functions erstellt wurde, können Sie konfigurierenkubectlum mit Ihrem Kubernetes-API-Server zu kommunizieren. Erstellen eines neuenaws-auth ConfigMapunter Verwendung vonkubectl apply -f aws-auth.yamloder bearbeite eine, die bereits existiert mitkubectl edit -n kube-system configmap/aws-authaus. Weitere Informationen finden Sie unter:

Wenn Ihre IAM-Rolle in Kubernetes. nicht über ausreichende Berechtigungen verfügt, ist dereks:callodereks:runJobService-Integrationen schlagen mit dem folgenden Fehler fehl:

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