Tutorial: implementación de una aplicación en Amazon EKS - Amazon CodeCatalyst

Tutorial: implementación de una aplicación en Amazon EKS

En este tutorial, aprenderá a implementar una aplicación basada en contenedores en Amazon Elastic Kubernetes Service mediante un flujo de trabajo de Amazon CodeCatalyst, Amazon EKS y algunos otros servicios de AWS. La aplicación implementada es un sencillo sitio web “Hello, World!” creado a partir de una imagen de Docker del servidor web Apache. El tutorial explica el trabajo de preparación necesario, como la configuración de una máquina de desarrollo y un clúster de Amazon EKS, y luego describe cómo crear un flujo de trabajo para crear la aplicación e implementarla en el clúster.

Una vez completada la implementación inicial, el tutorial le indica cómo realizar un cambio en el código fuente de la aplicación. Este cambio hace que se cree una nueva imagen de Docker y se envíe a su repositorio de imágenes de Docker con la nueva información de revisión. A continuación, la nueva revisión de la imagen de Docker se implementa en Amazon EKS.

sugerencia

En lugar de seguir este tutorial, puede utilizar un esquema que realice una configuración completa de Amazon EKS por usted. Deberá utilizar el esquema Implementación de aplicaciones de EKS. Para obtener más información, consulte Creación de un proyecto con un esquema.

Requisitos previos

Antes de comenzar este tutorial:

  • Necesita un espacio de Amazon CodeCatalyst con una cuenta de AWS conectada. Para obtener más información, consulte Creación de un espacio.

  • En su espacio, necesita un proyecto vacío llamado:

    codecatalyst-eks-project

    Use la opción Empezar desde cero para crear este proyecto.

    Para obtener más información, consulte Creación de un proyecto vacío en Amazon CodeCatalyst.

  • En su proyecto, necesita un repositorio de código fuente de CodeCatalyst vacío llamado:

    codecatalyst-eks-source-repository

    Para obtener más información, consulte Almacenamiento de código y colaboración con los repositorios de código fuente de CodeCatalyst.

  • En su proyecto, necesita un entorno de CI/CD de CodeCatalyst (no un entorno de desarrollo) llamado:

    codecatalyst-eks-environment

    Configure este entorno de la siguiente manera:

    • Elija cualquier tipo, como Sin producción.

    • Conecte su cuenta de AWS al entorno.

    • En Rol de IAM predeterminado, elija cualquier rol. Especificará un rol diferente más adelante.

    Para obtener más información, consulte Implementación en Cuentas de AWS y VPC.

Paso 1: configurar la máquina de desarrollo

El primer paso de este tutorial consiste en configurar una máquina de desarrollo con algunas herramientas que utilizará a lo largo de este tutorial. Estos roles son:

  • la utilidad eksctl: para la creación del clúster

  • la utilidad kubectl: un requisito previo para eksctl

  • la AWS CLI: también es un requisito previo para eksctl

Puede instalar estas herramientas en su máquina de desarrollo actual, si tiene una, o puede utilizar un entorno de desarrollo de CodeCatalyst, que está basado en la nube. La ventaja de un entorno de desarrollo de CodeCatalyst es que es fácil de configurar y desmantelar, y está integrado con otros servicios de CodeCatalyst, lo que le permite completar este tutorial en menos pasos.

En este tutorial se asume que utilizará un entorno de desarrollo de CodeCatalyst.

Las siguientes instrucciones describen una forma rápida de lanzar un entorno de desarrollo de CodeCatalyst y configurarlo con las herramientas necesarias, pero si desea obtener instrucciones detalladas, consulte:

Lanzamiento de un entorno de desarrollo
  1. Abra la consola de CodeCatalyst en https://codecatalyst.aws/.

  2. Vaya a su proyecto, codecatalyst-eks-project.

  3. En el panel de navegación, elija Código y, a continuación, elija Repositorios de origen.

  4. Elija el nombre del repositorio de código fuente, codecatalyst-eks-source-repository.

  5. Cerca de la parte superior, elija Crear entorno de desarrollo y, a continuación, elija AWS Cloud9 (en el navegador).

  6. Asegúrese de que estén seleccionadas la opción Trabajar en una ramificación existente y la ramificación principal y, a continuación, elija Crear.

    Su entorno de desarrollo se abre en una nueva pestaña del navegador y el repositorio (codecatalyst-eks-source-repository) se clona en él.

Instalación y configuración de kubectl
  1. En el terminal del entorno de desarrollo, escriba:

    curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl
  2. Escriba:

    chmod +x ./kubectl
  3. Escriba:

    mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
  4. Escriba:

    echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
  5. Escriba:

    kubectl version --short --client
  6. Compruebe que aparezca una versión.

    Ahora ha instalado kubectl.

Instalación y configuración de eksctl
nota

eksctl no es estrictamente obligatorio porque se puede utilizar kubectl en su lugar. Sin embargo, eksctl tiene la ventaja de automatizar gran parte de la configuración del clúster y, por lo tanto, es la herramienta recomendada para este tutorial.

  1. En el terminal del entorno de desarrollo, escriba:

    curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
  2. Escriba:

    sudo cp /tmp/eksctl /usr/bin
  3. Escriba:

    eksctl version
  4. Compruebe que aparezca una versión.

    Ahora ha instalado eksctl.

Comprobación de que la AWS CLI está instalada
  1. En el terminal del entorno de desarrollo, escriba:

    aws --version
  2. Compruebe que aparezca una versión para verificar que la AWS CLI está instalada.

    Complete los procedimientos restantes para configurar la AWS CLI con los permisos de acceso necesarios para acceder a AWS.

Para configurar la AWS CLI

Debe configurar la AWS CLI con claves de acceso y un token de sesión para darle acceso a los servicios de AWS. Las siguientes instrucciones proporcionan una forma rápida de configurar las claves y el token, pero si desea obtener instrucciones detalladas, consulte Configuración de la AWS CLI en la Guía del usuario de AWS Command Line Interface.

  1. Cree un usuario de IAM Identity Center del modo siguiente:

    1. Inicie sesión en la AWS Management Console y abra la consola de AWS IAM Identity Center en https://console.aws.amazon.com/singlesignon/.

      (Puede que tenga que seleccionar Activar si nunca ha iniciado sesión en IAM Identity Center con anterioridad).

      nota

      Asegúrese de iniciar sesión con la Cuenta de AWS que está conectada a su espacio de CodeCatalyst. Para comprobar qué cuenta está conectada, vaya a su espacio y elija la pestaña Cuentas de AWS. Para obtener más información, consulte Creación de un espacio.

    2. En el panel de navegación, elija Users y luego elija la opción Add user.

    3. En Nombre de usuario, escriba:

      codecatalyst-eks-user
    4. En Contraseña, elija Generar una contraseña de un solo uso que pueda compartir con este usuario.

    5. En Dirección de correo electrónico y Confirmar dirección de correo electrónico, introduzca una dirección de correo electrónico que no exista aún en IAM Identity Center.

    6. En Nombre, escriba:

      codecatalyst-eks-user
    7. En Apellidos, escriba:

      codecatalyst-eks-user
    8. En Nombre de visualización, mantenga:

      codecatalyst-eks-user codecatalyst-eks-user
    9. Elija Siguiente.

    10. En la página Agregar usuarios a grupos, elija Siguiente.

    11. En la página Revisar y agregar usuario, compruebe la información que ha introducido y seleccione Agregar usuario.

      Aparece el cuadro de diálogo Contraseña de un solo uso.

    12. Seleccione Copiar y, a continuación, pegue la información de inicio de sesión en un archivo de texto. La información de inicio de sesión consta de la URL del portal de acceso de AWS, un nombre de usuario y una contraseña de un solo uso.

    13. Elija Close.

  2. Cree un conjunto de permisos de la siguiente manera:

    1. En el panel de navegación, elija Conjuntos de permisos y, a continuación, elija Crear conjunto de permisos.

    2. En Conjunto de permisos predefinido, seleccione AdministratorAccess. Esta política concede permisos completos a todos los Servicios de AWS.

    3. Elija Siguiente.

    4. En Nombre del conjunto de permisos, elimine AdministratorAccess e introduzca:

      codecatalyst-eks-permission-set
    5. Elija Siguiente.

    6. En la página Revisión, revise la información y, a continuación, elija Crear grupo.

  3. Asigne el conjunto de permisos a codecatalyst-eks-user de la siguiente manera:

    1. En el panel de navegación, elija Cuentas de AWS y, a continuación, seleccione la casilla de verificación situada junto a la Cuenta de AWS en la que ha iniciado sesión.

    2. Seleccione Asignar usuarios o grupos.

    3. Elija la pestaña Users.

    4. Seleccione la casilla situada junto a codecatalyst-eks-user.

    5. Elija Siguiente.

    6. Seleccione la casilla situada junto a codecatalyst-eks-permission-set.

    7. Elija Siguiente.

    8. Revise la información y seleccione Enviar.

      Ahora ha asignado codecatalyst-eks-user y codecatalyst-eks-permission-set a su Cuenta de AWS, combinándolos.

  4. Obtenga las claves de acceso de codecatalyst-eks-user y el token de sesión de la siguiente manera:

    1. Asegúrese de tener la URL del portal de acceso de AWS y el nombre de usuario y la contraseña de un solo uso para codecatalyst-eks-user. Debería haber copiado esta información en un editor de texto anteriormente.

      nota

      Si no dispone de esta información, vaya a la página de detalles de codecatalyst-eks-user en IAM Identity Center, elija Restablecer contraseña, Generar una contraseña de un solo uso [...] y de nuevo Restablecer contraseña para que aparezca la información en la pantalla.

    2. Cierre la sesión de AWS.

    3. Pegue la URL del portal de acceso a AWS en la barra de direcciones del navegador.

    4. Inicie sesión con:

      • Nombre de usuario:

        codecatalyst-eks-user
      • Contraseña:

        contraseña de un solo uso

    5. En Establecer nueva contraseña, introduzca una nueva contraseña y elija Establecer nueva contraseña.

      Aparece un cuadro de Cuenta de AWS en la pantalla.

    6. Elija Cuenta de AWS y, a continuación, elija el nombre de la Cuenta de AWS a la que asignó el usuario codecatalyst-eks-user y el conjunto de permisos.

    7. Junto a codecatalyst-eks-permission-set, seleccione Línea de comandos o acceso mediante programación.

    8. Copie los comandos del centro de la página. Tendrán un aspecto similar al siguiente:

      export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" export AWS_SESSION_TOKEN="session-token"

      ...donde session-token es una cadena larga aleatoria.

  5. Añada las claves de acceso y el token de sesión a la AWS CLI de la siguiente manera:

    1. Vuelva al entorno de desarrollo de CodeCatalyst.

    2. En la línea de comandos del terminal, pegue los comandos que ha copiado. Pulse Intro.

      Ahora ha configurado la AWS CLI con claves de acceso y un token de sesión. Ahora puede utilizar la AWS CLI para realizar las tareas requeridas en este tutorial.

      importante

      Si en algún momento de este tutorial ve mensajes similares a:

      Unable to locate credentials. You can configure credentials by running "aws configure".

      O bien:

      ExpiredToken: The security token included in the request is expired

      ...es porque su sesión de la AWS CLI ha caducado. En este caso, no ejecute el comando aws configure. En lugar de ello, siga las instrucciones del paso 4 de este procedimiento, que comienza con Obtain codecatalyst-eks-user's access key and session token para actualizar la sesión.

Paso 2: crear un clúster de Amazon EKS

En esta sección, creará un clúster en Amazon EKS. En las instrucciones siguientes se describe una forma rápida de crear el clúster mediante eksctl, pero si desea obtener instrucciones detalladas, consulte:

nota

La integración de CodeCatalyst con Amazon EKS no admite clústeres privados.

Antes de empezar

Asegúrese de haber realizado las siguientes tareas en su máquina de desarrollo:

  • Ha instalado la utilidad eksctl.

  • Ha instalado la utilidad kubectl.

  • Ha instalado la AWS CLI y la ha configurado con claves de acceso y un token de sesión.

Para obtener más información sobre como realizar estas tareas, consulte Paso 1: configurar la máquina de desarrollo.

Pasos para crear un clúster
importante

No utilice la interfaz de usuario del servicio de Amazon EKS para crear el clúster, ya que el clúster no se configurará correctamente. Utilice la utilidad eksctl tal y como se describe en los pasos siguientes.

  1. Vaya a su entorno de desarrollo.

  2. Cree un clúster y los nodos:

    eksctl create cluster --name codecatalyst-eks-cluster --region us-west-2

    Donde:

    • codecatalyst-eks-cluster se sustituye por el nombre que dese proporcionar al clúster.

    • us-west-2 se sustituye por su región.

    Después de 10-20 minutos, aparecerá un mensaje similar al siguiente:

    EKS cluster "codecatalyst-eks-cluster" in "us-west-2" region is ready

    nota

    Verá varios mensajes waiting for CloudFormation stack mientras AWS crea el clúster. Esto es normal.

  3. Compruebe que el clúster se haya creado correctamente:

    kubectl cluster-info

    Verá un mensaje similar al siguiente, que indica que la creación del clúster se ha realizado correctamente:

    Kubernetes master is running at https://long-string.gr7.us-west-2.eks.amazonaws.com CoreDNS is running at https://long-string.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Paso 3: crear un repositorio de imágenes de Amazon ECR

En esta sección, creará un repositorio de imágenes privado en Amazon Elastic Container Registry (Amazon ECR). Este repositorio almacena la imagen de Docker del tutorial.

Para obtener más información sobre Amazon ECR, consulte la Guía del usuario de Amazon Elastic Container Registry.

Creación de un repositorio de imágenes en Amazon ECR
  1. Vaya a su entorno de desarrollo.

  2. Cree un repositorio vacío en Amazon ECR:

    aws ecr create-repository --repository-name codecatalyst-eks-image-repo

    Sustituya codecatalyst-eks-image-repo por el nombre que desee asignar al repositorio de Amazon ECR.

    En este tutorial se asume que el repositorio se llama codecatalyst-eks-image-repo.

  3. Muestre los detalles del repositorio de Amazon ECR:

    aws ecr describe-repositories \ --repository-names codecatalyst-eks-image-repo
  4. Anote el valor de “repositoryUri”: (por ejemplo, 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo).

    Lo necesitará más adelante cuando añada el repositorio a su flujo de trabajo.

Paso 4: añadir archivos de código fuente

En esta sección, añadirá los archivos de código fuente de la aplicación al repositorio de código fuente (codecatalyst-eks-source-repository). Constan de:

  • Un archivo index.html: muestra un mensaje “Hello, world!” en el navegador.

  • Un Dockerfile: describe la imagen base que se va a usar para la imagen de Docker y los comandos de Docker que se le aplicarán.

  • Un archivo deployment.yaml: el manifiesto de Kubernetes que define el servicio y la implementación de Kubernetes.

La estructura de carpetas es la siguiente:

|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile

index.html

El archivo index.html muestra un mensaje “Hello, world!” en el navegador.

Adición del archivo index.html
  1. Vaya a su entorno de desarrollo.

  2. En codecatalyst-eks-source-repository, cree una carpeta llamada public-html.

  3. En /public-html, cree un archivo llamado index.html con el siguiente contenido:

    <html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello, World!</h1> </body> </html>
  4. En la línea de comandos del terminal, escriba:

    cd /projects/codecatalyst-eks-source-repository
  5. Añada, confirme y envíe:

    git add . git commit -m "add public-html/index.html" git push

    El archivo index.html se añade al repositorio en una carpeta public-html.

Dockerfile

El Dockerfile describe la imagen base que se va a usar para la imagen de Docker y los comandos de Docker que se le aplicarán. Para obtener más información acerca del Dockerfile, consulte la Referencia de Dockerfile.

El Dockerfile especificado aquí indica que se debe usar la imagen base de Apache 2.4 (httpd). También incluye instrucciones para copiar un archivo de código fuente llamado index.html en una carpeta del servidor de Apache que sirve páginas web. La instrucción EXPOSE del Dockerfile indica a Docker que el contenedor está escuchando en el puerto 80.

Adición del Dockerfile
  1. En codecatalyst-eks-source-repository, cree un archivo llamado Dockerfile con el siguiente contenido:

    FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80

    No incluya la extensión del archivo.

    importante

    El Dockerfile debe residir en la carpeta raíz de su repositorio. El comando Docker build del flujo de trabajo espera que esté ahí.

  2. Añada, confirme y envíe:

    git add . git commit -m "add Dockerfile" git push

    El Dockerfile se añade a su repositorio.

deployment.yaml

En esta sección, añadirá un archivo deployment.yaml al repositorio. El archivo deployment.yaml es un manifiesto de Kubernetes que define dos tipos o clases de recursos de Kubernetes que se van a ejecutar: un “servicio” y una “implementación”.

  • El “servicio” implementa un equilibrador de carga en Amazon EC2. El equilibrador de carga le proporciona una URL pública con acceso a Internet y un puerto estándar (puerto 80) que puede usar para examinar el mensaje “Hello, World!”. "Hello, World!".

  • La “implementación” implementa tres pods y cada uno de ellos incluirá un contenedor de Docker con el mensaje “Hello, World!”. "Hello, World!". Los tres pods se implementan en los nodos que se crearon al crear el clúster.

El manifiesto de este tutorial es breve; sin embargo, un manifiesto puede incluir cualquier número de tipos de recursos de Kubernetes, como pods, trabajos, entradas y políticas de red. Además, puede usar varios archivos de manifiesto si la implementación es compleja.

Adición de un archivo deployment.yaml
  1. En codecatalyst-eks-source-repository, cree una carpeta llamada Kubernetes.

  2. En /Kubernetes, cree un archivo llamado deployment.yaml con el siguiente contenido:

    apiVersion: v1 kind: Service metadata: name: my-service labels: app: my-app spec: type: LoadBalancer selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: codecatalyst-eks-container # The $REPOSITORY_URI and $IMAGE_TAG placeholders will be replaced by actual values supplied by the build action in your workflow image: $REPOSITORY_URI:$IMAGE_TAG ports: - containerPort: 80
  3. Añada, confirme y envíe:

    git add . git commit -m "add Kubernetes/deployment.yaml" git push

    El archivo deployment.yaml se añade al repositorio en una carpeta llamada Kubernetes.

Ahora ha añadido todos los archivos de código fuente.

Dedique unos minutos a comprobar su trabajo y a asegurarse de que ha colocado todos los archivos en las carpetas correctas. La estructura de carpetas es la siguiente:

|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile

Paso 5: crear roles de AWS

En esta sección, creará los roles de AWS IAM que necesitará su flujo de trabajo de CodeCatalyst para funcionar. Estos roles son:

  • Rol de compilación: concede a la acción de compilación de CodeCatalyst (en el flujo de trabajo) permiso para acceder a su cuenta de AWS y escribir en Amazon ECR y Amazon EC2.

  • Rol de implementación: concede a la acción de CodeCatalyst Implementar en clúster de Kubernetes (en el flujo de trabajo) permiso para acceder a su cuenta de AWS y a Amazon EKS.

Para obtener más información sobre los roles de IAM, consulte Roles de IAM en la Guía del usuario de AWS Identity and Access Management.

nota

Para ahorrar tiempo, puede crear un único rol, denominado rol CodeCatalystWorkflowDevelopmentRole-spaceName, en lugar de los dos roles indicados anteriormente. Para obtener más información, consulte Creación del rol CodeCatalystWorkflowDevelopmentRole-spaceName para su cuenta y su espacio. Tenga en cuenta que el rol CodeCatalystWorkflowDevelopmentRole-spaceName tiene permisos muy amplios, lo que puede suponer un riesgo para la seguridad. Le recomendamos que utilice este rol solo en tutoriales y situaciones en las que la seguridad no sea un problema. En este tutorial se presupone que va a crear los dos roles indicados anteriormente.

Para crear los roles de compilación e implementación, realice la siguiente serie de procedimientos.

1. Creación de una política de confianza para ambos roles
  1. Vaya a su entorno de desarrollo.

  2. En el directorio Cloud9-long-string, cree un archivo llamado codecatalyst-eks-trust-policy.json con el siguiente contenido:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
2. Creación de la política de compilación para el rol de compilación
  • En el directorio Cloud9-long-string, cree un archivo llamado codecatalyst-eks-build-policy.json con el siguiente contenido:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
    nota

    La primera vez que utilice el rol para ejecutar acciones de flujo de trabajo, use el comodín en la instrucción de política de recursos y, a continuación, precise el ámbito de la política con el nombre del recurso cuando esté disponible.

    "Resource": "*"
3. Creación de una política de implementación para el rol de implementación
  • En el directorio Cloud9-long-string, cree un archivo llamado codecatalyst-eks-deploy-policy.json con el siguiente contenido:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListClusters" ], "Resource": "*" } ] }
    nota

    La primera vez que utilice el rol para ejecutar acciones de flujo de trabajo, use el comodín en la instrucción de política de recursos y, a continuación, precise el ámbito de la política con el nombre del recurso cuando esté disponible.

    "Resource": "*"

Ahora ha añadido tres documentos de política a su entorno de desarrollo. La estructura de directorios ahora debería ser similar a la siguiente:

|— Cloud9-long-string |— .c9 |— codecatalyst-eks-source-repository |— Kubernetes |— public-html |— Dockerfile codecatalyst-eks-build-policy.json codecatalyst-eks-deploy-policy.json codecatalyst-eks-trust-policy.json
4. Adición de la política de compilación a AWS
  1. En el terminal del entorno de desarrollo, escriba:

    cd /projects
  2. Escriba:

    aws iam create-policy \ --policy-name codecatalyst-eks-build-policy \ --policy-document file://codecatalyst-eks-build-policy.json
  3. Pulse Intro.

  4. En el resultado del comando, anote el valor de "arn": (por ejemplo, arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy). Necesitará este ARN más adelante.

5. Adición de la política de implementación a AWS
  1. Escriba:

    aws iam create-policy \ --policy-name codecatalyst-eks-deploy-policy \ --policy-document file://codecatalyst-eks-deploy-policy.json
  2. Pulse Intro.

  3. En el resultado del comando, anote el valor de "arn": de la política de implementación (por ejemplo, arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy). Necesitará este ARN más adelante.

6. Creación del rol de compilación
  1. Escriba:

    aws iam create-role \ --role-name codecatalyst-eks-build-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. Pulse Intro.

  3. Escriba:

    aws iam attach-role-policy \ --role-name codecatalyst-eks-build-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy

    Donde arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy se sustituye por el ARN de la política de compilación que anotó anteriormente.

  4. Pulse Intro.

  5. En la línea de comandos del terminal, escriba:

    aws iam get-role \ --role-name codecatalyst-eks-build-role
  6. Pulse Intro.

  7. Anote el valor de "Arn": del rol (por ejemplo, arn:aws:iam::111122223333:role/codecatalyst-eks-build-role). Necesitará este ARN más adelante.

7. Creación del rol de implementación
  1. Escriba:

    aws iam create-role \ --role-name codecatalyst-eks-deploy-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. Pulse Intro.

  3. Escriba:

    aws iam attach-role-policy \ --role-name codecatalyst-eks-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy

    Donde arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy se sustituye por el ARN de la política de implementación que anotó anteriormente.

  4. Pulse Intro.

  5. Escriba:

    aws iam get-role \ --role-name codecatalyst-eks-deploy-role
  6. Pulse Intro.

  7. Anote el valor de "Arn": del rol (por ejemplo, arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role). Necesitará este ARN más adelante.

Ahora ha creado los roles de compilación e implementación y ha anotado sus ARN.

Paso 6: añadir roles de AWS a CodeCatalyst

En este paso, añadirá el rol de compilación (codecatalyst-eks-build-role) y el rol de implementación (codecatalyst-eks-deploy-role) a la Cuenta de AWS que conectó a su espacio. Esto permite que los roles se puedan usar en el flujo de trabajo.

Adición de roles de compilación e implementación a su Cuenta de AWS
  1. En la consola de CodeCatalyst, vaya a su espacio.

  2. En la parte superior, elija Configuración.

  3. En el panel de navegación, elija Cuentas de AWS. Aparece una lista de cuentas.

  4. En la columna Nombre de visualización de Amazon CodeCatalyst, copie el nombre de visualización de la Cuenta de AWS en la que creó los roles de compilación e implementación. (Puede ser un número). Necesitará este valor más adelante, cuando cree el flujo de trabajo.

  5. Elija el nombre de visualización.

  6. Elija Administrar roles desde la Consola de administración de AWS.

    Aparece la página Agregar el rol de IAM al espacio de Amazon CodeCatalyst. Es posible que tenga que iniciar sesión para acceder a la página.

  7. Seleccione Agregar un rol existente que haya creado en IAM.

    Se muestra una lista desplegable. La lista muestra los roles de compilación e implementación, y todos los demás roles de IAM con una política de confianza que incluye las entidades principales de los servicios codecatalyst-runner.amazonaws.com y codecatalyst.amazonaws.com.

  8. En la lista desplegable, añada:

    • codecatalyst-eks-build-role

    • codecatalyst-eks-deploy-role

    nota

    Si aparece The security token included in the request is invalid, es posible que se deba a que no tiene los permisos adecuados. Para solucionar este problema, cierre la sesión de AWS y vuelva a iniciar sesión con la cuenta de AWS que utilizó al crear el espacio de CodeCatalyst.

  9. Vuelva a la consola de CodeCatalyst y actualice la página.

    Los roles de compilación e implementación deberían aparecer ahora en Roles de IAM.

    Estos roles ahora están disponibles para que se usen en los flujos de trabajo de CodeCatalyst.

Paso 7: actualizar el ConfigMap

Debe añadir el rol de implementación que creó en ConfigMap al archivo Paso 5: crear roles de AWS de Kubernetes para que la acción Implementar en clúster de Kubernetes (en su flujo de trabajo) pueda acceder a su clúster e interactuar con él. Puede utilizar eksctl o kubectl para realizar esta tarea.

Configuración del archivo ConfigMap de Kubernetes mediante eksctl
  • En el terminal del entorno de desarrollo, escriba:

    eksctl create iamidentitymapping --cluster codecatalyst-eks-cluster --arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role --group system:masters --username codecatalyst-eks-deploy-role --region us-west-2

    Donde:

    • codecatalyst-eks-cluster se sustituye por el nombre del clúster de Amazon EKS.

    • arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role se sustituye por el ARN del rol de implementación que creó en Paso 5: crear roles de AWS.

    • codecatalyst-eks-deploy-role (junto a --username) se sustituye por el nombre del rol de implementación que creó en Paso 5: crear roles de AWS.

      nota

      Si decidió no crear un rol de implementación, sustituya codecatalyst-eks-deploy-role por el nombre del rol de CodeCatalystWorkflowDevelopmentRole-spaceName. Para obtener más información acerca de este rol, consulte Paso 5: crear roles de AWS.

    • us-west-2 se sustituye por su región.

    Para obtener más información sobre este comando, consulte Administración de usuarios y roles de IAM.

    Aparecerá un mensaje similar al siguiente:

    2023-06-09 00:58:29 [ℹ]  checking arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role against entries in the auth ConfigMap
    2023-06-09 00:58:29 [ℹ]  adding identity "arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role" to auth ConfigMap
Configuración del archivo ConfigMap de Kubernetes mediante kubectl
  1. En el terminal del entorno de desarrollo, escriba:

    kubectl edit configmap -n kube-system aws-auth

    El archivo ConfigMap aparece en la pantalla.

  2. Añada el texto en cursiva de color rojo:

    # Please edit the object below. Lines beginning with a '#' will be ignored,
    # and an empty file will abort the edit. If an error occurs while saving this file will be
    # reopened with the relevant failures.
    #
    apiVersion: v1
    data:
      mapRoles: |
        - groups:
          - system:bootstrappers
          - system:nodes
          rolearn: arn:aws:iam::111122223333:role/eksctl-codecatalyst-eks-cluster-n-NodeInstanceRole-16BC456ME6YR5
          username: system:node:{{EC2PrivateDNSName}}
        - groups:
          - system:masters
          rolearn: arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role
          username: codecatalyst-eks-deploy-role
      mapUsers: |
        []
    kind: ConfigMap
    metadata:
      creationTimestamp: "2023-06-08T19:04:39Z"
      managedFields:
      ...

    Donde:

    • arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role se sustituye por el ARN del rol de implementación que creó en Paso 5: crear roles de AWS.

    • codecatalyst-eks-deploy-role (junto a username:) se sustituye por el nombre del rol de implementación que creó en Paso 5: crear roles de AWS.

      nota

      Si decidió no crear un rol de implementación, sustituya codecatalyst-eks-deploy-role por el nombre del rol de CodeCatalystWorkflowDevelopmentRole-spaceName. Para obtener más información acerca de este rol, consulte Paso 5: crear roles de AWS.

    Para obtener más información, consulte Habilitación del acceso de la entidad principal de IAM a un clúster en la Guía del usuario de Amazon EKS.

Ahora ha proporcionado al rol de implementación y, por extensión, a la acción Implementar en Amazon EKS, permisos system:masters para su clúster de Kubernetes.

Paso 8: crear y ejecutar un flujo de trabajo

En este paso, creará un flujo de trabajo que toma los archivos de código fuente, los compila en una imagen de Docker y, a continuación, implementa la imagen en tres pods en su clúster de Amazon EKS.

El flujo de trabajo consta de los siguientes componentes que se ejecutarán en orden:

  • Un desencadenador: este desencadenador inicia la ejecución automática del flujo de trabajo cuando se introduce un cambio en el repositorio de código fuente. Para obtener más información acerca de los disparadores, consulte Inicio de un flujo de trabajo y ejecución automática mediante desencadenadores.

  • Una acción de compilación (BuildBackend): al activarse, la acción crea la imagen de Docker mediante el Dockerfile y envía la imagen a Amazon ECR. La acción de compilación también actualiza las variables $REPOSITORY_URI y $IMAGE_TAG en el archivo Kubernetes con los valores correctos y, a continuación, crea un artefacto de salida de este archivo y en los demás archivos de la carpeta deployment.yaml. En este tutorial, el único archivo de la carpeta Kubernetes es deployment.yaml, pero puede incluir más archivos. El artefacto se utiliza como entrada para la acción de implementación, que es la siguiente.

    Para obtener más información sobre la acción de compilación, consulte Compilación con flujos de trabajo.

  • Una acción de implementación (DeployToEKS): al completarse la acción de compilación, la acción de implementación busca el artefacto de salida generado por la acción de compilación (Manifests) y encuentra el archivo deployment.yaml que contiene. A continuación, la acción sigue las instrucciones del archivo deployment.yaml para ejecutar tres pods, cada uno de los cuales contiene un único mensaje “Hello, World!”. Contenedor de Docker: dentro de su clúster de Amazon EKS.

Creación de un flujo de trabajo
  1. Vaya a la consola de CodeCatalyst.

  2. Vaya a su proyecto (codecatalyst-eks-project).

  3. En el panel de navegación, elija CI/CD y, a continuación, elija Flujos de trabajo.

  4. Seleccione Crear flujo de trabajo.

  5. En Repositorio de código fuente, elija codecatalyst-eks-source-repository.

  6. En Ramificación, elija main.

  7. Seleccione Crear.

  8. Elimine el código de ejemplo de YAML.

  9. Añada el siguiente código de YAML para crear un nuevo archivo de definición de flujo de trabajo:

    nota

    Para obtener más información sobre el archivo de definición del flujo de trabajo, consulte Definición de flujo de trabajo en YAML.

    nota

    En el código de YAML que se muestra a continuación, puede omitir las secciones Connections: si lo desea. Si omite estas secciones, debe asegurarse de que el rol especificado en el campo Rol de IAM predeterminado del entorno incluya los permisos y las políticas de confianza de ambos roles que se describen en Paso 6: añadir roles de AWS a CodeCatalyst. Para obtener más información sobre cómo configurar un entorno con un rol de IAM predeterminado, consulte Creación de un entorno.

    Name: codecatalyst-eks-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name: codecatalyst-eks-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-build-role Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value: 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo - Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com #build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in deployment.yaml - Run: find Kubernetes/ -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find Kubernetes/ -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat Kubernetes/* # The output artifact will be a zip file that contains Kubernetes manifest files. Outputs: Artifacts: - Name: Manifests Files: - "Kubernetes/*" DeployToEKS: DependsOn: - BuildBackend Identifier: aws/kubernetes-deploy@v1 Environment: Name: codecatalyst-eks-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-deploy-role Inputs: Artifacts: - Manifests Configuration: Namespace: default Region: us-west-2 Cluster: codecatalyst-eks-cluster Manifests: Kubernetes/

    En el código anterior, sustituya:

    • Ambas instancias de codecatalyst-eks-environment por el nombre del entorno que ha creado en Requisitos previos.

    • Ambas instancias de codecatalyst-account-connection por el nombre de visualización de su conexión de cuenta. El nombre de visualización puede ser un número. Para obtener más información, consulte Paso 6: añadir roles de AWS a CodeCatalyst.

    • codecatalyst-eks-build-role por el nombre del rol de compilación que creó en Paso 5: crear roles de AWS.

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo (en la propiedad Value:) por el URI del repositorio de Amazon ECR que creó en Paso 3: crear un repositorio de imágenes de Amazon ECR.

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com (en el comando Run: aws ecr) por el URI del repositorio de Amazon ECR sin el sufijo de imagen (/codecatalyst-eks-image-repo).

    • codecatalyst-eks-deploy-role por el nombre del rol de implementación que creó en Paso 5: crear roles de AWS.

    • Ambas instancias de us-west-2 por el código de su región de AWS. Para obtener una lista de códigos de región, consulte Puntos de conexión regionales en la Referencia general de AWS.

    nota

    Si decidió no crear roles de compilación e implementación, sustituya codecatalyst-eks-build-role y codecatalyst-eks-deploy-role por el nombre del rol de CodeCatalystWorkflowDevelopmentRole-spaceName. Para obtener más información acerca de este rol, consulte Paso 5: crear roles de AWS.

  10. (Opcional) Seleccione Validar para asegurarse de que el código de YAML es válido antes de confirmarlo.

  11. Elija Commit (Confirmar).

  12. En el cuadro de diálogo Confirmar flujo de trabajo, escriba lo siguiente:

    1. En Mensaje de confirmación, elimine el texto e introduzca:

      Add first workflow
    2. En Repositorio, elija codecatalyst-eks-source-repository.

    3. En Nombre de la ramificación, elija principal.

    4. Elija Commit (Confirmar).

    Ahora ha creado un flujo de trabajo. La ejecución del flujo de trabajo se inicia automáticamente debido al desencadenador definido en la parte superior del flujo de trabajo. En concreto, cuando confirmó (e incorporó) el archivo workflow.yaml en su repositorio de código fuente, el desencadenador inició la ejecución del flujo de trabajo.

Consulta del progreso de la ejecución del flujo de trabajo
  1. En el panel de navegación de la consola de CodeCatalyst, elija CI/CD y, a continuación, elija Flujos de trabajo.

  2. Elija el flujo de trabajo que acaba de crear, codecatalyst-eks-workflow.

  3. Elija BuildBackend para ver el progreso de la compilación.

  4. Elija DeployToEKS para ver el progreso de la implementación.

    Para obtener más información sobre cómo ver los detalles de ejecución, consulte Visualización del estado y los detalles de la ejecución de un flujo de trabajo.

Verificación de la implementación
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. A la izquierda, cerca de la parte inferior, seleccione Equilibradores de carga.

  3. Seleccione el equilibrador de carga que se creó como parte de la implementación de Kubernetes. Si no está seguro de qué equilibrador de carga elegir, busque las siguientes etiquetas en la pestaña Etiquetas:

    • kubernetes.io/service-name

    • kubernetes.io/cluster/ekstutorialcluster

  4. Con el equilibrador de carga correcto seleccionado, elija la pestaña Descripción.

  5. Copie y pegue el valor del nombre de DNS en la barra de dirección del navegador.

    Aparece la página web “Hello World!” en el navegador, lo que indica que la aplicación se ha implementado correctamente.

Paso 9: realizar un cambio en los archivos de código fuente

En esta sección, realizará un cambio en el archivo index.html de su repositorio de código fuente. Este cambio hace que el flujo de trabajo cree una nueva imagen de Docker, la etiquete con un ID de confirmación, la envíe a Amazon ECR y la implemente en Amazon ECS.

Cambio del archivo index.html
  1. Vaya a su entorno de desarrollo.

  2. En la línea de comandos del terminal, cambie a su repositorio de código fuente:

    cd /projects/codecatalyst-eks-source-repository
  3. Incorpore los cambios más recientes en el flujo de trabajo:

    git pull
  4. Abra codecatalyst-eks-source-repository/public-html/index.html.

  5. En la línea 14, cambie el texto Hello, World! a Tutorial complete!

  6. Añada, confirme y envíe:

    git add . git commit -m "update index.html title" git push

    Se inicia automáticamente una ejecución del flujo de trabajo.

  7. (Opcional) Escriba:

    git show HEAD

    Anote el ID de confirmación del cambio de index.html. Este ID de confirmación se etiquetará en la imagen de Docker que se implementará en la ejecución del flujo de trabajo que acaba de iniciar.

  8. Observe el progreso de la implementación:

    1. En la consola de CodeCatalyst, en el panel de navegación, elija CI/CD y, a continuación, elija Flujos de trabajo.

    2. Elija codecatalyst-eks-workflow para ver la última ejecución.

    3. Seleccione BuildBackend y DeployToEKS para ver el progreso de la ejecución del flujo de trabajo.

  9. Compruebe que la aplicación se haya actualizado de la siguiente manera:

    1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

    2. A la izquierda, cerca de la parte inferior, seleccione Equilibradores de carga.

    3. Seleccione el equilibrador de carga que se creó como parte de la implementación de Kubernetes.

    4. Copie y pegue el valor del nombre de DNS en la barra de dirección del navegador.

      Aparece la página web “Tutorial Complete!” en el navegador, lo que indica que ha implementado correctamente una nueva revisión de la aplicación.

  10. (Opcional) En AWS, cambie a la consola Amazon ECR y compruebe que la nueva imagen de Docker esté etiquetada con el ID de confirmación del paso 7 de este procedimiento.

Limpieza

Debe limpiar su entorno para que no se le cobre innecesariamente por los recursos de almacenamiento y computación utilizados en este tutorial.

Eliminación
  1. Eliminar el clúster:

    1. En el terminal del entorno de desarrollo, escriba:

      eksctl delete cluster --region=us-west-2 --name=codecatalyst-eks-cluster

      Donde:

      • us-west-2 se sustituye por su región.

      • codecatalyst-eks-cluster se sustituye por el nombre del clúster que ha creado.

      Después de 5-10 minutos, se eliminan el clúster y los recursos asociados, incluidos, entre otros, las pilas de AWS CloudFormation, los grupos de nodos (en Amazon EC2) y los equilibradores de carga.

    importante

    Si el comando eksctl delete cluster no funciona, es posible que deba actualizar sus credenciales de AWS o las de kubectl. Si no está seguro de qué credenciales actualizar, actualice primero las credenciales de AWS. Para actualizar sus credenciales de AWS, consulte ¿Cómo puedo corregir los errores Unable to locate credentials y ExpiredToken?. Para actualizar sus credenciales de kubectl, consulte ¿Cómo puedo corregir los errores de tipo Unable to connect to the server?.

  2. En la consola de AWS, limpie lo siguiente:

    1. En Amazon ECR, elimine codecatalyst-eks-image-repo.

    2. En IAM Identity Center, elimine:

      1. codecatalyst-eks-user

      2. codecatalyst-eks-permission-set

    3. En IAM, elimine:

      • codecatalyst-eks-build-role

      • codecatalyst-eks-deploy-role

      • codecatalyst-eks-build-policy

      • codecatalyst-eks-deploy-policy

  3. En la consola de CodeCatalyst, limpie lo siguiente:

    1. Elimine codecatalyst-eks-workflow.

    2. Elimine codecatalyst-eks-environment.

    3. Elimine codecatalyst-eks-source-repository.

    4. Elimine el entorno de desarrollo.

    5. Elimine codecatalyst-eks-project.

En este tutorial, ha aprendido a implementar una aplicación en un servicio de Amazon EKS mediante un flujo de trabajo de CodeCatalyst y una acción Implementar en clúster de Amazon EKS.