

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.

# Tutorial: Implemente en Amazon EKS con CodePipeline
<a name="tutorials-eks-deploy"></a>

Este tutorial le ayuda a crear una acción de implementación CodePipeline que despliegue el código en un clúster que haya configurado en Amazon EKS.

La acción de EKS admite clústeres de EKS públicos y privados. Los clústeres privados son el tipo recomendado por EKS, pero se admiten ambos.

**nota**  
Como parte de la creación de una canalización en la consola, CodePipeline para los artefactos se utilizará un depósito de artefactos de S3. (Es diferente del bucket que se usa para una acción de origen de S3). Si el depósito de artefactos de S3 está en una cuenta diferente a la de tu canalización, asegúrate de que el depósito de artefactos de S3 pertenezca a una Cuentas de AWS persona segura y fiable.

**nota**  
Esta acción utiliza la CodeBuild informática CodePipeline gestionada para ejecutar comandos en un entorno de compilación. Si ejecuta la acción de Comandos, se le cobrarán cargos por separado en AWS CodeBuild.

**nota**  
La acción de implementación de `EKS` solo está disponible para canalizaciones de tipo V2.

## Requisitos previos
<a name="tutorials-eks-deploy-prereqs"></a>

Para poder usar este tutorial para crear su propia canalización de implementación continua debe tener instalados algunos recursos. Esto es lo que necesita para empezar:

**nota**  
Todos estos recursos deben crearse en la misma AWS región.
+ Un repositorio de control de código fuente (se utiliza en este tutorial GitHub) donde agregará un `deployment.yaml` archivo de muestra.
+ Debe usar un rol de CodePipeline servicio existente que actualizará con los permisos para esta acción que [Paso 3: Actualiza la política de roles de CodePipeline servicio en IAM](#tutorials-eks-deploy-role) se indican a continuación. Los permisos necesarios dependen del tipo de clúster que cree. Para obtener más información, consulte [Permisos para las políticas de roles de servicio](action-reference-EKS.md#action-reference-EKS-service-role).
+ Una imagen funcional y una etiqueta de repositorio que haya insertado en ECR o en su repositorio de imágenes.

Una vez satisfechos estos requisitos previos, puede continuar con el tutorial y crear su canalización de implementación continua.

## Paso 1: creación de un clúster en Amazon EKS (opcional)
<a name="tutorials-eks-deploy-cluster"></a>

Si lo desea, puede crear un clúster de EKS con un punto de conexión público o privado. 

En los siguientes pasos, se crea un clúster público o privado en EKS. Este paso es opcional si ya ha creado el clúster.

### Creación de un clúster público en Amazon EKS
<a name="tutorials-eks-deploy-cluster-public"></a>

En este paso, se crea un clúster en EKS.

**Creación de un clúster público**

1. Abra la consola de EKS y elija **Crear clúster**.

1. En **Nombre**, asigne un nombre al clúster. Elija **Next (Siguiente)**.

1. Seleccione **Create (Crear)**.

### Creación de un clúster privado en Amazon EKS
<a name="tutorials-eks-deploy-cluster-private"></a>

Si decide crear un clúster con un punto de conexión privado, asegúrese de asociar únicamente las subredes privadas y de que estas tengan conexión a Internet.

Realice los cinco pasos secundarios siguientes para crear un clúster con un punto de conexión privado.

**Creación de una VPC en la consola**

1. Abra la consola de VPC y elija **Crear VPC**.

1. En **Configuración de VPC**, seleccione **VPC y más**.

1. Elija crear una subred pública y cuatro subredes privadas. Seleccione **Creación de VPC**.

1. En la página de subredes, elija **Privada**. 

**Determinación de las subredes privadas en la VPC**

1. Navegue hasta la VPC y seleccione el ID de VPC para abrir la página de detalles de la VPC.

1. En la página de detalles de la VPC, elija la pestaña **Mapa de recursos**.

1. Vea el diagrama y anote sus subredes privadas. Las subredes se muestran con etiquetas que indican su estado público o privado, y cada subred está asignada a una tabla de enrutamiento.  
![\[\]](http://docs.aws.amazon.com/es_es/codepipeline/latest/userguide/images/eks-deploy-subnets.png)

   Tenga en cuenta que en un clúster privado todas las subredes serán privadas.

1. Cree una subred pública para alojar la puerta de enlace NAT. Solo puede adjuntar una gateway de Internet a una VPC a la vez.

**Creación de una puerta de enlace NAT en la subred pública**

1. En la subred pública, cree una puerta de enlace NAT. Navegue hasta la consola de VPC y, a continuación, elija **Puertas de enlace de Internet**. Elija **Crear puerta de enlace de Internet**.

1. En Nombre, escriba el nombre de la puerta de enlace de Internet. Elija **Crear puerta de enlace de Internet**.

Actualice la tabla de enrutamiento de la subred privada para que dirija el tráfico a la puerta de enlace NAT.

**Agregación de la puerta de enlace NAT a las tablas de enrutamiento de las subredes privadas**

1. Navegue hasta la consola de VPC y, a continuación, elija **Subredes**.

1. Elija cada subred privada y, a continuación, la tabla de enrutamiento de esa subred en la página de detalles. Elija **Editar tabla de enrutamiento**. 

1. Actualice la tabla de enrutamiento de la subred privada para que dirija el tráfico de Internet a la puerta de enlace NAT. Seleccione **Añadir ruta**. Elija **Puerta de enlace NAT** entre las opciones para agregar. Elija la puerta de enlace de Internet que creó.

1. Para la subred pública, cree una tabla de enrutamiento personalizada. Verifique que la lista de control de acceso (ACL) de red de la subred pública permita el tráfico de entrada de la subred privada.

1. Seleccione **Save changes (Guardar cambios)**.

En este paso, se crea un clúster en EKS.

**Creación de un clúster privado**

1. Abra la consola de EKS y elija **Crear clúster**.

1. En **Nombre**, asigne un nombre al clúster. Elija **Siguiente**.

1. Especifique su VPC y otra información de configuración. Seleccione **Crear**.

El clúster de EKS puede ser público o privado. Este paso es para clústeres que tienen SOLO un punto de conexión privado. Asegúrese de que el clúster sea privado.

## Paso 2: configuración de un clúster privado en Amazon EKS
<a name="tutorials-eks-deploy-cluster-private-configure"></a>

Este paso solo es aplicable si ha creado un clúster privado. Este paso es para clústeres que tienen SOLO un punto de conexión privado. 

**Configuración de su clúster**

1. Asocie las subredes privadas únicamente en el clúster de EKS bajo la pestaña **Redes**. Asocie las subredes privadas capturadas en la sección **Determinación de las subredes privadas en la VPC** de [Paso 1: creación de un clúster en Amazon EKS (opcional)](#tutorials-eks-deploy-cluster).

1. Asegúrese de que las subredes privadas tengan acceso a Internet, ya que CodePipeline almacenan y recuperan los artefactos del depósito de artefactos de S3 para su canalización.

## Paso 3: Actualiza la política de roles de CodePipeline servicio en IAM
<a name="tutorials-eks-deploy-role"></a>

En este paso, actualizará un rol de CodePipeline servicio existente, por ejemplo`cp-service-role`, con los permisos necesarios CodePipeline para conectarse a su clúster. Si no dispone de un rol, cree uno.

Actualice su rol de CodePipeline servicio con los siguientes pasos.

**Para actualizar su política CodePipeline de roles de servicio**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)).

1. En el panel de la consola, elija **Roles**.

1. Busque su función CodePipeline de servicio, por ejemplo. `cp-service-role`

1. Agregue una nueva política insertada.

1. En el **Editor de políticas**, especifique lo siguiente.
   + Para un clúster público, agregue los siguientes permisos.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             }
         ]
     }
     ```

------
   + Para un clúster privado, agregue los siguientes permisos. Los clústeres privados requerirán permisos adicionales para su VPC, según corresponda.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
     
         "Statement": [
             {
                 "Sid": "EksClusterPolicy",
                 "Effect": "Allow",
                 "Action": "eks:DescribeCluster",
                 "Resource": "arn:aws:eks:us-east-1:111122223333:cluster/my-cluster"
             },
             {
                 "Sid": "EksVpcClusterPolicy",
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeDhcpOptions",
                     "ec2:DescribeNetworkInterfaces",
                     "ec2:DescribeRouteTables",
                     "ec2:DescribeSubnets",
                     "ec2:DescribeSecurityGroups",
                     "ec2:DescribeVpcs"
                 ],
                 "Resource": [
                     "*"
                 ]
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:CreateNetworkInterfacePermission",
                 "Resource": "*",
                 "Condition": {
                     "ArnEquals": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             },
             {
                 "Effect": "Allow",
                 "Action": "ec2:DeleteNetworkInterface",
                 "Resource": "*",
                 "Condition": {
                     "StringEqualsIfExists": {
                         "ec2:Subnet": [
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-03ebd65daeEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0e377f6036EXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE",
                             "arn:aws:ec2:us-east-1:ACCOUNT-ID:subnet/subnet-0db658ba1cEXAMPLE"
                         ]
                     }
                 }
             }
         ]
     }
     ```

------

1. Elija **Actualizar política**.

## Paso 4: Cree una entrada de acceso para el rol CodePipeline de servicio
<a name="tutorials-eks-deploy-access-entry"></a>

En este paso, crea una entrada de acceso en el clúster que añadirá la función de CodePipeline servicio que actualizó en el paso 3, junto con una política de acceso gestionado.

1. Abra la consola de EKS y navegue hasta el clúster.

1. Elija la pestaña **Acceso**.

1. En **Entradas de acceso de IAM**, elija **Crear entrada de acceso**.

1. En **ARN de entidad principal de IAM**, introduzca el rol que acaba de actualizar para la acción, como `cp-service-role`. Elija **Siguiente**.

1. En la página **Paso 2: agregación de una política de acceso**, en **Nombre de la política**, elija la política administrada para el acceso, como `AmazonEKSClusterAdminPolicy`. Elija **Add Policy (Agregar política)**. Elija **Siguiente**.
**nota**  
Esta es la política que utiliza la CodePipeline acción para comunicarse con Kubernetes. Como práctica recomendada, para limitar los permisos de la política con privilegio mínimo, en lugar de la política administrativa, asocie una política personalizada.

1. En la página Revisar, elija **Crear**.

## Paso 5: creación de un repositorio de origen y agregación de los archivos de configuración `helm chart`
<a name="tutorials-eks-deploy-source"></a>

En este paso, se crea un archivo de configuración adecuado para la acción (archivo de manifiesto de Kubernetes o gráfico de Helm) y luego se almacena en el repositorio de origen. Utilice el archivo de configuración adecuado. [Para obtener más información, consulta https://kubernetes. ](https://kubernetes.io/docs/reference/kubectl/quick-reference/)io/docs/reference/kubectl/quick[-reference/ o https://helm. sh/docs/topics/charts](https://helm.sh/docs/topics/charts/)/.
+ Para Kubernetes, utilice un archivo de manifiesto.
+ Para Helm, utilice un gráfico de Helm.

1. Cree o utilice un GitHub repositorio existente.

1. Cree una nueva estructura en su repositorio para los archivos de gráfico de Helm, como se muestra en el siguiente ejemplo.

   ```
   mychart
   |-- Chart.yaml
   |-- charts
   |-- templates
   |   |-- NOTES.txt
   |   |-- _helpers.tpl
   |   |-- deployment.yaml
   |   |-- ingress.yaml
   |   `-- service.yaml
   `-- values.yaml
   ```

1. Agregue el archivo en el nivel raíz del repositorio.

## Paso 6: creación de una canalización
<a name="tutorials-eks-deploy-pipeline"></a>

Usa el CodePipeline asistente para crear las etapas de tu canalización y conectar tu repositorio de origen.

**Para crear la canalización**

1. Abre la CodePipeline consola en [https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. En la página **Bienvenido**, **Introducción** o **Canalizaciones**, elija **Crear canalización**.

1. En la página **Paso 1: elección de la opción de creación**, en **Opciones de creación**, seleccione la opción **Crear una canalización personalizada**. Elija **Siguiente**.

1. En **Paso 2: elegir la configuración de la canalización**, en **Nombre de la canalización**, escriba **MyEKSPipeline**.

1. CodePipeline proporciona tuberías de tipo V1 y V2, que difieren en características y precio. El tipo V2 es el único tipo que puede elegir en la consola. Para obtener más información, consulte [Tipos de canalización](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel). Para obtener información sobre los precios de CodePipeline, consulte [Precios](https://aws.amazon.com/codepipeline/pricing/).

1. En **Rol de servicio**, seleccione el rol de servicio que actualizó en el paso 3.

1. En **Advanced settings (Configuración avanzada)**, deje los valores predeterminados y elija **Next (Siguiente)**.

1. En la página **Paso 3: Añadir la fase de origen**, en **Source provider**, selecciona **crear una conexión con tu GitHub repositorio**.

1. En la página **Paso 4: agregación de la etapa de compilación**, seleccione **Omitir**.

1. En la página **Paso 5: agregación de la etapa de implementación**, elija **Amazon EKS**.  
![\[Deploy configuration form with Helm selected, showing fields for release name and chart location.\]](http://docs.aws.amazon.com/es_es/codepipeline/latest/userguide/images/eks-action-example.png)

   1. En **Tipo de configuración de implementación**, elija **Helm**.

   1. En **Ubicación del gráfico de Helm**, introduzca el nombre de la versión, como `my-release`. Para **Ubicación del gráfico de Helm**, introduzca la ruta de los archivos de gráfico de Helm, como `mychart`.

   1. Elija **Siguiente**.

1. En la página **Step 6: Review**, revise la configuración de la canalización y elija **Create pipeline** para crear la canalización.  
![\[\]](http://docs.aws.amazon.com/es_es/codepipeline/latest/userguide/images/eks-deploy-pipeline.png)

1. Cuando la canalización se haya ejecutado correctamente, elija **Ver detalles** para ver los registros de la acción y su salida.