En este tutorial, aprenderá a crear una canalización de lanzamiento de software automatizada que implementa una aplicación de muestra activa. Creará la canalización con AWS CodePipeline, un servicio que compila, prueba e implementa el código cada vez que se produce un cambio en este. Utilizará su cuenta de GitHub, un bucket de Amazon Simple Storage Service (S3) o un repositorio de AWS CodeCommit, como la ubicación de origen del código de la aplicación de muestra. También utilizará AWS Elastic Beanstalk como destino de la implementación para la aplicación de muestra. La canalización completada podrá detectar cambios realizados al repositorio de origen que contiene la aplicación de muestra y actualizar, a continuación, la aplicación de muestra activa.

La implementación continua le permite implementar revisiones en un entorno de producción automáticamente sin la aprobación explícita del desarrollador, con lo que se automatiza todo el proceso de publicación de software.

Todas las operaciones que se explican en este tutorial pueden realizarse con la capa gratuita.

Administración de los recursos de AWS

Inicio de sesión en la consola

La canalización de implementación continua necesitará un entorno de destino que contenga servidores virtuales o instancias de Amazon EC2, donde utilizará código de muestra. Preparará este entorno antes de crear la canalización.


a. Para simplificar el proceso de instalación y configuración de instancias EC2 para este tutorial, pondrá en marcha un entorno de muestra mediante AWS Elastic Beanstalk. Elastic Beanstalk le permite alojar fácilmente aplicaciones web sin tener que lanzar, configurar u operar servidores virtuales. Aprovisiona y opera automáticamente la infraestructura (p. ej., servidores virtuales, balanceadores de carga, etc.) y proporciona la pila de aplicaciones (p. ej., SO, lenguaje y marco, servidor web y de aplicaciones, etc.) por usted.


b. En el menú desplegable, elija PHP, a continuación, haga clic en Launch Now (Lanzamiento inmediato).

Nota: Si ha creado una aplicación Elastic Beanstalk con anterioridad, haga clic en: Create New Application (Crear nueva aplicación) en la esquina superior derecha. Asigne un nombre a la aplicación y cree un entorno de servidor web nuevo. Seleccione PHP como plataforma y Single Instance (Instancia individual) como tipo de entorno. Si tiene previsto iniciar sesión remotamente en sus instancias, seleccione un par de claves. De lo contrario, deje los valores predeterminados para las opciones restantes y cree el entorno para la canalización de implementación continua.

(Haga clic para ampliar).


c. Elastic Beanstalk comenzará creando un entorno de muestra en el que podrá implementar su aplicación. Creará una instancia de Amazon EC2, un grupo de seguridad, un grupo de Auto Scaling, un bucket de Amazon S3, alarmas de Amazon CloudWatch y un nombre de dominio para su aplicación.

Nota: Esto puede tardará varios minutos en completarse.

(Haga clic para ampliar).

En este paso, recuperará una copia del código de muestra de la aplicación y elegirá una fuente para alojar el código. La canalización toma código de la fuente y luego realiza acciones en él.

Puede utilizar una de estas tres opciones como su fuente: un repositorio de GitHub, un bucket de Amazon S3 o un repositorio de AWS CodeCommit. Seleccione su opción preferida y siga los pasos que se indican a continuación:

 

  • GitHub

    a. Si le gustaría utilizar su cuenta GitHub.

    (Haga clic para ampliar).

  • Amazon S3

    a. Si tiene previsto utilizar Amazon S3 como su fuente, recuperará el código de muestra del repositorio de AWS GitHub, lo guardará en su equipo y lo cargará a un bucket de Amazon S3.

    (Haga clic para ampliar).


    b. Guarde los archivos de código fuente en su equipo.

    • Haga clic en el archivo llamado aws-codepipeline-s3-aws-codedeploy_linux.zip 
    • Haga clic en View Raw (Ver sin procesar).
    • Guarde el archivo de muestra en su equipo local.

    (Haga clic para ampliar).


    c. Haga clic aquí para abrir la consola de Amazon S3 y cree su bucket de Amazon S3:

    • Haga clic en Create Bucket (Crear bucket).
    • Bucket Name (Nombre del bucket): escriba un nombre único para el bucket, como por ejemplo awscodepipeline-demobucket-variables.  Todos los nombres de bucket en Amazon S3 deben ser únicos, así que utilice uno que sea suyo, no el nombre que aparece en el ejemplo.
    • Region (Región): en el cuadro desplegable, seleccione la región en la que creará la canalización, como EE.UU. Estándar
    • Haga clic en Create (Crear).

    (Haga clic para ampliar).


    d. La consola muestra el bucket recién creado, que está vacío.

    • Haga clic en Properties (Propiedades).
    • Expanda Versioning (Control de versiones) y seleccione Enable Versioning (Habilitar el control de versiones). Cuando se habilita este control de versiones, Amazon S3 guarda todas las versiones de cada objeto en el bucket.

    (Haga clic para ampliar).


    e. Ahora cargará el código de muestra al bucket de Amazon S3: 

    • Haga clic en Upload (Cargar).
    • Siga las instrucciones de la pantalla para cargar el archivo .zip que contiene el código de muestra que descargó de GitHub.

    (Haga clic para ampliar).

  • AWS CodeCommit

    a. Si tiene previsto utilizar AWS CodeCommit como su fuente, recuperará el código de muestra del repositorio de AWS GitHub, lo guardará en su equipo y lo cargará a un repositorio de AWS CodeCommit.

    (Haga clic para ampliar).


    b. Guarde los archivos de código fuente en su equipo.

    • Seleccione el archivo llamado aws-codepipeline-s3-aws-codedeploy_linux.zip. 
    • Seleccione View Raw.
    • Guarde el archivo de muestra en su equipo local.

    (Haga clic para ampliar).


    d. Haga clic aquí para abrir la consola AWS CodeCommit y seleccione Get Started (Empezar).

    (Haga clic para ampliar).


    e. En la página Create new repository (Crear repositorio nuevo):

    • Repository name (Nombre del repositorio): escriba PipelineRepo.
    • Seleccione Create repository (Crear repositorio).

    (Haga clic para ampliar).


    f. Conéctese a su repositorio y, a continuación, envíele una copia del archivo de muestra.  Para obtener instrucciones, consulte Conectarse a un repositorio de AWS CodeCommit.

En este paso, creará y configurará una canalización sencilla con dos acciones: código fuente e implementación. Proporcionará CodePipeline con las ubicaciones de su repositorio de código fuente y entorno de implementación.


a. Haga clic aquí para abrir la consola de AWS CodePipeline.

  • En la página de bienvenida, haga clic en Create pipeline (Crear canalización)
  • Si es la primera vez que usa AWS CodePipeline, aparece una página de introducción en lugar de la de bienvenida. Haga clic en Get started (Empezar).

(Haga clic para ampliar).


b. En la página Step 1: Name (Paso 1: Nombre):

  • Pipeline name (Nombre de la canalización): escriba el nombre de su canalización, DemoPipeline. 
  • Haga clic en Next Step (Siguiente paso).

Nota: Después de crear una canalización, no podrá cambiar el nombre.

(Haga clic para ampliar).


c. En la página Step 2: Source (Paso 2: Código fuente), seleccione la ubicación del código fuente que ha seleccionado y siga los pasos a continuación:

  • GitHub

    Proveedor de origen: GitHub

    • En la sección Connect to GitHub (Conectarse a GitHub), haga clic en Connect to GitHub (Conectarse a GitHub).
    • Se abrirá una ventana nueva del explorador que lo conectará con GitHub. Si se le solicita iniciar sesión, proporcione sus credenciales de GitHub. 
    • Se le pedirá que autorice el acceso de la aplicación a su cuenta. Elija Authorize application (Autorizar aplicación).

    (Haga clic para ampliar).


    Especifique el repositorio y la ramificación:

    • Repository (Repositorio): En la lista desplegable, elija el repositorio de GitHub que desea usar como ubicación de origen para la canalización. Haga clic en el repositorio adaptado en su cuenta de GitHub que contiene el código de muestra llamado aws-codepipeline-s3-aws-codedeploy_linux
    • Branch (Ramificación): En la lista desplegable, elija la ramificación que desea utilizar, master (maestra).
    • Haga clic en Next Step (Siguiente paso).

    (Haga clic para ampliar).

  • Amazon S3

    Source provider (Proveedor de origen): Amazon S3.

    • Amazon S3 location (Ubicación de Amazon S3): Escriba el nombre del bucket de Amazon S3 que ha creado seguido del archivo de muestra que copió en ese bucket (aws-codepipeline-s3-aws-codedeploy_linux.zip). Por ejemplo, asignó el nombre awscodepipeline-demobucket-variable a su bucket, a continuación debe escribir: s3://awscodepipeline-demobucket-variable/aws-codepipeline-s3-aws-codedeploy_linux.zip.
    • Haga clic en Next Step (Siguiente paso).

    (Haga clic para ampliar).

  • AWS CodeCommit

    Source provider (Proveedor de origen): AWS CodeCommit.

    • Repository name: (Nombre del repositorio): Elija el nombre del repositorio de AWS CodeCommit. 
    • Branch name (Nombre de la ramificación): Elija el nombre de la ramificación que contiene el archivo de muestra.
    • Haga clic en Next Step (Siguiente paso).

    (Haga clic para ampliar).


d. Una canalización de implementación continua de verdad necesita una etapa de compilación en la que se compila código y se comprueba la unidad. CodePipeline le permite conectar a la canalización su proveedor de compilación preferido. No obstante, en este tutorial omitirá la etapa de compilación.

  • En la página Step 3: Build (Paso 3: Compilación), elija No Build (Sin compilación).
  • Haga clic en Next Step (Siguiente paso).

 

(Haga clic para ampliar).


e. En la página Step 4: Beta (Paso 4: Beta):

  • Deployment provider (Proveedor de implementación): Haga clic en AWS Elastic Beanstalk. 
  • Application name (Nombre de la aplicación): Haga clic en My First Elastic Beanstalk Application (Mi primera aplicación de Elastic Beanstalk). 
  • Environment name (Nombre del entorno): Haga clic en Default-Environment.
  • Haga clic en Next Step (Siguiente paso).

Nota: El nombre "Beta" es simplemente el nombre asignado de manera predeterminada a esta etapa de la canalización, al igual que "Source" era el nombre asignado a la primera etapa de la canalización.

(Haga clic para ampliar).


f. En la página Step 5: Service Role (Paso 5: Rol de servicio)

  • Service Role (Rol de servicio): Haga clic en Create role (Crear rol).
  • Se le redirigirá a una página de la consola de IAM que describe el rol de AWS-CodePipeline-Service que se creará por usted. Haga clic en Allow.
  • En cuanto se cree el rol, se le devolverá a la página Step 5: Service Role (Paso 5: Rol de servicio) donde aparecerá AWS-CodePipeline-Service en el nombre del rol. Haga clic en Next step (Siguiente paso).

Nota: Solo es necesario crear el rol de servicio la primera vez que cree una canalización en AWS CodePipeline. Si ya se ha creado un rol de servicio, podrá elegirlo en la lista desplegable de roles. Como la lista desplegable mostrará todos los roles de servicio de IAM asociados con su cuenta, si elige un nombre distinto del predeterminado asegúrese de que se pueda reconocer como el rol de servicio de AWS CodePipeline.

(Haga clic para ampliar).

En este paso, lanzará su canalización. Una vez que se ha creado la canalización, comenzará a ejecutarse automáticamente. En primer lugar, detecta el código de la aplicación de muestra en la ubicación del código fuente, empaqueta los archivos y, a continuación, los traslada a la segunda etapa que ha definido. Durante esta etapa, pasa el código a Elastic Beanstalk, que contiene la instancia EC2 donde se alojará su código. Elastic Beanstalk se encarga de la implementación del código en la instancia EC2.


a. En la página Step 6: Review (Paso 6: Revisar), revise la información y haga clic en Create pipeline (Crear canalización).

(Haga clic para ampliar).


b. Una vez creada la canalización, aparece la página de estado de la canalización y la canalización comienza a ejecutarse automáticamente. Puede ver el progreso y los mensajes de éxito y error a medida que la canalización realiza cada acción.

Para verificar que la canalización se ha ejecutado con éxito, monitoree el progreso de la canalización a medida que avanza por cada etapa. El estado de cada fase cambiará de No executions yet a In Progress y después a Succeeded o Failed. La canalización debería completar la primera ejecución en unos minutos.

(Haga clic para ampliar).


c. En el área de estado de la etapa Beta, haga clic en AWS Elastic Beanstalk

(Haga clic para ampliar).


d. La consola AWS Elastic Beanstalk se abre con detalles de la implementación.

  • Haga clic en el entorno que creó con anterioridad llamado Default-Environment

(Haga clic para ampliar).


e. Haga clic en la URL que aparece en la parte superior derecha de la página para ver el sitio web de muestra que ha implementado.

(Haga clic para ampliar).

En este paso, revisará el código de muestra y confirmará el cambio en el repositorio. CodePipeline detectará el código de muestra actualizado e iniciará automáticamente su implementación en la instancia EC2 a través de Elastic Beanstalk. 

Tenga en cuenta que la página web de muestra que ha implementado hace referencia a AWS CodeDeploy, un servicio que automatiza las implementaciones de código. En CodePipeline, CodeDeploy es una alternativa al uso de Elastic Beanstalk para la implementación de acciones. Vamos a actualizar el código de muestra para que indique de forma correcta que ha implementado la muestra mediante Elastic Beanstalk.

  • GitHub

    a. Visite su copia del repositorio que adaptó en GitHub.

    • Abra index.html
    • Seleccione el icono de edición.

    (Haga clic para ampliar).


    b. Actualice la página web copiando y pegando el siguiente texto en la línea 30: 

    Ha creado con éxito una canalización que recuperó esta aplicación de origen de GitHub y la ha implementado en una instancia de Amazon EC2 mediante AWS Elastic Beanstalk. Está un paso más cerca de practicar la implementación continua.

    (Haga clic para ampliar).


    c. Confirme el cambio realizado en el repositorio.

    (Haga clic para ampliar).

  • Amazon S3

    a. En el escritorio, visite el archivo comprimido descargado llamado aws-codepipeline-s3-aws-codedeploy_linux.zip.


    b. Edite el código de la aplicación web de muestra:

    • Extraiga index.html del archivo comprimido y ábralo con su editor de texto preferido. 
    • Actualice el texto del encabezamiento que viene después de “¡Enhorabuena!” de manera que diga:

    “Ha creado con éxito una canalización que recuperó esta aplicación de origen de Amazon S3 y la ha implementado en una instancia de Amazon EC2 mediante AWS Elastic Beanstalk. Está un paso más cerca de practicar la implementación continua”.

    • Vuelva a copiar el archivo index.html actualizado en aws-codepipeline-s3-aws-codedeploy_linux.zip y sustituya la versión antigua de index.html.

    (Haga clic para ampliar).


    c. Vuelva a cargar el archivo editado en el bucket de Amazon S3:

    • Regrese al bucket de S3 que creó anteriormente. 
    • Cargue el archivo aws-codepipeline-s3-aws-codedeploy_linux.zip actualizado en el bucket. 

    Nota: Debido a que habilitó el control de versiones cuando creó el bucket de S3 por primera vez, S3 guardará una copia de cada versión de sus archivos.

    (Haga clic para ampliar).

  • AWS CodeCommit

    a. Visite el archivo comprimido que contiene el código de muestra que descargó llamado aws-codepipeline-s3-aws-codedeploy_linux.zip.


    b. Edite el código de la aplicación web de muestra:
     
    • Extraiga index.html del archivo comprimido y ábralo con su editor de texto preferido. 
    • A continuación, actualice el texto del encabezamiento que viene después de “¡Enhorabuena!” de manera que diga:

    Ha creado con éxito una canalización que recuperó esta aplicación de origen de AWS CodeCommit y la ha implementado en una instancia de Amazon EC2 mediante AWS Elastic Beanstalk. Está un paso más cerca de practicar la implementación continua.

    (Haga clic para ampliar).


    c. Confirme e inserte el archivo comprimido actualizado en el repositorio de CodeCommit.


d. Regrese a su canalización en la consola de CodePipeline. Transcurridos unos minutos, debería ver cómo la fuente cambia a azul, lo que indica que la canalización ha detectado los cambios que ha realizado en el repositorio de código fuente. Una vez que esto suceda, llevará automáticamente el código actualizado a Elastic Beanstalk.

  • Cuando el estado de la canalización sea Succeeded (Realizado correctamente), en el área de estado de la etapa Beta, haga clic en AWS Elastic Beanstalk.

(Haga clic para ampliar).


e. La consola AWS Elastic Beanstalk se abre con detalles de la implementación. Seleccione el entorno que creó con anterioridad llamado Default-Environment.

(Haga clic para ampliar).


f. Haga clic en la URL que aparece en la parte superior derecha de la página para ver de nuevo el sitio web de muestra.  Su texto se ha actualizado automáticamente a través de la canalización de implementación continua.

 

(Haga clic para ampliar).

Para evitar cargos en el futuro, eliminará todos los recursos que lanzó durante este tutorial, entre los que se incluyen la canalización, la aplicación Elastic Beanstalk y la fuente que configuró para alojar el código.  


a. En primer lugar, elimine la canalización:

  • En la página para ver la canalización, haga clic en Edit (Editar)
  • Haga clic en Delete (Eliminar).
  • Escriba el nombre de la canalización y haga clic en Delete (Eliminar).

(Haga clic para ampliar).


b. En segundo lugar, elimine la aplicación Elastic Beanstalk:

  • Visite la consola de Elastic Beanstalk. 
  • Haga clic en Actions (Acciones).
  • Luego haga clic en Terminate Environment (Terminar el entorno).

(Haga clic para ampliar).

  • Amazon S3

    c. Si creó un bucket de S3 para este tutorial, elimine el bucket que creó:

    • Visite la consola de S3. 
    • Haga clic con el botón derecho en el nombre del bucket y seleccione Delete Bucket (Eliminar bucket)
    • Cuando aparezca un mensaje de confirmación, escriba el nombre del bucket y haga clic en Delete (Eliminar).

    (Haga clic para ampliar).

  • AWS CodeCommit

    c. Si creó un repositorio de AWS CodeCommit para este tutorial, visite la consola de CodeCommit y elimine el repositorio que creó:

    (Haga clic para ampliar).


    c. En el panel de navegación, seleccione Settings (Configuración).

    • Haga clic en Delete Repository (Eliminar repositorio).
    • Aparecerá una ventana de confirmación. Escriba el nombre del repositorio y haga clic en Delete (Eliminar).

    (Haga clic para ampliar).

Ha creado con éxito una canalización de publicación de software automatizada mediante AWS CodePipeline. Ha creado mediante CodePipeline una canalización que utiliza GitHub, Amazon S3 o AWS CodeCommit como la ubicación de origen para el código de la aplicación e implementa, a continuación, el código a una instancia de Amazon EC2 administrada por AWS Elastic Beanstalk. Su canalización implementará automáticamente su código cada vez que se produzca un cambio de código. Está un paso más cerca de practicar la implementación continua.

Ahora que ha aprendido a crear una canalización sencilla mediante AWS CodePipeline, puede obtener más información consultando los siguientes recursos:

  • Cree una canalización más avanzada de cuatro etapas siguiendo está guía. Esta canalización utiliza el repositorio de GitHub para su código fuente, un servidor de compilación Jenkins para compilar y probar el proyecto y una aplicación AWS CodeDeploy para implementar el código compilado en un servidor de ensayo.
  • Ponga en marcha rápidamente una canalización de cuatro etapas con un servidor de compilación Jenkins mediante nuestro kit de inicio para canalizaciones.
  • Más información sobre la distribución continua.