

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.

# Implemente cargas de trabajo desde DevOps canalizaciones de Azure a clústeres privados de Amazon EKS
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Resumen
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-summary"></a>

Este patrón demuestra cómo implementar la integración continua y la entrega continua (CI/CD) desde DevOps canalizaciones de Azure a clústeres privados de Amazon Elastic Kubernetes Service (Amazon EKS). Aborda un desafío fundamental al que se enfrentan las organizaciones que están mejorando su postura de seguridad mediante la transición a puntos de conexión de servidores de API privados para sus clústeres de Amazon EKS.

Un punto de conexión público expone el servidor de API de Kubernetes directamente a Internet, lo que crea una mayor superficie expuesta a ataques a la que podrían dirigirse actores maliciosos. Al cambiar a un punto de conexión privado, el acceso al plano de control del clúster está restringido a la nube privada virtual (VPC) del cliente.

Si bien la transición de un clúster de Amazon EKS a un punto final de API privado mejora considerablemente la seguridad, presenta desafíos de conectividad para CI/CD plataformas externas como Azure DevOps. Solo se puede acceder al punto de conexión privado desde la VPC o las redes interconectadas del clúster. Por lo tanto, los DevOps agentes de Azure estándar alojados en Microsoft, que operan fuera de la red AWS privada, no pueden acceder directamente al servidor API de Kubernetes. Esto interrumpe los flujos de trabajo de implementación típicos que dependen de herramientas como kubectl o Helm que se ejecutan en estos agentes porque no logran establecer una conexión con el clúster.

Para superar este problema, este patrón muestra un enfoque eficiente mediante el uso de DevOps agentes de Azure autohospedados dentro de clústeres privados de Amazon EKS. Esta solución ofrece una optimización de costos, una eficiencia operativa y una escalabilidad superiores, a la vez que preserva los requisitos de seguridad. Este enfoque beneficia especialmente a las empresas que buscan optimizar sus DevOps procesos multicloud sin comprometer el rendimiento ni la seguridad.

## Requisitos previos y limitaciones
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ AWS Command Line Interface [(AWS CLI) versión 2.13.17 o posterior, instalada.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ La versión 1.25.1 o posterior de kubectl [instalada](https://kubernetes.io/docs/tasks/tools/).
+ Un clúster privado de Amazon EKS versión 1.24 o posterior [creado](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html), con permisos para crear espacios de nombres, secretos e implementaciones[.](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Nodos de trabajo en un clúster de Amazon EKS con conectividad saliente a Internet para que el DevOps agente de Azure que se ejecute en ellos pueda conectarse al grupo de DevOps agentes de Azure.
+ GitHub cuenta [creada](https://github.com/signup).
+ [Se creó un DevOps proyecto de Azure con acceso para configurar las conexiones de servicio, que son conexiones autenticadas entre Azure Pipelines y servicios externos o remotos.](https://learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops&tabs=microsoft-account)
+ La Kit de herramientas de AWS para Azure DevOps versión 1.15 o posterior instalada para el DevOps proyecto de Azure descrito en el punto anterior. Para obtener instrucciones de instalación, consulte [Kit de herramientas de AWS para Azure DevOps](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools) en Visual Studio Marketplace.

**Limitaciones**
+ Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte [AWS Services by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-architecture"></a>

Este patrón crea lo siguiente:
+ Repositorio **Amazon ECR: el repositorio** Amazon Elastic Container Registry (Amazon ECR) almacena la imagen de Docker con el DevOps agente de Azure y la aplicación de muestra que se implementa.
+ Grupo de ** DevOps agentes de Azure: un grupo** de agentes DevOps autohospedados de Azure registra el agente que se ejecuta en el clúster privado de Amazon EKS.
+ Función de **IAM: una función** AWS Identity and Access Management (IAM) para la conexión del servicio de Azure que proporciona el acceso necesario al agente que se ejecuta en un clúster privado de Amazon EKS.
+ **Conexión DevOps de servicio de Azure**: una conexión de servicio en una DevOps cuenta de Azure para utilizar la función de IAM que proporciona el acceso necesario para que accedan los trabajos en proceso. Servicios de AWS

El siguiente diagrama muestra la arquitectura de implementación de un DevOps agente de Azure autohospedado en un clúster privado de Amazon EKS y de implementación de una aplicación de muestra en el mismo clúster.

![Implementación de un DevOps agente de Azure autohospedado y una aplicación de muestra en un clúster privado de Amazon EKS.](https://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a965834f-a1e2-4679-bd8c-15eed4f57b55/images/ee22bd3e-311c-46e0-8024-9b7e7752080a.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Implemente un DevOps agente de Azure autohospedado como una implementación dentro de un clúster de Amazon EKS.

1. Un DevOps agente de Azure se conecta al grupo de agentes de una DevOps cuenta de Azure mediante un token de acceso personal (PAT) para la autenticación.

1. Azure Pipelines configura una canalización para implementarla mediante código de un GitHub repositorio.

1. La canalización se ejecuta en el agente desde el grupo de agentes que se configuró en la configuración de canalización. El DevOps agente de Azure obtiene la información de trabajo de la canalización consultando constantemente la cuenta de Azure DevOps .

1. El DevOps agente de Azure crea una imagen de Docker como parte del trabajo en proceso y envía la imagen al repositorio de Amazon ECR.

1. El DevOps agente de Azure implementa la aplicación de muestra en un clúster privado de Amazon EKS en un espacio de nombres denominado. `webapp` 

## Tools (Herramientas)
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-tools"></a>

**Herramientas**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) le ayuda a ejecutar AWS Kubernetes sin necesidad de instalar o mantener su propio plano de control o nodos de Kubernetes.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

**Otras herramientas**
+ [Docker](https://www.docker.com/) es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/): una interfaz de la línea de comandos que le ayuda en la ejecución de comandos en clústeres de Kubernetes.

**Repositorio de código**
+ El código de este patrón está disponible en el repositorio GitHub [deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops).

## Prácticas recomendadas
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-best-practices"></a>
+ Para Amazon EKS, consulte la [Guía de prácticas recomendadas de Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html).
+ Siga el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte [Otorgar privilegio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-epics"></a>

### Creación de una conexión de servicio
<a name="create-a-service-connection"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Busque el GUID de la DevOps organización de Azure. | Inicie sesión en su DevOps cuenta de Azure y, a continuación, utilice la siguiente URL para buscar el GUID de la organización: `https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0` En la URL, `{DevOps_org_ID}` sustitúyalo por el ID de su DevOps organización de Azure. | AWS DevOps | 
| Configure un IdP en la Cuenta de AWS. | Para configurar un proveedor de identidad (IdP) en una conexión Cuenta de AWS de servicio de Azure, siga estos pasos:1. Inicie sesión en la consola Consola de administración de AWS de IAM y ábrala en. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)<br />2. En el panel izquierdo, elija **Proveedores de identidades**.<br />3. Elija **Add Provider (Agregar proveedor)**.<br />4. Elija **OpenID Connect** como **Tipo de proveedor**.<br />5. En la **URL del proveedor**, introduzca la URL del DevOps emisor de Azure. Cada arrendatario de Azure DevOps tiene un formato único `OrganizationGUID` que suele utilizar el siguiente formato: `https://vstoken.dev.azure.com/{OrganizationGUID}` Sustitúyalo por `{OrganizationGUID}` el ID de su DevOps organización de Azure.<br />6. Para **Audience**, escriba **api: //Azure ADToken Exchange**. Se trata de un valor fijo para Azure DevOps.<br />7. Elija **Add Provider (Agregar proveedor)**.<br />8. Tome nota del ARN del proveedor recién creado para usarlo en la siguiente tarea.<br />Para obtener más información, consulte [Cómo federarse AWS desde Azure DevOps mediante OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/). | AWS DevOps | 
| Cree una política de IAM en la Cuenta de AWS. | Para crear una política de IAM que proporcione los permisos necesarios para la función de IAM utilizada por la DevOps canalización de Azure, siga estos pasos:1. En la consola de IAM, en el panel izquierdo, elija **Políticas**.<br />2. Seleccione **Crear política**.<br />3. En la página **Especificar permisos**, en el **editor de políticas**, seleccione **JSON**. Reemplace el texto JSON predeterminado por el siguiente JSON:<pre><br />{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "Statement1",<br />            "Effect": "Allow",<br />            "Action": [<br />                "ecr:*",<br />                "eks:DescribeCluster",<br />                "eks:ListClusters"<br />            ],<br />            "Resource": "*"<br />        }<br />    ]<br />}</pre><br />4. Elija **Siguiente**.<br />5. En **Nombre de política**, escriba un nombre para la política de IAM. Este patrón usa el nombre **ADO-policy**.<br />6. Elija **Crear política**. | AWS DevOps | 
| Cree un rol de IAM role en la Cuenta de AWS. | Para configurar un rol de IAM en Cuenta de AWS la conexión del servicio de Azure, siga estos pasos:1. En la consola de IAM, en el panel izquierdo, elija **Roles**.<br />2. Elija **Crear rol**.<br />3. En **Tipo de entidad de confianza**, seleccione **Identidad web**.<br />4. Seleccione el IdP correcto del menú desplegable. El nombre del IdP comienza por `vstoken.dev.azure.com/{OrganizationGUID}`.<br />5. En la lista desplegable **Audiencia**, seleccione **api: ADToken //Azure** Exchange.<br />6. Para limitar este rol a una sola conexión de servicio, añada una condición. En **Condición**, seleccione **Añadir condición** y, en **Clave**, seleccione **vstoken.dev.azure.com/{OrganizationGUID}:sub**. En **Condición**, seleccione. **StringEquals** Para **Valor**, utilice el siguiente formato: `sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}`. Para `ServiceConnectionName`, utilice **aws-sc.** Creará esta conexión de servicio en la siguiente tarea.<br />7. Elija **Siguiente**.<br />8. En **Añadir permisos**, seleccione **ADO-Policy**, que es la política que creó en una tarea anterior.<br />9. Elija **Siguiente** y, para **Nombre del rol**, introduzca **ado-role**. En **Seleccionar entidades de confianza**, use la siguiente política de confianza:<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}"<br />      },<br />      "Action": "sts:AssumeRoleWithWebIdentity",<br />      "Condition": {<br />        "StringEquals": {<br />          "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange",<br />          "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}"<br />        }<br />      }<br />    }<br />  ]<br />}</pre><br />En la política, proporcione su información para los siguientes marcadores de posición:+ `{account_id}`- Cuenta de AWS ID<br />+ `{OrganizationGUID}`- GUID de DevOps organización de Azure<br />+ `{OrganizationName}`- Nombre de la DevOps organización de Azure<br />+ `{ProjectName}`- Nombre DevOps del proyecto de Azure<br />+ `{ServiceConnectionName}`- Nombre de la conexión DevOps al servicio de Azure. Utilice **aws-sc**. Creará esta conexión de servicio en la siguiente tarea. | AWS DevOps | 
| Cree una conexión de servicio en la DevOps cuenta de Azure. | Para configurar una conexión de servicio de Azure, siga estos pasos:1. En su DevOps proyecto de Azure, seleccione **Configuración del proyecto** y **Conexiones de servicio**.<br />2. Elija **Nueva conexión de servicio**, seleccione el tipo de conexión de servicio como `aws` y, a continuación, seleccione **Siguiente**.<br />3. En **Rol que se va a asumir**, introduzca el ARN para el rol de IAM **ado-role**. Creó el **ado-role **en la tarea anterior *Cree un rol de IAM en la Cuenta de AWS*.<br />4. Seleccione la casilla de verificación **Usar OIDC**.<br />5. En **Nombre de la conexión de servicio**, introduzca **aws-sc** en las propiedades de la tarea.<br />6. Seleccione **Save**.<br />Para obtener más información, consulte [Crear una conexión de servicio](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) en la documentación de Microsoft. | AWS DevOps | 
| Añada el rol de IAM al archivo de configuración de Amazon EKS. | El rol de IAM debe tener permisos para realizar las operaciones requeridas en el clúster de Amazon EKS. Como se trata de un rol de canalización, el rol de IAM debe poder administrar casi todos los tipos de recursos del clúster. Por lo tanto, el permiso de grupo `system:masters` es adecuado para este rol.<br />Para añadir la configuración necesaria al `aws-auth ConfigMap` en Kubernetes, use el siguiente código:<pre>- groups:<br />  - system:masters<br />  rolearn: arn:aws:iam::{account_id}:role/ADO-role<br />  username: ADO-role</pre><br />`{account_id}`Sustitúyalo por su Cuenta de AWS ID.<br />Para obtener más información, consulte la sección sobre [cómo funciona Amazon EKS con IAM](https://docs.aws.amazon.com/eks/latest/userguide/security-iam-service-with-iam.html#security-iam-service-with-iam-roles) en la documentación de Amazon EKS. | AWS DevOps | 

### Creación de un grupo de agentes
<a name="create-an-agent-pool"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un grupo de agentes autoalojado. | Para configurar un grupo de agentes autohospedados en la DevOps cuenta de Azure, siga estos pasos:1. Inicie sesión en la organización de su DevOps cuenta de Azure.<br />2. Elija **Azure DevOps Organization**.<br />3. Elija su DevOps proyecto de Azure.<br />4. Seleccione **Configuración del proyecto**.<br />5. Elija **Grupos de agentes**.<br />6. Elija **Añadir grupo**.<br />7. Seleccione **Autoalojado**.<br />8. En **Nombre**, escriba **eks-agent**.<br />9. Seleccione la casilla de verificación **Conceder permiso de acceso a todas las canalizaciones**.<br />10. Seleccione **Crear**.<br />Para obtener más información, consulte [Crear y administrar grupos de agentes](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/pools-queues?view=azure-devops&tabs=yaml%2Cbrowser) en la documentación de Microsoft. |  | 

### Cree una imagen de DevOps agente de Azure y envíela a Amazon ECR
<a name="build-azure-devops-agent-image-and-push-to-ecr"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un repositorio de Amazon ECR. | Las imágenes de Docker que se utilizan para implementar el DevOps agente de Azure y la aplicación de muestra (`webapp`) en el clúster privado de Amazon EKS deben almacenarse en un repositorio de Amazon ECR. Para crear un repositorio de Amazon ECR, complete los pasos siguientes.1. Abra la consola Amazon ECR en los [https://console.aws.amazon.com/ecr/repositorios](https://console.aws.amazon.com/ecr/repositories).<br />2. En la barra de navegación, elija la **Región de AWS** en la que va a crear el repositorio.<br />3. En la página **Repositorios**, elija **Repositorios privados** y, a continuación, **Crear repositorio**.<br />4. En el **nombre del repositorio**, introduzca **webapp**. Para que la aplicación de ejemplo de este patrón funcione, el nombre del repositorio de Amazon ECR debe usar **webapp**. Si utiliza un nombre diferente para el repositorio, consulte [Solución de problemas](#deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting). <br />Para obtener más información, consulte [Creación de un repositorio privado de Amazon ECR para almacenar imágenes](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la documentación de Amazon ECR. | AWS DevOps | 
| Cree un Dockerfile para crear el agente de Azure DevOps . | Cree un Dockerfile para crear la imagen de Docker que tiene instalado el agente de Azure. DevOps Almacene el siguiente contenido en un archivo denominado `Dockerfile`:<pre><br />FROM ubuntu:22.04 <br />ENV TARGETARCH="linux-x64"<br />RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget<br /><br />RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />RUN unzip awscliv2.zip<br />RUN ./aws/install<br />RUN rm -rf aws awscliv2.zip<br /><br />RUN curl -sSL https://get.docker.com/ | sh<br /><br />RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash<br />RUN mkdir -p azp <br />WORKDIR /azp/<br /><br />COPY ./start.sh ./ <br />RUN chmod +x ./start.sh<br /><br />RUN useradd -m -d /home/agent agent <br />RUN chown -R agent:agent /azp /home/agent<br />RUN groupadd -f docker <br />RUN usermod -aG docker agent<br />USER agent<br /><br />ENTRYPOINT [ "./start.sh" ]</pre> | AWS DevOps | 
| Cree un script para el DevOps agente de Azure. | Para crear el script `start.sh`, siga estos pasos:1. Vaya al procedimiento [Crear y compilar el Dockerfile](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops#create-and-build-the-dockerfile-1) en la documentación de Microsoft y desplácese hasta el **paso 5. Guarde el siguiente contenido **`~/azp-agent-in-docker/start.sh`**, de forma que se asegure de utilizar finales de línea de estilo Unix (LF)**.<br />2. Copie el contenido del script y guárdelo en un archivo denominado `start.sh` en el mismo directorio que el Dockerfile. | AWS DevOps | 
| Cree una imagen de Docker con el DevOps agente de Azure.  | Para crear una imagen de Docker para instalar el DevOps agente de Azure, utilice el Dockerfile que creó anteriormente para crear la imagen. En el mismo directorio en el que almacenó el Dockerfile, ejecute el comando siguiente.<pre>aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com<br /><br />docker build --platform linux/amd64 -t ado-agent:latest .<br /><br />docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br /><br />docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest</pre><br />Sustituya `aws_account_id` y por su `region` Cuenta de AWS ID y. Región de AWS | AWS DevOps | 

### Implemente el DevOps agente de Azure en un clúster privado de Amazon EKS
<a name="deploy-the-azure-devops-agent-to-a-private-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Genere un token de acceso personal de Azure. | El agente que se ejecuta en el clúster privado de Amazon EKS necesita un token de acceso personal (PAT) para poder autenticarse con la DevOps cuenta de Azure. Para generar un PAT, siga estos pasos:1. Inicie sesión con la cuenta de usuario que planea usar en su DevOps organización de Azure (`https://dev.azure.com/{Your_Organization}`).1. En la página de inicio, abra la configuración de usuario y, a continuación, seleccione **Tokens de acceso personal**.<br />2. Elija **Nuevo token.**<br />3. Ingrese un **nombre **para el token.<br />4. Seleccione **Mostrar todos los ámbitos**.<br />5. En el caso de los **grupos de agentes**, seleccione la casilla de verificación **Leer y administrar**.<br />6. Seleccione **Crear**.<br />7. Para crear un secreto en el clúster privado de Amazon EKS, utilice la siguiente configuración:<pre>apiVersion: v1<br />kind: Secret<br />metadata:<br />  name: azdevops-pat<br />  namespace: default<br />type: Opaque<br />stringData:<br />  AZP_TOKEN: <PAT Token></pre>1. Almacene la configuración en un archivo denominado `ado-secret.yaml`. Sustituya `<PAT Token>` por el token de acceso personal que acaba de crear. Para crear el secreto, ejecute el siguiente comando:<pre>kubectl create -f ado-secret.yaml</pre><br />Para obtener más información, consulte [Registrar un agente mediante un token de acceso personal (PAT)](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/personal-access-token-agent-registration?view=azure-devops) en la documentación de Microsoft. | AWS DevOps | 
| Use el archivo de manifiesto de Kubernetes para la implementación del agente. | Para implementar el DevOps agente de Azure en el clúster privado de Amazon EKS, copie el siguiente archivo de manifiesto y guárdelo como`agent-deployment.yaml`: <pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: azure-pipelines-agent-eks<br />  labels:<br />    app: azure-pipelines-agent<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: azure-pipelines-agent<br />  template:<br />    metadata:<br />      labels:<br />        app: azure-pipelines-agent<br />    spec:<br />      containers:<br />      - name: docker<br />        image: docker:dind<br />        securityContext: <br />          privileged: true<br />        volumeMounts:<br />        - name: shared-workspace<br />          mountPath: /workspace<br />        - name: dind-storage<br />          mountPath: /var/lib/docker<br />        env:<br />        - name: DOCKER_TLS_CERTDIR<br />          value: ""<br />      - name: azure-pipelines-agent<br />        image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br />        env:<br />        - name: AZP_URL<br />          value: "<Azure account URL>"<br />        - name: AZP_POOL<br />          value: "eks-agent"<br />        - name: AZP_TOKEN<br />          valueFrom:<br />            secretKeyRef:<br />              name: azdevops-pat<br />              key: AZP_TOKEN<br />        - name: AZP_AGENT_NAME<br />          valueFrom:<br />            fieldRef:<br />              fieldPath: metadata.name<br />        - name: DOCKER_HOST<br />          value: tcp://localhost:2375<br />        volumeMounts:<br />        - mountPath: /workspace<br />          name: shared-workspace<br />      volumes:<br />      - name: dind-storage<br />        emptyDir: {}<br />      - name: shared-workspace<br />        emptyDir: {}</pre><br />Sustituya `aws_account_id` y `<Azure account URL>` por su Cuenta de AWS ID y la URL de su DevOps cuenta de Azure. | AWS DevOps | 
| Implemente el agente en el clúster privado de Amazon EKS. | Para implementar el agente de Azure DevOps en el clúster privado de Amazon EKS, use el siguiente comando:<pre>kubectl create -f agent-deployment.tf</pre> | AWS DevOps | 
| Compruebe que el agente se está ejecutando. | Para comprobar que el DevOps agente de Azure se está ejecutando, utilice el siguiente comando:<pre>kubectl get deploy azure-pipelines-agent-eks<br /></pre><br />La salida debería tener un aspecto similar al siguiente:<pre><br />NAME                        READY   UP-TO-DATE   AVAILABLE   AGE<br />azure-pipelines-agent-eks   1/1     1            1           58s</pre><br />Asegúrese de que la columna `READY ` muestre `1/1`. | AWS DevOps | 
| Compruebe que el agente esté registrado en el grupo de DevOps agentes de Azure. | Para comprobar que el agente está implementado en el clúster privado de Amazon EKS y registrado en el grupo de agentes `eks-agent`, siga estos pasos:1. Inicie sesión en su DevOps organización de Azure (`https://dev.azure.com/{Your_Organization}`).<br />2. Seleccione **Configuración del proyecto**.<br />3. Elija **Grupos de agentes**. <br />4. Seleccione el grupo **eks-agent** y, a continuación, consulte la pestaña **Agentes**.<br />Debería ver un agente en la lista con **el estado** **en línea** y el nombre del agente debería empezar por **azure-pipelines-agent-eks-\***. | AWS DevOps | 

### Implementación de la aplicación de ejemplo
<a name="deploy-sample-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Transfiera el repositorio de aplicaciones de muestra a su GitHub cuenta.  | Transfiera el siguiente repositorio de AWS muestras a su GitHub cuenta:<br />[https://github.com/aws-samples/deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) | AWS DevOps | 
| Crear una canalización. | Para crear una canalización en su DevOps cuenta de Azure, siga estos pasos:1. Inicie sesión con la cuenta de usuario que planea usar en su DevOps organización de Azure (`https://dev.azure.com/{Your_Organization}`).<br />2. Vaya a la consola de proyectos y canalizaciones.<br />3. Elija **Nueva canalización**.<br />4. **En Dónde está su código**, elija **GitHub.**<br />5. Proporciona las credenciales necesarias para que la canalización se conecte a tu GitHub cuenta<br />6. Selecciona el repositorio **deploy-kubernetes-resources-to: amazon-eks-using-azure -devops**.<br />7. En **Configurar su canalización, **seleccione el **archivo YAML de Azure Pipelines existente**.<br />8. En **Seleccionar un archivo YAML existente, **seleccione **main** para **Ramificación** y **azure\_pipelines.yaml** para** ruta**. <br />9. Elija **Continuar**.<br />10. En **Revisar la canalización YAML**, sustituya los valores de los parámetros de entrada `awsRegion` y `awsEKSClusterName` por tu información:<pre>pool:<br />  name: eks-agent<br />#pool: self-hosted # If you are running self-hosted Azure DevOps Agents<br /><br />stages:<br /># Refering the pipeline template, input parameter that are not specified will be added with defaults<br />- template: ./pipeline_templates/main_template.yaml<br />  parameters:<br />    serviceConnectionName: aws-sc<br />    awsRegion: <your region><br />    awsEKSClusterName: <name of your EKS cluster><br />    projectName: webapp<br /></pre>1. Seleccione **EJECUTAR**. | AWS DevOps | 
| Verifique que la aplicación de muestra se ha implementado. | Una vez finalizada la canalización, compruebe que la implementación de la aplicación de muestra se ha realizado correctamente; para ello, consulte tanto el repositorio de Amazon ECR como el clúster de Amazon EKS.<br />Para verificar los artefactos en el repositorio de Amazon ECR, siga estos pasos:1. Vaya al repositorio `webapp` de Amazon ECR.<br />2. Confirme la presencia de los siguientes artefactos nuevos:+ Imagen de Docker: `<date>.<build_number>-image`<br />+ Gráfico de Helm: `<date>.<build_number>-helm`<br />Por ejemplo, `20250501.1-image` y `20250501.1-helm`.<br />Para verificar la implementación en el clúster privado de Amazon EKS del espacio de nombres `webapp`, use el siguiente comando:<pre>kubectl get deploy -n webapp </pre><br />El resultado esperado es el siguiente:<pre><br />NAME     READY   UP-TO-DATE   AVAILABLE<br />webapp   1/1     1            1           </pre><br />Nota: Si esta es la primera vez que ejecuta una canalización, es posible que deba autorizar la conexión del servicio y el grupo de agentes. Busque las solicitudes de permiso en la interfaz de DevOps canalización de Azure y apruebelas para continuar. | AWS DevOps | 

## Resolución de problemas
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La canalización falla cuando el nombre del repositorio de Amazon ECR no coincide con `webapp` | La aplicación de ejemplo espera que el nombre del repositorio de Amazon ECR coincida con el parámetro `projectName: webapp` en `azure_pipeline.yml`.<br />Para resolver este problema, cambie el nombre de su repositorio de Amazon ECR a `webapp` o actualice lo siguiente:+ Cambie el nombre del `webapp` directorio de su repositorio bifurcado para que coincida con el nombre de su GitHub repositorio de Amazon ECR.<br />+ Actualice el parámetro `projectName` en `azure_pipeline.yml` para que coincida con el nombre de su repositorio de Amazon ECR. | 
| Error: Kubernetes cluster unreachable: the server has asked for the client to provide credentials | Si encuentra este error en el paso “Extraer e implementar gráfico de Helm” de su canalización de Azure, la causa principal suele deberse a una configuración incorrecta de los roles de IAM en el `aws-auth ConfigMap` del clúster de Amazon EKS.<br />Para resolver este problema, compruebe lo siguiente:+ Verifique la configuración de `aws-auth ConfigMap`.<br />+ Compruebe la configuración de autenticación de su clúster de Amazon EKS: abra la consola de Amazon EKS, los **detalles del clúster** y la **configuración de acceso**. Asegúrese de que el **modo de autenticación** esté configurado en la API de **EKS y ConfigMap (no solo en la API** de **EKS**). | 

## Recursos relacionados
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-resources"></a>

**AWS Blogs**
+ [Cómo federarse AWS desde Azure DevOps mediante OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/)

**Servicios de AWS documentación**
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**Documentación de Microsoft**
+ [¿Qué es Azure DevOps?](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops)
+ [¿Qué es Azure Pipelines?](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)