Tutorial: Crear una canalización simple (bucket de S3) - AWS CodePipeline

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

Tutorial: Crear una canalización simple (bucket de S3)

La forma más sencilla de crear una canalización es utilizar el asistente Create pipeline (Crear canalización) en la consola de AWS CodePipeline.

En este tutorial, va a crear una canalización de dos etapas que utiliza un bucket de S3 con control de versiones y CodeDeploy para lanzar una aplicación de ejemplo.

nota

Si Amazon S3 es el proveedor de código fuente de la canalización, debe comprimir los archivos de código fuente en un solo archivo.zip y cargarlo en el bucket de código fuente. También puede cargar un archivo sin comprimir; sin embargo, se producirá un error en las acciones posteriores que esperan un archivo.zip.

Una vez creada esta canalización simple, le agregará otra etapa para después deshabilitar y volver a habilitar la transición entre etapas.

importante

Muchas de las acciones que agrega a su canalización en este procedimiento implican recursos de AWS que debe crear antes de crear la canalización. Los recursos de AWSpara las acciones de código fuente siempre deben crearse en la misma región de AWS en la que se creó la canalización. Por ejemplo, si crea la canalización en la región Este de EE. UU. (Ohio) , el repositorio de CodeCommit debe estar en la región Este de EE. UU. (Ohio).

Puede añadir acciones entre regiones al crear su canalización. Los recursos de AWS para las acciones entre regiones deben estar en la misma región de AWS en la que planea ejecutar la acción. Para obtener más información, consulte Agregar una acción entre regiones en CodePipeline.

Antes de comenzar, debe completar los requisitos previos de Introducción a CodePipeline.

Paso 1: Crear un bucket de S3 para la aplicación

Puede almacenar sus aplicaciones o archivos de código fuente en cualquier ubicación con control de versiones. En este tutorial, va a crear un bucket de S3 para los archivos de la aplicación de ejemplo y a habilitar en él el control de versiones. Una vez habilitado el control de versiones, copiará las aplicaciones de ejemplo a ese bucket.

Para crear un bucket de S3
  1. Inicie sesión en la consola en AWS Management Console. Abra la consola de S3.

  2. Elija Crear bucket.

  3. En Bucket Name (Nombre del bucket), escriba el nombre del bucket (por ejemplo: awscodepipeline-demobucket-example-date).

    nota

    Como todos los nombres de bucket en Amazon S3 deben ser únicos, elija un nombre que no sea el que aparece en el ejemplo. Puede cambiar el nombre del ejemplo simplemente añadiéndole la fecha. Anote este nombre, ya que lo necesitará durante el resto de este tutorial.

    En Región, elija la región en la que quiere crear la canalización (por ejemplo, Oeste de EE. UU. (Oregón)) y elija Crear bucket.

  4. Una vez creado el bucket, aparecerá un banner donde se indicará que la operación se ha realizado correctamente. Elija Go to bucket details (Acceder a los detalles del bucket).

  5. En la pestaña Properties (Propiedades), elija Versioning (Control de versiones). Elija Enable versioning (Habilitar control de versiones) y haga clic en Save (Guardar).

    Cuando se habilita este control de versiones, Amazon S3 guarda todas las versiones de cada objeto en el bucket.

  6. En la pestaña Permissions (Permisos), deje los valores predeterminados. Para obtener más información sobre los permisos de los objetos y los buckets de S3, consulte Especificación de permisos en una política.

  7. A continuación, descargue un ejemplo y guárdelo en una carpeta o directorio del equipo local.

    1. Elija una de las siguientes opciones. Elija SampleApp_Windows.zip si desea seguir los pasos de este tutorial en instancias de Windows Server.

      • Si desea realizar la implementación en instancias de Amazon Linux utilizando CodeDeploy, descargue la aplicación de ejemplo aquí: SampleApp_Linux.zip.

      • Si desea realizar la implementación en instancias de Windows Server utilizando CodeDeploy, descargue la aplicación de ejemplo aquí: SampleApp_Windows.zip.

      La aplicación de ejemplo contiene los siguientes archivos para su implementación con CodeDeploy:

      • appspec.yml: el archivo de especificaciones de la aplicación (archivo AppSpec) es un archivo con formato YAML que CodeDeploy utiliza para administrar una implementación. Para obtener más información acerca del archivo AppSpec, consulte Referencia de AppSpec File de CodeDeploy en la Guía del usuario de AWS CodeDeploy.

      • index.html: el archivo de índice contiene la página de inicio de la aplicación de ejemplo implementada.

      • LICENSE.txt: el archivo de licencia contiene la información de licencia de la aplicación de ejemplo.

      • Archivos para scripts: la aplicación de ejemplo usa scripts para escribir archivos de texto en una ubicación de la instancia. Se escribe un archivo para cada uno de los diversos eventos del ciclo de vida de implementación de CodeDeploy de la siguiente manera:

        • (Solo ejemplos de Linux) Carpeta scripts: la carpeta contiene los siguientes scripts de intérprete de comandos para instalar las dependencias e iniciar y detener la aplicación de ejemplo para la implementación automatizada: install_dependencies, start_server y stop_server.

        • (Solo ejemplo de Windows) before-install.bat: se trata de un script por lotes para el evento de ciclo de vida de implementación, que se ejecutará para eliminar los archivos antiguos escritos durante implementaciones anteriores de este ejemplo y crear una ubicación en su instancia en la que escribir los archivos nuevos.

    2. Descargue el archivo comprimido (en zip). No descomprima el archivo.

  8. En la consola de Amazon S3, para su bucket suba el archivo:

    1. Seleccione Cargar.

    2. Arrastre y suelte el archivo o elija Add files (Agregar archivos) y busque el archivo.

    3. Seleccione Cargar.

Paso 2: Crear una instancia de Amazon EC2 de Windows e instalar el agente de CodeDeploy

nota

Este tutorial contiene ejemplos de los pasos necesarios para crear instancias de Amazon EC2 de Windows. Si desea ver los pasos de ejemplo para crear instancias de Amazon EC2 para Linux, consulte Paso 3: Crear una instancia de Amazon EC2 de Linux e instalar el agente de CodeDeploy. Cuando le pidan el número de instancias que se van a crear, especifique 2 instancias.

En este paso, va a crear instancias de Amazon EC2 de Windows Server en las que implementará una aplicación de ejemplo. Como parte de este proceso, cree un rol de instancia con políticas que permitan instalar y administrar el agente de CodeDeploy en las instancias. Este agente de CodeDeploy es un paquete de software que permite utilizar una instancia en las implementaciones de CodeDeploy. También asocia políticas que permiten a la instancia recuperar los archivos que el agente CodeDeploy utiliza para implementar la aplicación y permitir que SSM administre la instancia.

Para crear un rol de instancia
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de la consola, elija Roles.

  3. Elija Crear rol.

  4. En Seleccionar el tipo de entidad de confianza, seleccione Servicio de AWS. En Choose a use case (Elija un caso de uso), seleccione EC2 y Next: Permissions (Siguiente: Permisos).

  5. Busque y seleccione la política denominada AmazonEC2RoleforAWSCodeDeploy.

  6. Busque y seleccione la política denominada AmazonSSMManagedInstanceCore. Elija Siguiente: Etiquetas.

  7. Elija Siguiente: Revisar. Escriba el nombre del rol (por ejemplo, EC2InstanceRole).

    nota

    Anote el nombre del rol para utilizarlo en el siguiente paso. Tendrá que elegir este rol cuando cree la instancia.

    Elija Crear rol.

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

  2. En la barra de navegación lateral, elija Instancias y seleccione Lanzar instancias en la parte superior de la página.

  3. En Nombre y etiquetas, en Nombre, introduzca MyCodePipelineDemo. Esto asigna a las instancias una clave de etiqueta Name y un valor de etiqueta MyCodePipelineDemo. Más adelante, se crea una aplicación de CodeDeploy que implementa la aplicación de ejemplo en las instancias. CodeDeploy selecciona las instancias que se van a implementar en función de las etiquetas.

  4. En Imágenes de aplicaciones y sistema operativo (imagen de máquina de Amazon), elija Windows. (Esta AMI se describe como Microsoft Windows Server 2019 Base y tiene la etiqueta "Free tier eligible" (Apta para el nivel gratuito) y se encuentra en Inicio rápido).

  5. En Tipo de instancia, elija el tipo t2.micro apto para la capa gratuita como configuración de hardware de la instancia.

  6. En Par de claves (inicio de sesión), seleccione un par de claves o cree uno.

    Puede elegir Continuar sin un par de claves.

    nota

    A efectos de este tutorial, puede continuar sin utilizar un par de claves. Si desea usar SSH para conectarse a sus instancias, cree o use un par de claves.

  7. En Configuración de red, haga lo siguiente:

    En Asignar automáticamente IP pública, asegúrese de que el estado sea Activar.

    • Junto a Assign a security group (Asignar un grupo de seguridad), elija Create a new security group (Crear un nuevo grupo de seguridad).

    • En la fila de SSH, en Tipo de origen, elija Mi IP.

    • Elija Añadir grupo de seguridad, HTTP y en Tipo de origen, elija Mi IP.

  8. Amplíe Advanced details (Detalles avanzados). En Perfil de instancia de IAM, elija el rol de IAM que creó en el procedimiento anterior (por ejemplo, EC2InstanceRole).

  9. En Resumen, en Número de instancias, introduzca 2.

  10. Seleccione Lanzar instancia.

  11. Elija View all instances (Ver todas las instancias) para cerrar la página de confirmación y volver a la consola.

  12. Puede ver el estado del lanzamiento en la página Instances. Al lanzar una instancia, su estado inicial es pending. Una vez iniciada la instancia, el estado cambia a running y recibe un nombre de DNS público. (Si la columna Public DNS no se muestra, haga clic en el icono Show/Hide y después seleccione Public DNS.)

  13. Puede que transcurran unos minutos hasta que la instancia esté lista para conectarse. Verifique que su instancia ha pasado las comprobaciones de estado. Puede ver esta información en la columna Status Checks (Comprobaciones de estado).

Paso 3: Crear una aplicación en CodeDeploy

En CodeDeploy, una aplicación es un identificador, en forma de nombre, para el código que se quiere implementar. CodeDeploy utiliza este nombre para asegurarse de que se haga referencia a la combinación correcta de revisión, configuración de implementación y grupo de implementación durante la implementación. Al crear su canalización en pasos posteriores de este tutorial, seleccionará el nombre de la aplicación de CodeDeploy creada en este paso.

Primero debe crear un rol de servicio para que lo utilice CodeDeploy. Si ya ha creado un rol de servicio, no necesita crear otro.

para crear un rol de servicio de CodeDeploy
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de la consola, elija Roles.

  3. Elija Crear rol.

  4. En Seleccionar entidad de confianza, elija Servicio de AWS. En Caso de uso, elija CodeDeploy. Elija CodeDeploy de las opciones de la lista. Elija Siguiente. La política administrada AWSCodeDeployRole ya está asociada al rol.

  5. Elija Siguiente.

  6. Especifique un nombre para el rol (por ejemplo, CodeDeployRole) y elija Create role (Crear rol).

Para crear una aplicación en CodeDeploy
  1. Abra la consola de CodeDeploy en https://console.aws.amazon.com/codedeploy.

  2. Si la página Aplicaciones no aparece, en el menú AWS de CodeDeploy, elija Aplicaciones.

  3. Elija Crear aplicación.

  4. En Application name (Nombre de aplicación), escriba MyDemoApplication.

  5. En Plataforma de informática, elija EC2/On-Premises.

  6. Elija Crear aplicación.

Para crear el grupo de implementación en CodeDeploy
  1. En la página que muestra su aplicación, elija Create deployment group (Crear grupo de implementaciones).

  2. En Nombre de grupo de implementación, escriba MyDemoDeploymentGroup.

  3. En Rol de servicio, elija el rol de servicio de que creó anteriormente. Debe usar un rol de servicio que confíe en utilizando como mínimo la confianza y los permisos que se describen en AWSCrear un rol de servicio para CodeDeploy. Para obtener el ARN del rol de servicio, consulte Obtención del ARN del rol de servicio (consola).

  4. En Deployment type (Tipo de implementación), elija In-place (In situ).

  5. En Environment configuration (Configuración de entorno), elija Amazon EC2 Instances (Instancias de Amazon EC2). Elija Name (Nombre) en el campo Key (Clave) y, en el campo Value (Valor), escriba MyCodePipelineDemo.

    importante

    En la clave Nombre, debe elegir el mismo valor que asignó a la instancia EC2 cuando la creó. Si etiquetó la instancia con un término distinto de MyCodePipelineDemo, asegúrese de usarlo aquí.

  6. En Configuración del agente con AWS Systems Manager), seleccione Ahora y programe las actualizaciones. Primero, instale el agente en la instancia. La instancia de Windows ya está configurada con el agente SSM y ahora se actualizará con el agente CodeDeploy.

  7. En Configuración de implementación, elija CodeDeployDefault.OneAtaTime.

  8. En Equilibrador de carga, asegúrese de que no esté seleccionado el cuadro Habilitar equilibrio de carga. No es necesario configurar un balanceador de carga ni elegir un grupo de destino para este ejemplo. Tras anular la selección de la casilla de verificación, no se muestran las opciones del equilibrador de carga.

  9. En la sección Avanzado, deje los valores predeterminados.

  10. Elija Crear grupo de implementación.

Paso 4: Crear la primera canalización en CodePipeline

En esta parte del tutorial se crea la canalización. El ejemplo se ejecuta automáticamente en la canalización.

Para crear un proceso de lanzamiento automatizado de CodePipeline
  1. Inicie sesión en la AWS Management Console y abra la consola de CodePipeline en http://console.aws.amazon.com/codesuite/codepipeline/home.

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

  3. En Step 1: Choose pipeline settings (Paso 1: Elegir configuración de canalización), en Pipeline name (Nombre de canalización), escriba MyFirstPipeline.

    nota

    Si elige otro nombre para la canalización, utilícelo en lugar de MyFirstPipeline durante el resto de este tutorial. Después de crear una canalización, no podrá cambiar el nombre. Los nombres de canalizaciones están sujetos a algunas limitaciones. Para obtener más información, consulte Cuotas en AWS CodePipeline.

  4. En Tipo de canalización, elija V1 para los fines de este tutorial. También puede elegir V2; sin embargo, tenga en cuenta que los tipos de canalización difieren en cuanto a características y precio. Para obtener más información, consulte Tipos de canalización.

  5. En Service role (Rol de servicio), realice una de las operaciones siguientes:

    • Elija Nuevo rol de servicio para permitir que CodePipeline cree un rol de servicio en IAM.

    • Elija Existing service role (Rol de servicio existente) para utilizar un rol de servicio que ya se ha creado en IAM. En Role name (Nombre del rol), elija el nombre del rol de servicio en la lista.

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

  7. En el Step 2: Add source stage (Paso 2: Añadir una etapa de código fuente), en Source provider (Proveedor de código fuente), elija Amazon S3. En Bucket, escriba el nombre del bucket de S3·que creó en Paso 1: Crear un bucket de S3 para la aplicación. En la clave del objeto de S3, escriba la clave del objeto con o sin una ruta de archivo y recuerde incluir la extensión de archivo. Por ejemplo, en SampleApp_Windows.zip, escriba el nombre del archivo de ejemplo tal y como aparece en este ejemplo:

    SampleApp_Windows.zip

    Elija Next Step (Paso siguiente).

    En Change detection options, deje los valores predeterminados. Esto permite a CodePipeline utilizar Eventos de Amazon CloudWatch para detectar cambios en su bucket de código fuente.

    Elija Siguiente.

  8. En Step 3: Add build stage (Paso 3: Añadir etapa de compilación), elija Skip build stage (Omitir etapa de compilación) y, a continuación, acepte el mensaje de advertencia eligiendo Skip (Omitir) una vez más. Elija Siguiente.

  9. En el Paso 4: Añadir una etapa de implementación, en Proveedor de implementación, elija CodeDeploy. El campo Región se establece de forma predeterminada en la misma Región de AWS que la canalización. En Application name (Nombre de la aplicación), escriba MyDemoApplication o haga clic en el botón Refresh (Actualizar) y, a continuación, elija el nombre de la aplicación en la lista. En Deployment group (Grupo de implementación), escriba MyDemoDeploymentGroup o elija un grupo de la lista. A continuación, elija Next (Siguiente).

    nota

    El nombre "Deploy" (Implementación) es el que se asigna de forma predeterminada a la etapa creada en Step 4: Add deploy stage (Paso 4: Agregar la etapa de implementación), mientras que "Source" (Código fuente) es el nombre que recibe la primera etapa de la canalización.

  10. En Step 5: Review, revise la información y después elija Create pipeline.

  11. La canalización comienza a ejecutarse. Puede ver el progreso y los mensajes de éxito y error a medida que la muestra de CodePipeline implementa una página web en cada instancia de Amazon EC2 dentro de la implementación de CodeDeploy.

¡Enhorabuena! Acaba de crear una canalización sencilla en CodePipeline. La canalización tiene dos etapas:

  • Una etapa denominada Source (Código fuente), que detecta los cambios en la aplicación de ejemplo con control de versiones almacenada en el bucket de S3 y los transfiere a la canalización.

  • Una etapa Implementación que implementa dichos cambios en las instancias EC2 con CodeDeploy.

Ahora compruebe los resultados.

Para comprobar que la canalización se ha ejecutado correctamente
  1. Vea el progreso inicial de la canalización. El estado de cada etapa cambia de No executions yet (Sin ejecuciones) a In Progress (En curso) y después a Succeeded (Realizado correctamente) o Failed (Error). La canalización debería completar la primera ejecución en unos minutos.

  2. Cuando el estado de la acción aparezca como Realizado correctamente, en el área de estado de la etapa Implementar, elija Detalles. Se abrirá la consola de CodeDeploy.

  3. En la pestaña Grupo de implementaciones de la sección Eventos del ciclo de vida de la implementación, elija el ID de la instancia. Se abrirá la consola de EC2.

  4. En la pestaña Description (Descripción), en Public DNS (DNS público), copie la dirección y después péguela en la barra de direcciones de su explorador web. Vea la página de índice de la aplicación de ejemplo que cargó en el bucket de S3.

    La página web muestra la aplicación de ejemplo que cargó en el bucket de S3.

Para obtener más información sobre las etapas, las acciones y cómo funcionan las canalizaciones, consulte CodePipeline conceptos .

(Opcional) Paso 5: Agregar otra etapa a la canalización

Ahora agregaremos otra etapa a la canalización para implementar desde los servidores de ensayo a los servidores de producción utilizando CodeDeploy. En primer lugar, debe crear otro grupo de implementación en la aplicación CodePipelineDemoApplication de CodeDeploy. A continuación tiene que añadir una etapa con una acción que utilice ese grupo de implementaciones. Para añadir otra etapa, utilice la consola de CodePipeline o la AWS CLI para obtener y editar manualmente la estructura de la canalización en un archivo JSON y, a continuación, ejecute el comando update-pipeline para actualizar la canalización con los cambios efectuados.

Crear un segundo grupo de implementación en CodeDeploy

nota

En esta parte del tutorial, va a crear un segundo grupo de implementaciones, pero la implementación se hará en las mismas instancias de Amazon EC2 usadas anteriormente. Esto solo se hace con fines ilustrativos. La intención es que el diseño falle para poder ver el modo en que se muestran los errores en CodePipeline.

Para crear un segundo grupo de implementación en CodeDeploy
  1. Abra la consola de CodeDeploy en https://console.aws.amazon.com/codedeploy.

  2. Elija Applications (Aplicaciones) y, en la lista de aplicaciones, elija MyDemoApplication.

  3. Elija la pestaña Deployment groups (Grupos de implementaciones) y , a continuación, Create deployment group (Crear grupo de implementaciones).

  4. En la página Create deployment group (Crear grupo de implementaciones), en Deployment group name (Nombre de grupo de implementaciones), escriba un nombre para el segundo grupo de implementaciones, como CodePipelineProductionFleet.

  5. En Rol de servicio, seleccione el mismo rol de servicio de CodeDeploy que utilizó para la implementación inicial (no el rol de servicio de CodePipeline).

  6. En Deployment type (Tipo de implementación), elija In-place (In situ).

  7. En Environment configuration (Configuración de entorno), elija Amazon EC2 Instances (Instancias de Amazon EC2). Elija Name (Nombre) el cuadro Key (Clave) y en el cuadro Value (Valor), seleccione MyCodePipelineDemo de la lista. Mantenga la configuración predeterminada de Deployment settings (Ajustes de implementación).

  8. En Deployment configuration (Configuración de implementación), elija CodeDeployDefault.OneAtaTime.

  9. En Load Balancer (Balanceador de carga), anule la selección de Enable load balancing (Habilitar balanceo de carga).

  10. Elija Crear grupo de implementación.

Agregar el grupo de implementación como otra etapa de la canalización

Ahora que tiene otro grupo de implementación, puede agregar una etapa que lo utilice para realizar la implementación en las mismas instancias EC2 que usamos antes. Puede utilizar la consola de CodePipeline o la AWS CLI para añadir la etapa.

Crear una tercera etapa (consola)

Puede usar la consola de CodePipeline para añadir una nueva etapa que use el nuevo grupo de implementaciones. Como este grupo de implementación utiliza las instancias EC2 que ya habíamos empleado, la acción de implementación en esta etapa produce un error.

  1. Inicie sesión en la AWS Management Console y abra la consola de CodePipeline en http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. En Nombre, elija el nombre de la canalización que ha creado, MyFirstPipeline.

  3. En la página de detalles de la canalización, elija Edit.

  4. En la página Edit (Editar), elija + Add stage (Añadir etapa) para añadir una etapa inmediatamente después de la etapa Deploy (Implementar).

  5. En Add stage (Añadir etapa), in Stage name (Nombre de etapa), escriba Production. Elija Add stage (Añadir etapa).

  6. En la nueva etapa, elija +Add action group (+Añadir grupo de acciones).

  7. En Edit action (Editar acción), en Action name (Nombre de acción), escriba Deploy-Second-Deployment. En Proveedor de acción, en Implementar, elija CodeDeploy.

  8. En la sección CodeDeploy, en Nombre de la aplicación, elija en la lista desplegable, tal como hizo al crear la canalización. En Deployment group (Grupo de implementación), elija el grupo de implementaciones que acaba de crear, CodePipelineProductionFleet. En Input artifacts (Artefactos de entrada), elija el artefacto de entrada de la acción de origen. Elija Guardar.

  9. En la página Edit (Editar), elija Save (Guardar). En Save pipeline changes (Guardar los cambios de la canalización), elija Save (Guardar).

  10. Aunque se ha añadido la nueva etapa a la canalización, aparece el estado No executions yet (Sin ejecuciones) porque no se han producido cambios que activen otra ejecución de la canalización. Tiene que volver a ejecutar manualmente la última revisión para ver cómo se ejecuta la canalización editada. En la página de detalles de canalización, elija Liberar cambio y, a continuación, elija Liberar cuando se le solicite. Esto ejecuta la revisión más reciente disponible en cada ubicación de código fuente especificada en una acción de código fuente a través de la canalización.

    Como alternativa, para usar la AWS CLI para volver a ejecutar la canalización, en una terminal de su máquina Linux, macOS o Unix local o en el símbolo del sistema de su equipo Windows local, ejecute el comando , especificando el nombre de la canalización. De este modo se ejecuta por segunda vez la aplicación del bucket de código fuente en la canalización.

    aws codepipeline start-pipeline-execution --name MyFirstPipeline

    Este comando devuelve un objeto pipelineExecutionId.

  11. Vuelva a la consola de CodePipeline y en la lista de canalizaciones, elija MyFirstPipeline para abrir la página de visualización.

    La canalización muestra tres etapas y el estado del artefacto en ejecución a lo largo de esas tres etapas. Pueden que transcurran cinco minutos hasta que el proceso de canalización se ejecute en todas las etapas. Verá las implementaciones en las primeras dos etapas, tal como antes, pero la etapa Production (Producción) mostrará que la acción Deploy-Second-Deployment no se ha realizado correctamente.

  12. En la acción Deploy-Second-Deployment, elija Details. Se le redirigirá a la página de la implementación de CodeDeploy. En este caso, el error se ha producido porque el primer grupo de instancias se ha implementado en todas las instancias EC2 y no han quedado instancias para el segundo grupo de implementación.

    nota

    Se trata de un error de diseño, para mostrar lo que ocurre cuando se produce un error en una etapa de la canalización.

Crear una tercera etapa (CLI)

Aunque usar la AWS CLI para añadir una etapa a la canalización es más complejo que usar la consola, tiene la ventaja de ofrecer mayor visibilidad de la estructura de la canalización.

Para crear una tercera etapa en la canalización
  1. Abra una sesión de terminal en su máquina Linux, macOS o Unix local o a través del símbolo del sistema en su equipo Windows local y ejecute el comando para mostrar la estructura de la canalización que acaba de crear. Para MyFirstPipeline, debería escribir el siguiente comando:

    aws codepipeline get-pipeline --name "MyFirstPipeline"

    Este comando devuelve la estructura de MyFirstPipeline. La primera parte del resultado debería tener un aspecto similar al siguiente:

    { "pipeline": { "roleArn": "arn:aws:iam::80398EXAMPLE:role/AWS-CodePipeline-Service", "stages": [ ...

    La última parte de la salida incluye los metadatos de la canalización y debería tener un aspecto similar al siguiente:

    ... ], "artifactStore": { "type": "S3" "location": "codepipeline-us-east-2-250656481468", }, "name": "MyFirstPipeline", "version": 4 }, "metadata": { "pipelineArn": "arn:aws:codepipeline:us-east-2:80398EXAMPLE:MyFirstPipeline", "updated": 1501626591.112, "created": 1501626591.112 } }
  2. Copie y pegue esta estructura en un editor de texto sin formato y guarde el archivo como pipeline.json. Para su comodidad, guarde este archivo en el mismo directorio en el que ejecuta los comandos aws codepipeline.

    nota

    Puede enviar JSON directamente a un archivo con el comando get-pipeline del modo siguiente:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json
  3. Copie la sección de la etapa Implementar y péguela después de las primeras dos etapas. Al ser una etapa de implementación, al igual que la etapa Implementar, la utilizará como plantilla de la tercera etapa.

  4. Cambie el nombre de la etapa y los detalles del grupo de implementación.

    En el siguiente ejemplo, se muestra el archivo JSON que se va a agregar al archivo pipeline.json después de la etapa Implementar. Edite los elementos resaltados con valores nuevos. No olvide incluir una coma para separar las definiciones de las etapas Implementar y Producción.

    , { "name": "Production", "actions": [ { "inputArtifacts": [ { "name": "MyApp" } ], "name": "Deploy-Second-Deployment", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "CodePipelineDemoApplication", "DeploymentGroupName": "CodePipelineProductionFleet" }, "runOrder": 1 } ] }
  5. Si está trabajando con la estructura de la canalización recuperada mediante el comando get-pipeline, debe eliminar las líneas metadata del archivo JSON. De lo contrario, el comando update-pipeline no puede utilizarlo. Elimine las líneas "metadata": { } y los campos "updated", "created" y "pipelineARN".

    Por ejemplo, quite las siguientes líneas de la estructura:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    Guarde el archivo.

  6. Ejecute el comando update-pipeline, especificando el archivo JSON de la canalización, de forma similar a como se muestra a continuación:

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Este comando devuelve la estructura completa de la canalización actualizada.

    importante

    Asegúrese de incluir file:// antes del nombre de archivo. Es obligatorio en este comando.

  7. Ejecute el comando start-pipeline-execution y especifique el nombre de la canalización. De este modo se ejecuta por segunda vez la aplicación del bucket de código fuente en la canalización.

    aws codepipeline start-pipeline-execution --name MyFirstPipeline

    Este comando devuelve un objeto pipelineExecutionId.

  8. Abra la consola de CodePipeline y elija MyFirstPipeline en la lista de canalizaciones.

    La canalización muestra tres etapas y el estado del artefacto en ejecución a lo largo de esas tres etapas. Pueden que transcurran cinco minutos hasta que el proceso de canalización se ejecute en todas las etapas. Aunque la implementación se realiza correctamente en las primeras dos etapas, tal como antes, la etapa Production muestra que se ha producido un error en la acción de Deploy-Second-Deployment.

  9. En la acción Deploy-Second-Deployment, elija Details para ver los detalles del error. Se le redirigirá a la página de detalles de la implementación de CodeDeploy. En este caso, el error se ha producido porque el primer grupo de instancias se ha implementado en todas las instancias EC2 y no han quedado instancias para el segundo grupo de implementación.

    nota

    Se trata de un error de diseño, para mostrar lo que ocurre cuando se produce un error en una etapa de la canalización.

(Opcional) Paso 6: Activar y desactivar transiciones entre etapas de CodePipeline

La transición entre las etapas de una canalización puede habilitarse y deshabilitarse. Deshabilitar una transición entre etapas permite controlar manualmente las transiciones entre una etapa y otra. Por ejemplo, puede ser conveniente ejecutar las dos primeras etapas de una canalización, pero deshabilitar las transiciones a la tercera hasta que esté listo para implementar en la producción, o mientras investiga un problema o un error en esa etapa.

Para deshabilitar y habilitar las transiciones entre etapas en una canalización de CodePipeline
  1. Abra la consola de CodePipeline y elija MyFirstPipeline en la lista de canalizaciones.

  2. En la página de detalles de la canalización, elija el botón Deshabilitar la transición situado entre la segunda etapa, Implementar y la tercera etapa que agregó en la sección anterior (Producción).

  3. En el cuadro de diálogo Disable transition (Deshabilitar transición), escriba un motivo para deshabilitar la transición entre las etapas y después elija Disable (Deshabilitar).

    La flecha entre etapas muestra un icono y cambia de color, y aparece el botón Enable transition (Habilitar transición).

  4. Cargue nuevamente la muestra en el bucket de S3. Como el bucket tiene varias versiones, este cambio inicia la canalización.

  5. Vuelva a la página de detalles de la canalización y observe el estado de las etapas. La vista de canalización cambia para mostrar el progreso y el éxito de las primeras dos etapas, pero no se realizan cambios en la tercera etapa. Este proceso puede tardar unos minutos.

  6. Habilite la transición eligiendo el botón Enable transition (Habilitar transición) entre las dos etapas. En el cuadro de diálogo Enable transition, elija Enable. La etapa comienza a ejecutarse en unos minutos e intenta procesar el artefacto que ya se ha ejecutado en las dos primeras etapas de la canalización.

    nota

    Si desea que esta tercera etapa se realice correctamente, edite el grupo de implementación CodePipelineProductionFleet antes de habilitar la transición y especifique otro conjunto de instancias EC2 en el que la aplicación esté implementada. Para obtener más información acerca de cómo hacerlo, consulte Cambio en la configuración de un grupo de implementaciones. Si crea más instancias EC2, se podrían generar costos adicionales.

Paso 7: Limpiar recursos

Puede reutilizar algunos de los recursos que ha creado aquí en Tutorial: Crear una canalización de cuatro etapas. Por ejemplo, puede reutilizar la implementación y la aplicación de CodeDeploy. Puede configurar una acción de compilación con un proveedor como CodeBuild, que es un servicio de compilación completamente administrado en la nube. También puede configurar una acción de compilación que utilice un proveedor con un servidor o un sistema de compilación, como Jenkins.

Sin embargo, una vez completado este o cualquier otro tutorial, debe eliminar la canalización y los recursos que utiliza para que no se le cobre por el uso continuado de esos recursos. Elimine primero la canalización, después la aplicación de CodeDeploy y las instancias de Amazon EC2 asociadas y, por último, el bucket de S3.

Para limpiar los recursos usados en este tutorial
  1. Para limpiar los recursos de CodePipeline, siga las instrucciones de Suprimir una canalización en AWS CodePipeline.

  2. Para limpiar los recursos de CodeDeploy, siga las instrucciones que se indican en Para limpiar los recursos (consola).

  3. Para eliminar el bucket de S3, siga las instrucciones que se especifican en Eliminar o vaciar un bucket de S3. Si no tiene intención de crear más canalizaciones, elimine el bucket de S3 creado para almacenar los artefactos de la canalización. Para obtener más información acerca de este bucket, consulte CodePipeline conceptos .