

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Creación y administración de clústeres de Amazon EKS con Step Functions
<a name="connect-eks"></a>

Aprenda a integrar Step Functions con Amazon EKS para administrar los clústeres de Kubernetes. Step Functions ofrece dos tipos de integración de servicios APIs para la integración con Amazon Elastic Kubernetes Service. Una le permite usar Amazon EKS APIs para crear y administrar un clúster de Amazon EKS. El otro le permite interactuar con el clúster mediante la API de Kubernetes y ejecutar trabajos como parte del flujo de trabajo de la aplicación.

 Puede utilizar las integraciones de la API de Kubernetes con los clústeres de Amazon EKS creados con Step Functions, con los clústeres de Amazon EKS creados con la herramienta **eksctl** o la consola de [Amazon EKS](https://console.aws.amazon.com/eks/home), o métodos similares. Para obtener más información, consulte [Creación de un clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) en la Guía del usuario de Amazon EKS.

Para obtener más información sobre la integración con AWS los servicios de Step Functions, consulte [Integración de los servicios de ](integrate-services.md) y[Cómo pasar parámetros a una API de servicio en Step Functions](connect-parameters.md).

**Características principales de la integración optimizada de Amazon EKS**  
Se admite el patrón de integración [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync).
No hay optimizaciones específicas para el patrón de integración [Respuesta de la solicitud](connect-to-resource.md#connect-default).
No se admite el patrón de integración [Cómo esperar una devolución de llamada con el token de tarea](connect-to-resource.md#connect-wait-token).

**nota**  
La integración EKS de Step Functions solo es compatible con Kubernetes APIs con acceso a puntos finales públicos. De forma predeterminada, los puntos de conexión del servidor API de los clústeres EKS tienen acceso público. Para obtener más información, consulte [Control de acceso al punto de conexión del clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html) en la **Guía del usuario de Amazon EKS**.

Step Functions no finaliza automáticamente un clúster de Amazon EKS si se detiene la ejecución. Si su máquina de estado se detiene antes de que su clúster de Amazon EKS finalice, es posible que el clúster siga ejecutándose indefinidamente y que se acumulen cargos adicionales. Para evitarlo, asegúrese de que cualquier clúster de Amazon EKS que cree finalice correctamente. Para obtener más información, consulte lo siguiente:
+ [Eliminación de un clúster](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) en la Guía del usuario de Amazon EKS.
+ [Ejecutar un trabajo (.sync)](connect-to-resource.md#connect-sync) en patrones de integración de servicios

**Cuota para datos de entrada o de resultados**  
Al enviar o recibir datos entre servicios, la entrada o resultado máximo de una tarea es de 256 KiB de datos como cadena codificada en UTF-8. Consulte [Cuotas relacionadas con ejecuciones de máquinas de estado](service-quotas.md#service-limits-state-machine-executions).

## Integraciones de API de Kubernetes
<a name="connect-eks-kubernetes-apis"></a>

Step Functions es compatible con los siguientes Kubernetes APIs:

### RunJob
<a name="connect-eks-kubernetes-apis-runjob"></a>

La integración del servicio `eks:runJob` le permite ejecutar un trabajo en el clúster de Amazon EKS. Con la variante `eks:runJob.sync`, puede esperar a que se complete el trabajo y, opcionalmente, recuperar los registros.

El servidor de la API de Kubernetes debe conceder permisos al rol de IAM que utiliza la máquina de estado. Para obtener más información, consulte [Permisos](#connect-eks-permissions).

Para el patrón **Ejecutar un trabajo** (`.sync`), el estado del trabajo se determina mediante un sondeo. Step Functions sondea inicialmente a una velocidad de aproximadamente 1 sondeo por minuto. Con el tiempo, esta velocidad se reduce a aproximadamente 1 encuesta cada 5 minutos. Si necesita sondeos más frecuentes o necesita tener más control sobre la estrategia de sondeo, puede utilizar la integración `eks:call` para consultar el estado del trabajo.

La integración`eks:runJob` es específica de los trabajos de Kubernetes `batch/v1`. Para obtener más información, consulte [Trabajos](https://kubernetes.io/docs/concepts/workloads/controllers/job/) en la documentación de Kubernetes. Si quiere gestionar otros recursos de Kubernetes, incluidos los recursos personalizados, utilice la integración del servicio `eks:call`. Puede usar Step Functions para crear bucles de sondeo, como se ilustra en el proyecto de muestra [Sondeo del estado de trabajos utilizando Lambda y AWS Batch](sample-project-job-poller.md). 

Entre los parámetros admitidos se incluyen:
+ `ClusterName`: el nombre del clúster de Amazon EKS al que desea llamar.
  + `Type`: `String`
  + Obligatorio: sí
+ `CertificateAuthority`: los datos de certificados codificados en Base64 necesarios para comunicarse con el clúster. Puede obtener este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html)API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Endpoint`: el punto de conexión del servidor de la API de Kubernetes. Puede obtener este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html)API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Namespace`: el espacio de nombres en el que se ejecutará el trabajo. Si no se proporciona, se utiliza el espacio de nombres `default`.
  + `Type`: `String`
  + Obligatorio: no
+ `Job`: la definición del trabajo de Kubernetes. Consulte [Trabajos](https://kubernetes.io/docs/concepts/workloads/controllers/job/) en la documentación de Kubernetes. 
  + `Type`: `JSON` o `String`
  + Obligatorio: sí
+ `LogOptions`: un conjunto de opciones para controlar la recuperación opcional de registros. Solo se aplica si se utiliza el patrón de integración del servicio Ejecutar un trabajo (.sync) para esperar a que finalice el trabajo.
  + `Type`: `JSON`
  + Obligatorio: no
  + Los registros se incluyen en la respuesta, debajo de la clave `logs`. Es posible que haya varios pods en la tarea, cada uno con varios contenedores.

    ```
    { 
      ...
      "logs": { 
        "pods": { 
          "pod1": { 
            "containers": { 
              "container1": { 
                "log": {{<log> }}
              },
              ...
            }
          },
          ...
        }
      }
    ```
  + La recuperación de registros se realiza en la medida de lo posible. Si se produce un error al recuperar un registro, en lugar del campo `log` aparecerán los campos `error` y `cause`.
+ `LogOptions.RetrieveLogs`: habilite la recuperación del registro una vez finalizado el trabajo. De forma predeterminada, los registros no se recuperan.
  + `Type`: `Boolean`
  + Obligatorio: no
+ `LogOptions.RawLogs`: si `RawLogs` se establece en true, los registros se devolverán como cadenas brutas sin intentar analizarlos para convertirlos en JSON. De forma predeterminada, los registros se deserializan en JSON si es posible. En algunos casos, este análisis puede introducir cambios no deseados, como limitar la precisión de los números que contienen muchos dígitos.
  + `Type`: `Boolean`
  + Obligatorio: no
+ `LogOptions.LogParameters`: la API Leer registro de Kubernetes admite parámetros de consulta para controlar la recuperación de registros. Por ejemplo, puede usar `tailLines` o `limitBytes` para limitar el tamaño de los registros recuperados y permanecer dentro de la cuota de tamaño de datos de Step Functions. Para obtener más información, consulte sección [Leer registro](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#read-log-pod-v1-core) de la referencia de la API de Kubernetes.
  + `Type: `Mapa de `String` a `List of Strings`
  + Obligatorio: no
  + Ejemplo:

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

En el siguiente ejemplo se incluye un estado `Task` que ejecuta un trabajo, espera a que se complete y, posteriormente, recupera los registros del trabajo:

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

La integración del servicio `eks:call` le permite usar la API de Kubernetes para leer y escribir objetos de recursos de Kubernetes a través de un punto de conexión de la API de Kubernetes. 

El servidor de la API de Kubernetes debe conceder permisos al rol de IAM que utiliza la máquina de estado. Para obtener más información, consulte [Permisos](#connect-eks-permissions).

Para obtener más información sobre estas operaciones disponibles, consulte la [Referencia de la API de Kubernetes](https://kubernetes.io/docs/reference/kubernetes-api/).

Entre los parámetros admitidos para `Call` se incluyen:
+ `ClusterName`: el nombre del clúster de Amazon EKS al que desea llamar.
  + `Type`: cadena
  + Obligatorio: sí
+ `CertificateAuthority`: los datos de certificados codificados en Base64 necesarios para comunicarse con el clúster. Puede obtener este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la [DescribeCluster](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeCluster.html)API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Endpoint`: el punto de conexión del servidor de la API de Kubernetes. Puede encontrar este valor en la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home) o mediante la DescribeCluster API de Amazon EKS.
  + `Type`: `String`
  + Obligatorio: sí
+ `Method`: el método HTTP de su solicitud. Puede ser uno de los siguientes: `GET`, `POST`, `PUT`, `DELETE`, `HEAD` o `PATCH`.
  + `Type`: `String`
  + Obligatorio: sí
+ `Path`: la ruta HTTP de la operación de la API de REST de Kubernetes.
  + `Type`: `String`
  + Obligatorio: sí
+ `QueryParameters`: los parámetros de consulta HTTP de la operación de la API de REST de Kubernetes.
  + `Type: `Mapa de `String` a `List of Strings`
  + Obligatorio: no
  + Ejemplo:

    ```
    "QueryParameters": {
      "labelSelector": [ "job-name=example-job" ]
    }
    ```
+ `RequestBody`: el cuerpo del mensaje HTTP de la operación de la API de REST de Kubernetes.
  + `Type`: `JSON` o `String`
  + Obligatorio: no

El ejemplo siguiente incluye un estado `Task` que utiliza `eks:call` para enumerar los pods que pertenecen al trabajo `example-job`.

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

El ejemplo siguiente incluye un estado `Task` que utiliza `eks:call` para eliminar el trabajo `example-job` y establece la `propagationPolicy` para garantizar que también se eliminan los pods del trabajo.

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

Amazon EKS APIs y la sintaxis compatibles incluyen:
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateCluster.html#API_CreateCluster_ResponseSyntax) 

    Cuando se crea un clúster de Amazon EKS mediante la integración del servicio `eks:createCluster`, el rol de IAM se añade a la tabla de autorización de RBAC de Kubernetes como administrador (con permisos system:masters). Inicialmente, solo esa entidad de IAM puede realizar llamadas al servidor de la API de Kubernetes. Para obtener más información, consulte lo siguiente:
    + [Administración de usuarios o roles de IAM para su clúster](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) en la *Guía del usuario de Amazon EKS*. 
    + La sección [Permisos](#connect-eks-permissions) 

    Amazon EKS utiliza roles vinculados a un servicio que contienen los permisos que Amazon EKS necesita para llamar a otros servicios en su nombre. Si estos roles vinculados a servicios aún no existen en su cuenta, debe añadir el permiso `iam:CreateServiceLinkedRole` al rol de IAM que utiliza Step Functions. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html) en la *Guía del usuario de Amazon EKS*.

    El rol de IAM utilizado por Step Functions debe tener permisos `iam:PassRole` para transferir el rol de IAM del clúster a Amazon EKS. Para obtener más información, consulte [Rol de IAM de clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/service_IAM_role.html) en la *Guía del usuario de Amazon EKS*. 
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteCluster.html#API_DeleteCluster_ResponseSyntax) 

    Debe eliminar todos los perfiles o grupos de nodos de Fargate antes de eliminar un clúster.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateFargateProfile.html#API_CreateFargateProfile_ResponseSyntax) 

    Amazon EKS utiliza roles vinculados a un servicio que contienen los permisos que Amazon EKS necesita para llamar a otros servicios en su nombre. Si estos roles vinculados a servicios aún no existen en su cuenta, debe añadir el permiso `iam:CreateServiceLinkedRole` al rol de IAM que utiliza Step Functions. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html) en la *Guía del usuario de Amazon EKS*.

    Es posible que Amazon EKS o Fargate no estén disponibles en todas las regiones. Para obtener información sobre la disponibilidad de la región, consulte la sección sobre [Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) en la *Guía del usuario de Amazon EKS*.

    El rol de IAM utilizado por Step Functions debe tener permisos `iam:PassRole` para transferir el rol de IAM de la ejecución de pods a Amazon EKS. Para obtener más información, consulte [Rol de ejecución de pod](https://docs.aws.amazon.com/eks/latest/userguide/pod-execution-role.html) en la *guía del usuario de Amazon EKS*. 
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteFargateProfile.html#API_DeleteFargateProfile_RequestSyntax) 
  +  [Sintaxis de la respuesta](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)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_CreateNodegroup.html#API_CreateNodegroup_ResponseSyntax) 

    Amazon EKS utiliza roles vinculados a un servicio que contienen los permisos que Amazon EKS necesita para llamar a otros servicios en su nombre. Si estos roles vinculados a servicios aún no existen en su cuenta, debe añadir el permiso `iam:CreateServiceLinkedRole` al rol de IAM que utiliza Step Functions. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/using-service-linked-roles.html) en la *Guía del usuario de Amazon EKS*. 

    El rol de IAM utilizado por Step Functions debe tener permisos `iam:PassRole` para transferir el rol de IAM del nodo a Amazon EKS. Para obtener más información, consulte [Uso de roles vinculados a servicios](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) en la *Guía del usuario de Amazon EKS*.
+ [https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html)
  +  [Sintaxis de la solicitud](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_RequestSyntax) 
  +  [Sintaxis de la respuesta](https://docs.aws.amazon.com/eks/latest/APIReference/API_DeleteNodegroup.html#API_DeleteNodegroup_ResponseSyntax) 

El ejemplo siguiente incluye una `Task` que crea un clúster de Amazon EKS.

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

El ejemplo siguiente incluye un estado `Task` que elimina un clúster de Amazon EKS.

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

El ejemplo siguiente incluye un estado `Task` que crea un perfil de Fargate.

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

El ejemplo siguiente incluye un estado `Task` que elimina un perfil de Fargate.

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

El ejemplo siguiente incluye un estado `Task` que crea un grupo de nodos.

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

El ejemplo siguiente incluye un estado `Task` que elimina un grupo de nodos.

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

## Permisos
<a name="connect-eks-permissions"></a>

Cuando se crea un clúster de Amazon EKS mediante la integración del servicio `eks:createCluster`, el rol de IAM se añade a la tabla de autorización de RBAC de Kubernetes como administrador, con permisos `system:masters`. Inicialmente, solo esa entidad de IAM puede realizar llamadas al servidor de la API de Kubernetes. Por ejemplo, no se podrá usar **kubectl** para interactuar con el servidor de API de Kubernetes, a menos que se asuma el mismo rol que su máquina de estado de Step Functions o si configura Kubernetes para conceder permisos a entidades de IAM adicionales. Para obtener más información, consulte [Administración de usuarios o roles de IAM para su clúster](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) en la *Guía del usuario de Amazon EKS*. 

Puede añadir permisos para entidades de IAM adicionales, como usuarios o roles, añadiéndolas al `aws-auth` `ConfigMap` en el espacio de nombres kube-system. Si va a crear el clúster a partir de Step Functions, utilice la integración del servicio `eks:call`. 

El ejemplo siguiente incluye un estado `Task` que crea un `aws-auth` `ConfigMap` y otorga un permiso `system:masters` al usuario `arn:aws:iam::{{account-id}}:user/my-user` y al rol de IAM `arn:aws:iam::{{account-id}}:role/my-role`.

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

**nota**  
Puede que se vea el ARN de un rol de IAM en un formato que incluya la ruta **/service-role/**, como `arn:aws:iam::{{account-id}}:role/{{service-role}}/my-role`. Este token de ruta **service-role** no debe incluirse al enumerar el rol en `aws-auth`.

Cuando el clúster se crea por primera vez, `aws-auth` `ConfigMap` no existirá, sino que se agregará automáticamente si crea un perfil de Fargate. Puede recuperar el valor actual de `aws-auth`, añadir los permisos adicionales y `PUT` una nueva versión. Por lo general, es más sencillo crear `aws-auth` antes que el perfil de Fargate.

Si el clúster se creó fuera de Step Functions, puede configurar **kubectl** para que se comunique con su servidor de API de Kubernetes. A continuación, se crea un nuevo `aws-auth` `ConfigMap` mediante `kubectl apply -f aws-auth.yaml` o se edita uno que ya exista mediante `kubectl edit -n kube-system configmap/aws-auth`. Para obtener más información, consulte lo siguiente:
+  [Crear un kubeconfig para Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) en la *Guía del usuario de Amazon EKS*. 
+  [Administración de usuarios o roles de IAM para su clúster](https://docs.aws.amazon.com/eks/latest/userguide/add-user-role.html) en la *Guía del usuario de Amazon EKS*. 

Si el rol de IAM no tiene permisos suficientes en Kubernetes, las integraciones de servicios `eks:call` o `eks:runJob` generarán el siguiente error:

```
Error:
EKS.401

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

## Políticas de IAM para llamar a Amazon EKS
<a name="eks-iam"></a>

Las siguientes plantillas de ejemplo muestran cómo se AWS Step Functions generan las políticas de IAM en función de los recursos de la definición de su máquina de estados. Para obtener más información, consulte [Generación de políticas de IAM para servicios integrados por Steps Functions](service-integration-iam-templates.md) y [Descubrimiento de los patrones de integración de servicios en Step Functions](connect-to-resource.md).

### `CreateCluster`
<a name="eks-iam-createcluster"></a>

*Recursos*

****  

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

*Recursos*

****  

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

*Recursos*

****  

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

*Recursos*

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "eks:DeleteNodegroup",
                "eks:DescribeNodegroup"
            ],
            "Resource": [
                "arn:aws:eks:us-east-1:444455556666:nodegroup/ExampleCluster/ExampleNodegroup/*"
            ]
        }
    ]
}
```

Para obtener más información sobre cómo usar Amazon EKS con Step Functions, consulte [Creación y administración de clústeres de Amazon EKS con Step Functions](#connect-eks).