View a markdown version of this page

Referencia del modelo de integración - 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.

Referencia del modelo de integración

Existen varias integraciones prediseñadas para servicios de terceros que ayudan a incorporar las herramientas existentes para los clientes en el proceso de lanzamiento de la canalización. Los socios o proveedores de servicios externos utilizan un modelo de integración para implementar los tipos de acción que se pueden usar en CodePipeline.

Utilice esta referencia cuando planifique o trabaje con tipos de acción que se administran con un modelo de integración compatible en CodePipeline.

Para certificar tu tipo de acción de terceros como una integración con un socio CodePipeline, consulta la red de AWS socios (APN). Esta información es un complemento de la AWS CLI Reference.

Cómo funcionan los tipos de acciones de terceros con el integrador

Puede añadir tipos de acciones de terceros a las canalizaciones de los clientes para completar las tareas relacionadas con los recursos de los clientes. El integrador gestiona las solicitudes de trabajo y ejecuta la acción con ellas. CodePipeline En el siguiente diagrama, se muestra un tipo de acción de terceros creado para que los clientes lo utilicen en su proceso. Una vez que el cliente configura la acción, ésta se ejecuta y crea solicitudes de trabajo que administra el motor de acciones del integrador.

Imagen que muestra cómo el motor de acción del integrador gestiona los tipos de acciones y artefactos de terceros

En el diagrama se muestran los siguientes pasos:

  1. La definición de la acción se registra y está disponible en CodePipeline. La acción de terceros está disponible para los clientes del proveedor de terceros.

  2. El cliente del proveedor elige y configura la acción en CodePipeline.

  3. La acción se ejecuta y los trabajos se ponen en cola. CodePipeline Cuando el trabajo está listo CodePipeline, envía una solicitud de trabajo.

  4. El integrador (el trabajador de las API de sondeo de terceros o de la función de Lambda) recoge la solicitud de trabajo, devuelve una confirmación y trabaja en los artefactos de las acciones.

  5. El integrador devuelve el success/failure resultado (el trabajador utiliza success/failure las API o la función Lambda envía success/failure el resultado) con un resultado del trabajo y un token de continuación.

Para obtener información sobre los pasos que puede seguir para solicitar, ver y actualizar un tipo de acción, consulte Trabajar con tipos de acciones.

Conceptos

En esta sección se utilizan los siguientes términos para los tipos de acciones de terceros:

Tipo de acción

Un proceso repetible que se puede reutilizar en canalizaciones que realizan las mismas cargas de trabajo de entrega continua. Los tipos de acciones se identifican mediante Owner, Category, Provider y Version. Por ejemplo:

{ "Category": "Deploy", "Owner": "AWS", "Provider": "CodeDeploy", "Version": "1" },

Todas las acciones del mismo tipo comparten la misma implementación.

Action

Una instancia única de un tipo de acción, uno de los procesos discretos que tienen lugar dentro de una etapa de una canalización. Por lo general, esto incluye los valores de usuario específicos de la canalización en la que se ejecuta esta acción.

Definición de la acción

El esquema de un tipo de acción que define las propiedades necesarias para configurar la acción y input/output los artefactos.

Action execution (Ejecución de acciones)

Conjunto de trabajos que se han ejecutado para determinar si la acción realizada por el cliente se ha realizado correctamente o no.

Motor de ejecución de acciones

Propiedad de la configuración de ejecución de acciones que define el tipo de integración utilizado por un tipo de acción. Los valores válidos son JobWorker y Lambda.

Integración

Describe un software ejecutado por un integrador para implementar un tipo de acción. CodePipeline admite dos tipos de integración correspondientes a los dos motores de acción compatibles JobWorker yLambda.

Integrador

La persona propietaria de la implementación de un tipo de acción.

Trabajo

Un trabajo con el contexto del proceso y del cliente para ejecutar una integración. La ejecución de una acción se compone de una o más tareas.

Proceso de trabajo

El servicio que procesa las entradas del cliente y ejecuta un trabajo.

Modelos de integración compatibles

CodePipeline tiene dos modelos de integración:

  • Modelo de integración Lambda: este modelo de integración es la forma preferida de trabajar con los tipos de acción en CodePipeline. El modelo de integración de Lambda utiliza una función de Lambda para procesar las solicitudes de trabajo cuando se ejecuta la acción.

  • Modelo de integración de proceso de trabajo: el modelo de integración del proceso de trabajo es el modelo utilizado anteriormente para las integraciones de terceros. El modelo de integración de trabajadores laborales utiliza un trabajador laboral configurado para contactar con las CodePipeline API y procesar las solicitudes de trabajo cuando se ejecuta la acción.

A modo de comparación, en la siguiente tabla se describen las características de los dos modelos:

Modelo de integración de Lambda Modelo de integración de procesos de trabajo
Descripción El integrador escribe la integración como una función de Lambda, que se invoca CodePipeline siempre que hay un trabajo disponible para la acción. La función de Lambda no sondea los trabajos disponibles, sino que espera hasta que se reciba la siguiente solicitud de trabajo. El integrador escribe la integración como un proceso de trabajo que consulta constantemente los puestos disponibles en la cartera del cliente. A continuación, el trabajador ejecuta el trabajo y envía el resultado del trabajo a través de las API. CodePipeline CodePipeline
Infraestructura AWS Lambda Implemente el código del proceso de trabajo en la infraestructura del integrador, como las instancias de Amazon EC2.
Esfuerzo de desarrollo La integración solo contiene la lógica empresarial. La integración debe interactuar con CodePipeline las API, además de contener la lógica empresarial.
Esfuerzo operativo Menor esfuerzo operativo, ya que la infraestructura es solo AWS recursos. Mayor esfuerzo operativo porque el proceso de trabajo necesita su hardware independiente.
Tiempo máximo de ejecución de un trabajo Si la integración debe ejecutarse de forma activa durante más de 15 minutos, no se puede utilizar este modelo. Esta acción está destinada a los integradores que necesitan iniciar un proceso (por ejemplo, iniciar una creación a partir del artefacto de código del cliente) y devolver un resultado cuando finalice. No recomendamos que el integrador siga esperando a que finalice la compilación. En su lugar, devuelva una continuación. CodePipelinecrea un nuevo trabajo en otros 30 segundos si se recibe una continuación del código del integrador para comprobar el estado del trabajo hasta que finalice. Con este modelo, se puede mantener la ejecución de jobs (hours/days) durante mucho tiempo.

Modelo de integración de Lambda

El modelo de integración de Lambda compatible incluye la creación de la función de Lambda y la definición del resultado para el tipo de acción de terceros.

Actualice su función Lambda para gestionar la entrada desde CodePipeline

Puede crear una función de Lambda nueva. Puede añadir lógica empresarial a la función de Lambda, que se ejecuta siempre que haya un trabajo disponible en su proceso para su tipo de acción. Por ejemplo, dado el contexto del cliente y del proceso, es posible que desee empezar a desarrollar su servicio para el cliente.

Utilice los siguientes parámetros para actualizar la función Lambda de modo que gestione la entrada desde. CodePipeline

Formato:

  • jobId:

    • El ID exclusivo del trabajo generado por el sistema.

    • Tipo: cadena

    • Patrón: [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}

  • accountId:

    • El ID de la AWS cuenta del cliente que se utilizará al realizar el trabajo.

    • Tipo: cadena

    • Patrón: [0-9]{12}

  • data:

    • Otra información sobre un trabajo que una integración utiliza para completar el trabajo.

    • Contiene un mapa de lo siguiente:

      • actionConfiguration:

        • Los datos de configuración de la acción. Los campos de configuración de la acción son una asignación de pares clave-valor para que el cliente introduzca valores. Las claves vienen determinadas por los parámetros clave del archivo de definición del tipo de acción al configurar la acción. En este ejemplo, los valores los determina el usuario de la acción especificando la información en los campos Username y Password.

        • Tipo: asignación de cadena a cadena, presente de forma opcional

          Ejemplo:

          "configuration": { "Username": "MyUser", "Password": "MyPassword" },
      • encryptionKey:

        • Representa información sobre la clave utilizada para cifrar los datos del almacén de artefactos, como una AWS KMS clave.

        • Contenido: tipo de tipo de datos encryptionKey, disponible opcionalmente

      • inputArtifacts:

        • Lista de información sobre un artefacto en el que se va a trabajar, como, por ejemplo, una prueba o un artefacto de compilación.

        • Contenido: lista de tipo de datos Artifact, disponible opcionalmente

      • outputArtifacts:

        • Lista de información sobre el resultado de una acción.

        • Contenido: lista de tipo de datos Artifact, disponible opcionalmente

      • actionCredentials:

        • Representa un objeto de credenciales AWS de sesión. Estas credenciales son credenciales temporales emitidas por AWS STS. Se pueden usar para acceder a los artefactos de entrada y salida del bucket de S3, que se usa para almacenar artefactos para la canalización CodePipeline.

          Estas credenciales también tienen los mismos permisos que la plantilla de declaraciones de política especificada en el archivo de definición del tipo de acción.

        • Contenido: tipo de tipo de datos AWSSessionCredentials, disponible opcionalmente

      • actionExecutionId:

        • El ID externo de la ejecución de la acción.

        • Tipo: cadena

      • continuationToken:

        • Un token generado por el sistema, como un ID de implementación, que necesita un trabajo para continuar con el trabajo de forma asíncrona.

        • Tipo: cadena, presente de forma opcional

Tipos de datos:

  • encryptionKey:

    • id:

      • El ID utilizado para identificar la clave. Para una AWS KMS clave, puedes usar el identificador de la clave, el ARN de la clave o el ARN del alias.

      • Tipo: cadena

    • type:

      • El tipo de clave de cifrado, como una AWS KMS clave.

      • Tipo: cadena

      • Valores válidos: KMS

  • Artifact:

    • name:

      • El nombre del artefacto.

      • Tipo: cadena, presente de forma opcional

    • revision:

      • El ID de revisión del artefacto. Según el tipo de objeto, puede ser un ID de confirmación (GitHub) o un ID de revisión (Amazon S3).

      • Tipo: cadena, presente de forma opcional

    • location:

      • La ubicación de un artefacto.

      • Contenido: tipo de tipo de datos ArtifactLocation, disponible opcionalmente

  • ArtifactLocation:

    • type:

      • El tipo de artefacto en la ubicación.

      • Tipo: cadena, presente de forma opcional

      • Valores válidos: S3

    • s3Location:

      • Ubicación del bucket de S3 que contiene una revisión.

      • Contenido: tipo de tipo de datos S3Location, disponible opcionalmente

  • S3Location:

    • bucketName:

      • Nombre del bucket de S3.

      • Tipo: cadena

    • objectKey:

      • La clave del objeto en el bucket de S3 que identifica de forma exclusiva el objeto en el bucket.

      • Tipo: cadena

  • AWSSessionCredentials:

    • accessKeyId:

      • La clave de acceso secreta de la sesión.

      • Tipo: cadena

    • secretAccessKey:

      • La clave de acceso secreta de la sesión.

      • Tipo: cadena

    • sessionToken:

      • Ll token de la sesión.

      • Tipo: cadena

Ejemplo:

{ "jobId": "01234567-abcd-abcd-abcd-012345678910", "accountId": "012345678910", "data": { "actionConfiguration": { "key1": "value1", "key2": "value2" }, "encryptionKey": { "id": "123-abc", "type": "KMS" }, "inputArtifacts": [ { "name": "input-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "inputBucket", "objectKey": "inputKey" } } } ], "outputArtifacts": [ { "name": "output-art-name", "location": { "type": "S3", "s3Location": { "bucketName": "outputBucket", "objectKey": "outputKey" } } } ], "actionExecutionId": "actionExecutionId", "actionCredentials": { "accessKeyId": "access-id", "secretAccessKey": "secret-id", "sessionToken": "session-id" }, "continuationToken": "continueId-xxyyzz" } }

Devuelve los resultados de tu función de Lambda a CodePipeline

El recurso del proceso de trabajo del integrador debe devolver una carga útil válida en caso de éxito, fracaso o continuación.

Formato:

  • result: el resultado del trabajo.

    • Obligatorio

    • Valores válidos (no distingue entre mayúsculas y minúsculas):

      • Success: indica que un trabajo se ha realizado correctamente y es terminal.

      • Continue: indica que un trabajo se ha realizado correctamente y debe continuar, por ejemplo, si se vuelve a invocar al trabajador del trabajo para ejecutar la misma acción.

      • Fail: indica que se ha producido un error en un trabajo y es terminal.

  • failureType: un tipo de fallo que se va a asociar a un trabajo fallido.

    La categoría failureType de acciones de los socios describe el tipo de error que se produjo al ejecutar el trabajo. Los integradores configuran el tipo junto con el mensaje de error cuando devuelven el resultado de un error de trabajo a. CodePipeline

    • Opcional. Obligatorio si el resultado es Fail.

    • Debe ser nulo si result es Success o Continue

    • Valores válidos:

      • ConfigurationError

      • JobFailed

      • PermissionsError

      • RevisionOutOfSync

      • RevisionUnavailable

      • SystemUnavailable

  • continuation: el estado de continuación se pasará al siguiente trabajo dentro de la ejecución de la acción actual.

    • Opcional. Obligatorio si el resultado es Continue.

    • Debe ser nulo si result es Success o Fail.

    • Propiedades:

      • State: un hash del estado que se va a aprobar.

  • status: estado de la ejecución de la acción.

    • Opcional.

    • Propiedades:

      • ExternalExecutionId: un ID de ejecución externo o un ID de confirmación opcional para asociarlo al trabajo.

      • Summary: un resumen opcional de lo ocurrido. En los escenarios de error, se convierte en el mensaje de error que ve el usuario.

  • outputVariables: conjunto de key/value pares que se pasarán a la siguiente ejecución de la acción.

    • Opcional.

    • Debe ser nulo si result es Continue o Fail.

Ejemplo:

{ "result": "success", "failureType": null, "continuation": null, "status": { "externalExecutionId": "my-commit-id-123", "summary": "everything is dandy" }, "outputVariables": { "FirstOne": "Nice", "SecondOne": "Nicest", ... } }

Utilice los tokens de continuación para esperar los resultados de un proceso asíncrono

El token continuation forma parte de la carga útil y el resultado de la función de Lambda. Es una forma de pasar el estado del trabajo CodePipeline e indicar que el trabajo debe continuar. Por ejemplo, cuando un integrador inicia una compilación para el cliente en su recurso, no espera a que se complete la compilación, sino que indica CodePipeline que no tiene un resultado final devolviendo el result as continue y devolviendo el identificador único de la compilación al continuation token CodePipeline as.

nota

Las funciones de Lambda se pueden ejecutar durante un máximo de 15 minutos. Si el trabajo necesita ejecutarse durante más tiempo, puedes usa los tokens de continuación.

El CodePipeline equipo invoca al integrador después de 30 segundos con el mismo continuation token en su carga útil para comprobar si está completo. Si la compilación se completa, el integrador devuelve el success/fail resultado final; de lo contrario, continúa.

Proporcione CodePipeline los permisos para invocar la función Lambda del integrador en tiempo de ejecución

Agrega permisos a la función Lambda de su integrador para proporcionar al CodePipeline servicio permisos para invocarlo mediante el principal del servicio:. CodePipeline codepipeline.amazonaws.com Puede agregar permisos mediante CloudFormation o la línea de comandos. Para ver un ejemplo, consulta Trabajar con tipos de acciones.

Modelo de integración de procesos de trabajo

Una vez designado el flujo general de trabajo, puede crear el proceso de trabajo. Aunque los detalles específicos de la acción de terceros determinan lo que se necesita para el proceso de trabajo, la mayoría de los procesos de trabajo para acciones de terceros incluyen la siguiente funcionalidad:

  • Encuesta para ver si hay trabajos en CodePipeline usoPollForThirdPartyJobs.

  • Reconocer los trabajos y devolver los resultados al CodePipeline uso AcknowledgeThirdPartyJobPutThirdPartyJobSuccessResult,, yPutThirdPartyJobFailureResult.

  • Recuperar artefactos and/or al colocarlos en el bucket de Amazon S3 para la canalización. Para descargar artefactos del bucket de Amazon S3 debe crear un cliente de Amazon S3 que utilice la versión 4 de Signature (Sig V4). Se requiere el Sig V4 para AWS KMS.

    Para subir artefactos al bucket de Amazon S3, también debe configurar la PutObject solicitud de Amazon S3 para utilizar el cifrado mediante AWS Key Management Service (AWS KMS). AWS KMS usos AWS KMS keys. Para saber si se debe utilizar la clave Clave administrada de AWS o una clave gestionada por el cliente para cargar artefactos, el trabajador debe examinar los datos de la tarea y comprobar la propiedad de la clave de cifrado. Si la propiedad está definida, debes usar esa ID de clave gestionada por el cliente al realizar la configuración AWS KMS. Si la propiedad de la clave es nula, utilice la Clave administrada de AWS. CodePipeline usa el, Clave administrada de AWS a menos que se configure lo contrario.

    Para ver un ejemplo que muestre cómo crear los AWS KMS parámetros en Java o.NET, consulte Especificar los AWS Key Management Service en Amazon S3 mediante los AWS SDK. Para obtener más información sobre el bucket de Amazon S3 para CodePipeline, consulteCodePipeline conceptos.

Elegir y configurar una estrategia de administración de permisos para el proceso de trabajo

Si quiere crear un empleado para su acción de terceros CodePipeline, necesita una estrategia que integre la administración de usuarios y permisos.

La estrategia más sencilla consiste en añadir la infraestructura que necesita para su trabajador mediante la creación de instancias de Amazon EC2 con un rol de instancia AWS Identity and Access Management (IAM), lo que le permitirá ampliar fácilmente los recursos que necesita para la integración. Puede utilizar la integración integrada AWS para simplificar la interacción entre su trabajador y. CodePipeline

Obtenga más información acerca de Amazon EC2 y determine si es la opción correcta para su integración. Para más información, consulte Amazon EC2 - Alojamiento de servidores virtuales. Para obtener información sobre cómo configurar una instancia de Amazon EC2, consulte Introducción a las instancias de Amazon EC2 Linux.

Otra estrategia que puede considerar es utilizar federación de identidades con IAM para integrar los recursos y el sistema de proveedor de identidad que ya tiene. Esta estrategia resulta útil si ya tiene un proveedor de identidad corporativo o una configuración que admita usuarios que utilicen proveedores de identidad web. La federación de identidades le permite conceder un acceso seguro a AWS los recursos CodePipeline, incluso sin tener que crear o administrar usuarios de IAM. Puede utilizar características y políticas sobre los requisitos de seguridad de contraseñas y la rotación de credenciales. Puede utilizar aplicaciones de ejemplo como plantillas para su propio diseño. Para obtener información, consulte Administrar federación.

Para dar acceso, agregue permisos a los usuarios, grupos o roles:

A continuación se muestra una política de ejemplo que puede crear para utilizarla con un proceso de trabajo de terceros. Esta política es solo un ejemplo y se ofrece "tal cual".

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:PollForThirdPartyJobs", "codepipeline:AcknowledgeThirdPartyJob", "codepipeline:GetThirdPartyJobDetails", "codepipeline:PutThirdPartyJobSuccessResult", "codepipeline:PutThirdPartyJobFailureResult" ], "Resource": [ "arn:aws:codepipeline:us-east-2::actionType:ThirdParty/Build/Provider/1/" ] } ] }