Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Créez et gérez des EKS clusters Amazon avec Step Functions
Découvrez comment intégrer Step Functions à Amazon EKS pour gérer les clusters Kubernetes. Step Functions propose deux types d'intégration de services APIs pour l'intégration à Amazon Elastic Kubernetes Service. L'un d'eux vous permet d'utiliser Amazon EKS APIs pour créer et gérer un EKS cluster Amazon. L'autre vous permet d'interagir avec votre cluster à l'aide de Kubernetes API et d'exécuter des tâches dans le cadre du flux de travail de votre application.
Vous pouvez utiliser les API intégrations Kubernetes avec les clusters EKS Amazon créés à l'aide de Step Functions, avec les clusters EKS Amazon créés par l'outil eksctl ou la console EKSAmazon, ou avec des méthodes similaires
Pour en savoir plus sur l'intégration avec AWS services dans Step Functions, voir Intégration des services et. Transmission de paramètres à un service API dans Step Functions
Principales fonctionnalités de l'EKSintégration optimisée avec Amazon
-
Le modèle Exécuter une tâche (.sync) d'intégration est pris en charge.
-
Il n'y a aucune optimisation pour le modèle Réponse à la requête d'intégration.
-
Le modèle Attendre un rappel avec un jeton de tâche d'intégration n'est pas pris en charge.
Note
L'EKSintégration Step Functions ne prend en charge que Kubernetes APIs avec accès public aux terminaux. Par défaut, les points de terminaison des API serveurs de EKS clusters ont un accès public. Pour plus d'informations, consultez la section Contrôle d'accès aux points de terminaison du EKS cluster Amazon dans le guide de EKS l'utilisateur Amazon.
Step Functions ne met pas automatiquement fin à un EKS cluster Amazon si l'exécution est arrêtée. Si votre machine d'état s'arrête avant la fin de votre EKS cluster Amazon, celui-ci peut continuer à fonctionner indéfiniment et entraîner des frais supplémentaires. Pour éviter cela, assurez-vous que tout EKS cluster Amazon que vous créez est correctement résilié. Pour plus d’informations, consultez :
-
Suppression d'un cluster dans le guide de EKS l'utilisateur Amazon.
-
Exécuter une tâche (.sync)dans les modèles d'intégration des services.
Note
Il existe un quota pour la taille maximale des données d'entrée ou de résultat pour une tâche dans Step Functions. Cela vous limite à 256 Ko de données sous forme de chaîne codée en UTF -8 lorsque vous envoyez ou recevez des données d'un autre service. Consultez Quotas liés aux exécutions par les machines de l'État.
Intégrations Kubernetes API
Step Functions prend en charge les Kubernetes APIs suivants :
RunJob
L'intégration des eks:runJob
services vous permet d'exécuter une tâche sur votre EKS cluster Amazon. La eks:runJob.sync
variante vous permet d'attendre que le travail soit terminé et, éventuellement, de récupérer les journaux.
Votre API serveur Kubernetes doit accorder des autorisations au IAM rôle utilisé par votre machine d'état. Pour de plus amples informations, veuillez consulter Autorisations.
Pour le modèle Run a Job (.sync
), le statut de la tâche est déterminé par un sondage. Step Functions interroge initialement à un rythme d'environ 1 sondage par minute. Ce taux finit par ralentir pour atteindre environ 1 sondage toutes les 5 minutes. Si vous avez besoin d'un sondage plus fréquent ou d'un meilleur contrôle de la stratégie de sondage, vous pouvez utiliser l'eks:call
intégration pour demander le statut de la tâche.
L'eks:runJob
intégration est spécifique à batch/v1
Kubernetes Jobs. Pour plus d'informations, consultez la section Jobseks:call
intégration de services. Vous pouvez utiliser Step Functions pour créer des boucles d'interrogation, comme le montre l'Sondage sur le statut du poste avec Lambda et AWS Batchexemple de projet.
Les paramètres pris en charge incluent :
-
ClusterName
: nom du EKS cluster Amazon que vous souhaitez appeler.-
Type
:String
-
Obligatoire : oui
-
-
CertificateAuthority
: les données de certificat codées en Base64 nécessaires pour communiquer avec votre cluster. Vous pouvez obtenir cette valeur depuis la EKSconsole Amazonou en utilisant Amazon EKS DescribeClusterAPI. -
Type
:String
-
Obligatoire : oui
-
-
Endpoint
: point de terminaison URL de votre serveur KubernetesAPI. Vous pouvez obtenir cette valeur depuis la EKSconsole Amazonou en utilisant Amazon EKS DescribeClusterAPI. -
Type
:String
-
Obligatoire : oui
-
-
Namespace
: espace de noms dans lequel exécuter le job. S'il n'est pas fourni, l'espace de nomsdefault
est utilisé.-
Type
:String
-
Obligatoire : non
-
-
Job
: définition du Kubernetes Job. Consultez la section Jobsdans la documentation de Kubernetes. -
Type
:JSON
ouString
-
Obligatoire : oui
-
-
LogOptions
: ensemble d'options permettant de contrôler la récupération facultative des journaux. Applicable uniquement si le modèle d'intégration du service Run a Job (.sync) est utilisé pour attendre la fin de la tâche.-
Type
:JSON
-
Obligatoire : non
-
Les journaux sont inclus dans la réponse sous la clé
logs
. La tâche peut comporter plusieurs modules, chacun contenant plusieurs conteneurs.{ ... "logs": { "pods": { "pod1": { "containers": { "container1": { "log":
<log>
}, ... } }, ... } } -
La récupération des journaux est effectuée dans la mesure du possible. En cas d'erreur lors de la récupération d'un journal, les champs
error
etcause
.log
-
-
LogOptions.RetrieveLogs
: active la récupération du journal une fois le travail terminé. Par défaut, les journaux ne sont pas récupérés.-
Type
:Boolean
-
Obligatoire : non
-
-
LogOptions.RawLogs
: S'ilRawLogs
est défini sur true, les journaux seront renvoyés sous forme de chaînes brutes sans qu'il soit nécessaire de les analyser. JSON Par défaut, les journaux sont désérialisés dans JSON la mesure du possible. Dans certains cas, une telle analyse peut introduire des modifications indésirables, telles que la limitation de la précision des nombres contenant de nombreux chiffres.-
Type
:Boolean
-
Obligatoire : non
-
-
LogOptions.LogParameters
: Le journal de lecture de Kubernetes API prend en charge les paramètres API de requête pour contrôler la récupération du journal. Par exemple, vous pouvez utilisertailLines
oulimitBytes
limiter la taille des journaux récupérés tout en respectant le quota de taille des données de Step Functions. Pour plus d'informations, consultez la section Read Logde la référence KubernetesAPI. -
Type:
Carte deString
àList of Strings
-
Obligatoire : non
-
Exemple :
"LogParameters": { "tailLines": [ "6" ] }
-
L'exemple suivant inclut un Task
état qui exécute une tâche, attend qu'elle soit terminée, puis extrait les journaux de la tâche :
{
"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
L'intégration des eks:call
services vous permet d'utiliser Kubernetes pour lire et écrire des objets de ressources Kubernetes via API un point de terminaison Kubernetes. API
Votre API serveur Kubernetes doit accorder des autorisations au IAM rôle utilisé par votre machine d'état. Pour de plus amples informations, veuillez consulter Autorisations.
Pour plus d'informations sur les opérations disponibles, consultez la référence Kubernetes API
Les paramètres pris en charge Call
incluent :
-
ClusterName
: nom du EKS cluster Amazon que vous souhaitez appeler.-
Type
: chaîne -
Obligatoire : oui
-
-
CertificateAuthority
: les données de certificat codées en Base64 nécessaires pour communiquer avec votre cluster. Vous pouvez obtenir cette valeur depuis la EKSconsole Amazonou en utilisant Amazon EKS DescribeClusterAPI. -
Type
:String
-
Obligatoire : oui
-
-
Endpoint
: point de terminaison URL de votre serveur KubernetesAPI. Vous pouvez trouver cette valeur sur la EKSconsole Amazonou en utilisant EKS « Amazon » DescribeCluster API. -
Type
:String
-
Obligatoire : oui
-
-
Method
: La HTTP méthode de votre demande. SoitGET
,POST
,PUT
,DELETE
,HEAD
ouPATCH
.-
Type
:String
-
Obligatoire : oui
-
-
Path
: le HTTP chemin de l'opération Kubernetes RESTAPI.-
Type
:String
-
Obligatoire : oui
-
-
QueryParameters
: paramètres de HTTP requête de l'opération Kubernetes RESTAPI.-
Type:
Carte deString
àList of Strings
-
Obligatoire : non
-
Exemple :
"QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
-
-
RequestBody
: corps du HTTP message de l'opération Kubernetes RESTAPI.-
Type
:JSON
ouString
-
Obligatoire : non
-
Ce qui suit inclut un Task
état qui permet eks:call
de répertorier les pods appartenant à la tâcheexample-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
}
}
}
Ce qui suit inclut un Task
état utilisé eks:call
pour supprimer la tâche example-job
et définit le propagationPolicy
pour garantir que les modules de la tâche sont également supprimés.
{
"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 pris en charge EKS APIs
Amazon EKS APIs et sa syntaxe pris en charge incluent :
-
-
Lorsqu'un EKS cluster Amazon est créé à l'aide de l'intégration du
eks:createCluster
service, le IAM rôle est ajouté à la table d'RBACautorisation Kubernetes en tant qu'administrateur (avec les autorisations system:masters). Au départ, seule cette IAM entité peut appeler le serveur KubernetesAPI. Pour plus d’informations, consultez :-
Gestion des utilisateurs ou IAM des rôles pour votre cluster dans le guide de EKS l'utilisateur Amazon
-
La Autorisations section
Amazon EKS utilise des rôles liés aux services qui contiennent les autorisations dont Amazon a EKS besoin pour appeler d'autres services en votre nom. Si ces rôles liés à un service n'existent pas déjà dans votre compte, vous devez ajouter l'
iam:CreateServiceLinkedRole
autorisation au IAM rôle utilisé par Step Functions. Pour plus d'informations, consultez la section Utilisation des rôles liés à un service dans le guide de EKSl'utilisateur Amazon.Le IAM rôle utilisé par Step Functions doit disposer
iam:PassRole
des autorisations nécessaires pour transmettre le IAM rôle de cluster à AmazonEKS. Pour plus d'informations, consultez le IAMrôle EKS du cluster Amazon dans le guide de EKS l'utilisateur Amazon. -
-
-
Vous devez supprimer tous les profils Fargate ou groupes de nœuds avant de supprimer un cluster.
-
-
Amazon EKS utilise des rôles liés aux services qui contiennent les autorisations dont Amazon a EKS besoin pour appeler d'autres services en votre nom. Si ces rôles liés à un service n'existent pas déjà dans votre compte, vous devez ajouter l'
iam:CreateServiceLinkedRole
autorisation au IAM rôle utilisé par Step Functions. Pour plus d'informations, consultez la section Utilisation des rôles liés à un service dans le guide de EKSl'utilisateur Amazon.Amazon EKS on Fargate n'est peut-être pas disponible dans toutes les régions. Pour plus d'informations sur la disponibilité par région, consultez la section sur Fargate dans le guide de l'utilisateur Amazon EKS.
Le IAM rôle utilisé par Step Functions doit être
iam:PassRole
autorisé à transmettre le IAM rôle d'exécution du pod à AmazonEKS. Pour plus d'informations, consultez la section Rôle d'exécution du Pod dans le guide de EKS l'utilisateur Amazon.
-
-
Amazon EKS utilise des rôles liés aux services qui contiennent les autorisations dont Amazon a EKS besoin pour appeler d'autres services en votre nom. Si ces rôles liés à un service n'existent pas déjà dans votre compte, vous devez ajouter l'
iam:CreateServiceLinkedRole
autorisation au IAM rôle utilisé par Step Functions. Pour plus d'informations, consultez la section Utilisation des rôles liés à un service dans le guide de EKSl'utilisateur Amazon.Le IAM rôle utilisé par Step Functions doit être
iam:PassRole
autorisé à transmettre le IAM rôle de nœud à AmazonEKS. Pour plus d'informations, consultez la section Utilisation des rôles liés à un service dans le guide de EKSl'utilisateur Amazon.
Ce qui suit inclut un Task
qui crée un EKS cluster Amazon.
{
"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
}
}
}
Ce qui suit inclut un Task
état qui supprime un EKS cluster Amazon.
{
"StartAt": "DeleteCluster.sync",
"States": {
"DeleteCluster.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteCluster.sync",
"Parameters": {
"Name": "MyCluster"
},
"End": true
}
}
}
Ce qui suit inclut un Task
état qui crée un profil 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
}
}
}
Ce qui suit inclut un Task
état qui supprime un profil Fargate.
{
"StartAt": "DeleteFargateProfile.sync",
"States": {
"DeleteFargateProfile.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteFargateProfile.sync",
"Parameters": {
"ClusterName": "MyCluster",
"FargateProfileName": "MyFargateProfile"
},
"End": true
}
}
}
Ce qui suit inclut un Task
état qui crée un groupe de nœuds.
{
"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
}
}
}
Ce qui suit inclut un Task
état qui supprime un groupe de nœuds.
{
"StartAt": "DeleteNodegroup.sync",
"States": {
"DeleteNodegroup.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
"Parameters": {
"ClusterName": "MyCluster",
"NodegroupName": "MyNodegroup"
},
"End": true
}
}
}
Autorisations
Lorsqu'un EKS cluster Amazon est créé à l'aide de l'intégration du eks:createCluster
service, le IAM rôle est ajouté à la table d'RBACautorisation Kubernetes en tant qu'administrateur, avec des autorisations. system:masters
Au départ, seule cette IAM entité peut appeler le serveur KubernetesAPI. Par exemple, vous ne pourrez pas utiliser kubectl pour interagir avec votre API serveur Kubernetes, sauf si vous assumez le même rôle que votre machine d'état Step Functions ou si vous configurez Kubernetes pour accorder des autorisations à des entités supplémentaires. IAM Pour plus d'informations, consultez la section Gestion des utilisateurs ou IAM des rôles pour votre cluster dans le Guide de EKS l'utilisateur Amazon.
Vous pouvez ajouter des autorisations pour des IAM entités supplémentaires, telles que des utilisateurs ou des rôles, en les ajoutant à l'espace de aws-auth
ConfigMap
noms du système kube. Si vous créez votre cluster à partir de Step Functions, utilisez l'intégration eks:call
de services.
Ce qui suit inclut un Task
état qui crée un aws-auth
ConfigMap
et accorde system:masters
l'autorisation à l'utilisateur arn:aws:iam::123456789012:user/my-user
et au IAM rôlearn: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
}
}
Note
Vous pouvez voir le nom ARN d'un IAM rôle affiché dans un format incluant le chemin /service-role/, tel que. arn:aws:iam::123456789012:role/
Ce jeton de chemin de rôle de service ne doit pas être inclus lors de la liste du rôle dans. service-role
/my-roleaws-auth
Lorsque votre cluster est créé pour la aws-auth
ConfigMap
première fois, il n'existera pas, mais sera ajouté automatiquement si vous créez un profil Fargate. Vous pouvez récupérer la valeur actuelle deaws-auth
, ajouter les autorisations supplémentaires et créer PUT
une nouvelle version. Il est généralement plus facile de le créer aws-auth
avant le profil Fargate.
Si votre cluster a été créé en dehors de Step Functions, vous pouvez configurer kubectl pour communiquer avec votre serveur API Kubernetes. Créez ensuite une nouvelle aws-auth
ConfigMap
utilisation kubectl apply -f aws-auth.yaml
ou modifiez-en une qui existe déjà à l'aide dekubectl edit -n kube-system configmap/aws-auth
. Pour plus d’informations, consultez :
-
Créez un kubeconfig pour Amazon EKS dans le guide de EKSl'utilisateur Amazon.
-
Gestion des utilisateurs ou IAM des rôles pour votre cluster dans le guide de EKS l'utilisateur Amazon.
Si votre IAM rôle ne dispose pas d'autorisations suffisantes dans Kubernetes, les intégrations eks:call
ou les eks:runJob
services échoueront avec l'erreur suivante :
Error:
EKS.401
Cause:
{
"ResponseBody": {
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
},
"StatusCode": 401,
"StatusText": "Unauthorized"
}
IAMpolitiques relatives aux appels d'Amazon EKS
Les exemples de modèles suivants montrent comment AWS Step Functions génère IAM des politiques basées sur les ressources contenues dans la définition de votre machine à états. Pour plus d’informations, consultez Comment Step Functions génère IAM des politiques pour les services intégrés et Découvrez les modèles d'intégration des services dans Step Functions.
CreateCluster
Ressources
{
"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: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
Ressources
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeSubnets",
"eks:CreateNodegroup"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"eks:DescribeNodegroup",
"eks:DeleteNodegroup"
],
"Resource": "arn:aws:eks:sa-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
Ressources
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DeleteCluster",
"eks:DescribeCluster"
],
"Resource": [
"arn:aws:eks:sa-east-1:444455556666:cluster/ExampleCluster"
]
}
]
}
DeleteNodegroup
Ressources
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DeleteNodegroup",
"eks:DescribeNodegroup"
],
"Resource": [
"arn:aws:eks:sa-east-1:444455556666:nodegroup/ExampleCluster/ExampleNodegroup/*"
]
}
]
}
Pour plus d'informations sur l'utilisation d'Amazon EKS avec Step Functions, consultezCréez et gérez des EKS clusters Amazon avec Step Functions.