Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Chiama Amazon EKS con Step Functions
Step Functions può controllare determinati AWS servizi direttamente da Amazon States Language (ASL). Per ulteriori informazioni, consultare Uso di altri servizi e Passa i parametri a un'API di servizio.
In che modo l'integrazione ottimizzata di Amazon EKS è diversa dall'integrazione con Amazon EKS AWS SDK
-
Il modello di Esegui un processo (.sync) integrazione è supportato.
-
Non ci sono ottimizzazioni per il modello di Richiesta e risposta integrazione.
-
Il modello di Attendere un callback con il token dell’attività integrazione non è supportato.
Per informazioni su come configurare IAM le autorizzazioni quando vengono utilizzate Step Functions con altri AWS servizi, vederePolitiche IAM per servizi integrati.
Step Functions fornisce due tipi di API di integrazione dei servizi per l'integrazione con Amazon Elastic Kubernetes Service. One ti consente di utilizzare le API di Amazon EKS per creare e gestire un cluster Amazon EKS. L'altro ti consente di interagire con il cluster utilizzando l'API Kubernetes ed eseguire lavori come parte del flusso di lavoro dell'applicazione. Puoi utilizzare le integrazioni API Kubernetes con i cluster Amazon EKS creati con Step Functions, con i cluster Amazon EKS creati dallo strumento eksctl o dalla console Amazon
Nota
L'integrazione Step Functions EKS supporta solo le API Kubernetes con accesso pubblico agli endpoint. Per impostazione predefinita, gli endpoint del server API dei cluster EKS hanno accesso pubblico. Per ulteriori informazioni, consulta Amazon EKS Cluster Endpoint Access Control nella Amazon EKS User Guide.
Step Functions non termina automaticamente un cluster Amazon EKS se l'esecuzione viene interrotta. Se la tua macchina a stati si arresta prima che il cluster Amazon EKS sia terminato, il cluster potrebbe continuare a funzionare a tempo indeterminato e potrebbe comportare costi aggiuntivi. Per evitare ciò, assicurati che tutti i cluster Amazon EKS che crei siano terminati correttamente. Per ulteriori informazioni, consultare:
-
Eliminazione di un cluster nella Amazon EKS User Guide.
-
Esegui un processo (.sync)in Modelli di integrazione dei servizi.
Nota
Esiste una quota per la dimensione massima dei dati di input o risultato per un'attività in Step Functions. Ciò limita a 256 KB di dati come stringa con codifica UTF-8 quando si inviano o si ricevono dati da un altro servizio. Per informazioni, consulta Quote relative alle esecuzioni di macchine a stati.
Integrazioni API Kubernetes
Step Functions supporta le seguenti API Kubernetes:
RunJob
L'integrazione del eks:runJob
servizio ti consente di eseguire un job sul tuo cluster Amazon EKS. La eks:runJob.sync
variante consente di attendere il completamento del processo e, facoltativamente, di recuperare i log.
Il tuo server API Kubernetes deve concedere le autorizzazioni per il ruolo IAM utilizzato dalla tua macchina a stati. Per ulteriori informazioni, consulta Autorizzazioni.
Per il pattern Run a Job (.sync
), lo stato del lavoro è determinato dal polling. Step Functions effettua inizialmente sondaggi a una velocità di circa 1 sondaggio al minuto. Questa frequenza alla fine rallenta a circa 1 sondaggio ogni 5 minuti. Se hai bisogno di sondaggi più frequenti o hai bisogno di un maggiore controllo sulla strategia di polling, puoi utilizzare l'eks:call
integrazione per interrogare lo stato del lavoro.
L'eks:runJob
integrazione è specifica per batch/v1
Kubernetes Jobs. Per ulteriori informazioni, consulta Jobseks:call
È possibile utilizzare Step Functions per creare cicli di polling, come dimostrato nel progetto di Sondaggio per Job Status ( AWS Batch Lambda,) esempio.
I parametri supportati includono:
-
ClusterName
: il nome del cluster Amazon EKS che desideri chiamare.-
Type
:String
-
Obbligatorio: sì
-
-
CertificateAuthority
: I dati del certificato con codifica Base64 necessari per comunicare con il cluster. Puoi ottenere questo valore dalla console Amazon EKSo utilizzando l'DescribeClusterAPI Amazon EKS. -
Type
:String
-
Obbligatorio: sì
-
-
Endpoint
: L'URL dell'endpoint per il tuo server API Kubernetes. Puoi ottenere questo valore dalla console Amazon EKSo utilizzando l'DescribeClusterAPI Amazon EKS. -
Type
:String
-
Obbligatorio: sì
-
-
Namespace
: lo spazio dei nomi in cui eseguire il processo. Se non viene fornito, viene utilizzato lo spazio dei nomidefault
.-
Type
:String
-
Obbligatorio: no
-
-
Job
: La definizione di Kubernetes Job. Vedi Jobs nella documentazione diKubernetes. -
Type
:JSON
oString
-
Obbligatorio: sì
-
-
LogOptions
: Un insieme di opzioni per controllare il recupero opzionale dei log. Applicabile solo se si utilizza il modello di integrazione del servizio Run a Job (.sync) per attendere il completamento del processo.-
Type
:JSON
-
Obbligatorio: no
-
I log sono inclusi nella risposta sotto la chiave.
logs
All'interno del job possono essere presenti più pod, ciascuno con più contenitori.{ ... "logs": { "pods": { "pod1": { "containers": { "container1": { "log":
<log>
}, ... } }, ... } } -
Il recupero dei log viene eseguito con la massima diligenza possibile. Se si verifica un errore durante il recupero di un registro, al posto del
log
campo ci saranno i campi e.error
cause
-
-
LogOptions.RetrieveLogs
: Abilita il recupero dei log dopo il completamento del processo. Per impostazione predefinita, i log non vengono recuperati.-
Type
:Boolean
-
Obbligatorio: no
-
-
LogOptions.RawLogs
: SeRawLogs
è impostato su true, i log verranno restituiti come stringhe non elaborate senza tentare di analizzarli in JSON. Per impostazione predefinita, i log vengono deserializzati in JSON, se possibile. In alcuni casi tale analisi può introdurre modifiche indesiderate, come la limitazione della precisione dei numeri contenenti molte cifre.-
Type
:Boolean
-
Obbligatorio: no
-
-
LogOptions.LogParameters
: L'API Read Log dell'API Kubernetes supporta i parametri di query per controllare il recupero dei log. Ad esempio, è possibile utilizzaretailLines
olimitBytes
limitare la dimensione dei log recuperati e rimanere entro la quota di dimensione dei dati di Step Functions. Per ulteriori informazioni, consulta la sezione Read Logdel Kubernetes API Reference. -
Type:
Mappa diString
List of Strings
-
Obbligatorio: no
-
Esempio:
"LogParameters": { "tailLines": [ "6" ] }
-
L'esempio seguente include uno Task
stato che esegue un processo, attende il suo completamento, quindi recupera i log del processo:
{
"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'integrazione dei eks:call
servizi consente di utilizzare l'API Kubernetes per leggere e scrivere oggetti di risorse Kubernetes tramite un endpoint dell'API Kubernetes.
Il tuo server API Kubernetes deve concedere le autorizzazioni per il ruolo IAM utilizzato dalla tua macchina a stati. Per ulteriori informazioni, consulta Autorizzazioni.
Per ulteriori informazioni sulle operazioni disponibili, consulta il Kubernetes API Reference.
I parametri supportati includono: Call
-
ClusterName
: il nome del cluster Amazon EKS che desideri chiamare.-
Type
: Stringa -
Campo obbligatorio: sì
-
-
CertificateAuthority
: I dati del certificato con codifica Base64 necessari per comunicare con il cluster. Puoi ottenere questo valore dalla console Amazon EKSo utilizzando l'DescribeClusterAPI Amazon EKS. -
Type
:String
-
Campo obbligatorio: sì
-
-
Endpoint
: L'URL dell'endpoint per il tuo server API Kubernetes. Puoi trovare questo valore sulla console Amazon EKSo utilizzando l' DescribeCluster API di Amazon EKS. -
Type
:String
-
Campo obbligatorio: sì
-
-
Method
: il metodo HTTP della tua richiesta. Uno tra:GET
,POST
,PUT
,DELETE
,HEAD
, oPATCH
.-
Type
:String
-
Campo obbligatorio: sì
-
-
Path
: Il percorso HTTP dell'operazione dell'API REST di Kubernetes.-
Type
:String
-
Campo obbligatorio: sì
-
-
QueryParameters
: i parametri di query HTTP dell'operazione dell'API REST di Kubernetes.-
Type:
Mappa diString
List of Strings
-
Campo obbligatorio: no
-
Esempio:
"QueryParameters": { "labelSelector": [ "job-name=example-job" ] }
-
-
RequestBody
: il corpo del messaggio HTTP dell'operazione dell'API REST di Kubernetes.-
Type
:JSON
oString
-
Campo obbligatorio: no
-
Quanto segue include uno Task
stato che utilizza eks:call
per elencare i pod appartenenti al lavoro. 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
}
}
}
Quanto segue include uno Task
stato che utilizza eks:call
per eliminare il lavoro example-job
e lo imposta propagationPolicy
per garantire che vengano eliminati anche i pod del lavoro.
{
"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
}
}
}
API Amazon EKS supportate
Le API e la sintassi di Amazon EKS supportate includono:
-
-
Quando un cluster Amazon EKS viene creato utilizzando l'integrazione del
eks:createCluster
servizio, il ruolo IAM viene aggiunto alla tabella di autorizzazione RBAC di Kubernetes come amministratore (con autorizzazioni system:masters). Inizialmente, solo quell'entità IAM può effettuare chiamate al server API Kubernetes. Per ulteriori informazioni, consultare:-
Gestione degli utenti o dei ruoli IAM per il tuo cluster nella Amazon EKS User Guide
-
La Autorizzazioni sezione
Amazon EKS utilizza ruoli collegati ai servizi che contengono le autorizzazioni richieste da Amazon EKS per chiamare altri servizi per tuo conto. Se questi ruoli collegati ai servizi non esistono già nel tuo account, devi aggiungere l'
iam:CreateServiceLinkedRole
autorizzazione al ruolo IAM utilizzato da Step Functions. Per ulteriori informazioni, consulta Using Service-Linked Roles nella Amazon EKS User Guide.Il ruolo IAM utilizzato da Step Functions deve disporre
iam:PassRole
delle autorizzazioni per passare il ruolo IAM del cluster ad Amazon EKS. Per ulteriori informazioni, consulta il ruolo IAM del cluster Amazon EKS nella Guida per l'utente di Amazon EKS. -
-
-
È necessario eliminare qualsiasi profilo o gruppo di nodi Fargate prima di eliminare un cluster.
-
-
Amazon EKS utilizza ruoli collegati ai servizi che contengono le autorizzazioni richieste da Amazon EKS per chiamare altri servizi per tuo conto. Se questi ruoli collegati ai servizi non esistono già nel tuo account, devi aggiungere l'
iam:CreateServiceLinkedRole
autorizzazione al ruolo IAM utilizzato da Step Functions. Per ulteriori informazioni, consulta Using Service-Linked Roles nella Amazon EKS User Guide.Amazon EKS su Fargate potrebbe non essere disponibile in tutte le regioni. Per informazioni sulla disponibilità delle regioni, consulta la sezione Fargate nella Guida per l'utente di Amazon EKS.
Il ruolo IAM utilizzato da Step Functions deve disporre
iam:PassRole
delle autorizzazioni per passare il ruolo IAM di esecuzione del pod ad Amazon EKS. Per ulteriori informazioni, consulta il ruolo di esecuzione del Pod nella Guida per l'utente di Amazon EKS.
-
-
Amazon EKS utilizza ruoli collegati ai servizi che contengono le autorizzazioni richieste da Amazon EKS per chiamare altri servizi per tuo conto. Se questi ruoli collegati ai servizi non esistono già nel tuo account, devi aggiungere l'
iam:CreateServiceLinkedRole
autorizzazione al ruolo IAM utilizzato da Step Functions. Per ulteriori informazioni, consulta Using Service-Linked Roles nella Amazon EKS User Guide.Il ruolo IAM utilizzato da Step Functions deve disporre
iam:PassRole
delle autorizzazioni per passare il ruolo IAM del nodo ad Amazon EKS. Per ulteriori informazioni, consulta Using Service-Linked Roles nella Amazon EKS User Guide.
Quanto segue include un Task
che crea un cluster Amazon 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
}
}
}
Quanto segue include uno Task
stato che elimina un cluster Amazon EKS.
{
"StartAt": "DeleteCluster.sync",
"States": {
"DeleteCluster.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteCluster.sync",
"Parameters": {
"Name": "MyCluster"
},
"End": true
}
}
}
Quanto segue include uno Task
stato che crea un profilo 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
}
}
}
Quanto segue include uno Task
stato che elimina un profilo Fargate.
{
"StartAt": "DeleteFargateProfile.sync",
"States": {
"DeleteFargateProfile.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteFargateProfile.sync",
"Parameters": {
"ClusterName": "MyCluster",
"FargateProfileName": "MyFargateProfile"
},
"End": true
}
}
}
Quanto segue include uno Task
stato che crea un gruppo di nodi.
{
"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
}
}
}
Quanto segue include uno Task
stato che elimina un gruppo di nodi.
{
"StartAt": "DeleteNodegroup.sync",
"States": {
"DeleteNodegroup.sync": {
"Type": "Task",
"Resource": "arn:aws:states:::eks:deleteNodegroup.sync",
"Parameters": {
"ClusterName": "MyCluster",
"NodegroupName": "MyNodegroup"
},
"End": true
}
}
}
Autorizzazioni
Quando un cluster Amazon EKS viene creato utilizzando l'integrazione del eks:createCluster
servizio, il ruolo IAM viene aggiunto alla tabella di autorizzazione RBAC di Kubernetes come amministratore, con autorizzazioni. system:masters
Inizialmente, solo quell'entità IAM può effettuare chiamate al server API Kubernetes. Ad esempio, non sarai in grado di utilizzare kubectl per interagire con il tuo server API Kubernetes, a meno che non assumi lo stesso ruolo della tua macchina a stati Step Functions o se configuri Kubernetes per concedere autorizzazioni a entità IAM aggiuntive. Per ulteriori informazioni, consulta la sezione Gestione degli utenti o dei ruoli IAM per il tuo cluster nella Amazon EKS User Guide.
Puoi aggiungere l'autorizzazione per altre entità IAM, come utenti o ruoli, aggiungendole allo spazio dei nomi aws-auth
ConfigMap
nel sistema kube. Se stai creando il tuo cluster da Step Functions, utilizza l'integrazione del eks:call
servizio.
Quanto segue include uno Task
stato che crea aws-auth
ConfigMap
e concede l'system:masters
autorizzazione all'utente arn:aws:iam::123456789012:user/my-user
e al ruolo arn:aws:iam::123456789012:role/my-role
IAM.
{
"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
}
}
Nota
Potresti vedere l'ARN per un ruolo IAM visualizzato in un formato che include il percorso /service-role/, ad esempio. arn:aws:iam::123456789012:role/
Questo token del percorso del ruolo di servizio non deve essere incluso nell'elenco del ruolo in. service-role
/my-roleaws-auth
Quando il cluster viene creato per la prima volta, non aws-auth
ConfigMap
esisterà, ma verrà aggiunto automaticamente se si crea un profilo Fargate. È possibile recuperare il valore corrente diaws-auth
, aggiungere le autorizzazioni aggiuntive e PUT
una nuova versione. Di solito è più facile da creare aws-auth
prima del profilo Fargate.
Se il tuo cluster è stato creato al di fuori di Step Functions, puoi configurare kubectl per comunicare con il tuo server API Kubernetes. Quindi, creane un nuovo aws-auth
ConfigMap
utilizzo kubectl apply -f aws-auth.yaml
o modificane uno già esistente utilizzando. kubectl edit -n kube-system configmap/aws-auth
Per ulteriori informazioni, consultare:
-
Crea un kubeconfig per Amazon EKS nella Amazon EKS User Guide.
-
Gestione degli utenti o dei ruoli IAM per il tuo cluster nella Amazon EKS User Guide.
Se il tuo ruolo IAM non dispone di autorizzazioni sufficienti in Kubernetes, le integrazioni eks:call
o di eks:runJob
servizio falliranno con il seguente errore:
Error:
EKS.401
Cause:
{
"ResponseBody": {
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "Unauthorized",
"reason": "Unauthorized",
"code": 401
},
"StatusCode": 401,
"StatusText": "Unauthorized"
}