Ejemplo de creación de notificaciones para CodeBuild - AWS CodeBuild

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.

Ejemplo de creación de notificaciones para CodeBuild

Amazon CloudWatch Events proporciona compatibilidad integrada conAWS CodeBuild. CloudWatch Events es un flujo de eventos del sistema que describe los cambios en suAWSRecursos. con CloudWatch Eventos, se escriben reglas declarativas para asociar los eventos de interés con las acciones automatizadas que se van a realizar. Esta muestra usa Amazon CloudWatch Events y Amazon Simple Notification Service (Amazon SNS) para enviar notificaciones de compilación a los suscriptores cuando las compilaciones se realizan correctamente, fallan, pasan de una fase de compilación a otra o cualquier combinación de estos eventos.

importante

La ejecución de este ejemplo puede producir cargos en su cuenta de AWS. Entre estos se incluyen posibles cargos por CodeBuild y paraAWSrecursos y acciones relacionados con Amazon CloudWatch y Amazon SNS. Para obtener más información, consulteCodeBuild de IPAM,Amazon CloudWatchde IPAM, yPrecios de Amazon SNS.

Ejecución del ejemplo

Para ejecutar este ejemplo

  1. Si ya tiene un tema configurado y suscrito a él en Amazon SNS que desea usar en este ejemplo, vaya al paso 4. De lo contrario, si utiliza un usuario de IAM en lugar de unAWScuenta root o un usuario de IAM administrador para trabajar con Amazon SNS, añada la siguiente declaración (entre### COMIENZA A AÑADIR LA DECLARACIÓN AQUÍ ###y### TERMINA DE AGREGAR LA DECLARACIÓN AQUÍ ###) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda usar una cuenta raíz de AWS. Esta declaración permite ver, crear, suscribirse y probar el envío de notificaciones a los temas de Amazon SNS. Los puntos suspensivos (...) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política existente.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "sns:CreateTopic", "sns:GetTopicAttributes", "sns:List*", "sns:Publish", "sns:SetTopicAttributes", "sns:Subscribe" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    nota

    La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

    Para obtener más información, consulteEdición de políticas administradas por elo la sección «Para editar o eliminar una política insertada de un grupo, un usuario o un rol» enUso de políticas insertadas (Consola)en elIAM User Guide.

  2. Cree o identifique un tema en Amazon SNS.AWS CodeBuildUtiliza CloudWatch Eventos para enviar notificaciones de compilación a este tema a través de Amazon SNS.

    Para crear un tema:

    1. Abra la consola de Amazon SNS enhttps://console.aws.amazon.com/sns.

    2. Elija Create new topic (Crear nuevo tema).

    3. En el cuadro de diálogo Create new topic (Crear un nuevo tema), en Topic name (Nombre del tema), escriba un nombre para el tema (por ejemplo, CodeBuildDemoTopic). Si elige otro nombre, sustitúyalo en todo este ejemplo.

    4. Elija Create new topic (Crear nuevo tema).

    5. En laDetalles sobre el tema: CodeBuildDemoTopic, copie laTema ARNvalue. Necesitará este valor para el siguiente paso.

    Para obtener más información, consulteCrear un temaen elGuía para desarrolladores de Amazon SNS.

  3. Suscriba a uno o varios destinatarios al tema para que reciban notificaciones por correo electrónico.

    Para suscribir a un destinatario a un tema:

    1. Con la consola de Amazon SNS abierta desde el paso anterior, en el panel de navegación, elijaSusscripcionesy, a continuación, elijaCreación de una suscripción.

    2. En Create subscription (Crear suscripción), en Topic ARN (ARN del tema), pegue el ARN del tema que copió en el paso anterior.

    3. En Protocol (Protocolo), elija Email (Correo electrónico).

    4. En Endpoint (Punto de enlace), escriba la dirección de correo electrónico completa del destinatario.

    5. Elija Create subscription (Crear suscripción).

    6. Amazon SNS envía un correo electrónico de confirmación de la suscripción al destinatario. Para empezar a recibir notificaciones por correo electrónico, el destinatario debe elegir el enlace Confirm subscription en el mensaje de confirmación de la suscripción. Después de que el destinatario haga clic en el enlace, si se ha suscrito correctamente, Amazon SNS mostrará un mensaje de confirmación en el navegador web del destinatario.

    Para obtener más información, consulteSuscripción a un temaen elGuía para desarrolladores de Amazon SNS.

  4. Si utiliza un usuario de IAM en lugar de unAWScuenta root o un usuario de IAM administrador con el que trabajar CloudWatch Eventos, añada la siguiente declaración (entre### COMIENZA A AÑADIR LA DECLARACIÓN AQUÍ ###y### TERMINA DE AGREGAR LA DECLARACIÓN AQUÍ ###) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda usar una cuenta raíz de AWS. Esta declaración se utiliza para permitir al usuario trabajar con CloudWatch Eventos: . Los puntos suspensivos (...) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política existente.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "events:*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    nota

    La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

    Para obtener más información, consulteEdición de políticas administradas por elo la sección «Para editar o eliminar una política insertada de un grupo, un usuario o un rol» enUso de políticas insertadas (Consola)en elIAM User Guide.

  5. Crear una regla en CloudWatch Eventos: . Para ello, abra el CloudWatch Consola dehttps://console.aws.amazon.com/cloudwatch.

  6. En el panel de navegación, bajo Events, elija Rules y después elija Create rule.

  7. En laPaso 1: Página Crear regla,Patrón de eventosyCree un patrón de eventos para buscar eventos por servicioya debería estar seleccionada.

  8. En Service Name (Nombre de servicio), seleccione CodeBuild, En Event Type (Tipo de evento), la opción All Events (Todos los eventos) ya debería estar seleccionada.

  9. El código siguiente debería aparecer en Event Pattern Preview (Vista previa del patrón de eventos):

    { "source": [ "aws.codebuild" ] }
  10. Elija Edit (Editar) y sustituya el código de Event Pattern Preview (Vista previa de patrón del eventos) por uno de los dos patrones de reglas siguientes.

    Este primer patrón de reglas desencadena un evento siempre que se inicia o se completa una compilación en los proyectos de compilación especificados en AWS CodeBuild.

    { "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build State Change" ], "detail": { "build-status": [ "IN_PROGRESS", "SUCCEEDED", "FAILED", "STOPPED" ], "project-name": [ "my-demo-project-1", "my-demo-project-2" ] } }

    En la regla anterior, realice los siguientes cambios de código según sea necesario.

    • Para desencadenar un evento cuando se inicia o se completa una compilación, deje todos los valores tal y como se muestran en la matriz build-status o quite completamente la matriz build-status.

    • Para activar un evento solo cuando se complete una compilación, elimine IN_PROGRESS de la matriz build-status.

    • Para activar un evento solo cuando se inicie una compilación, elimine todos los valores a excepción de IN_PROGRESS de la matriz build-status.

    • Para activar eventos para todos los proyectos de compilación, elimine toda la matriz project-name.

    • Para activar eventos solo para proyectos de compilación individuales, especifique el nombre de cada proyecto de compilación en la matriz project-name.

    Este segundo patrón de reglas desencadena un evento siempre que una compilación pasa de una fase a otra en los proyectos de compilación especificados en AWS CodeBuild.

    { "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build Phase Change" ], "detail": { "completed-phase": [ "SUBMITTED", "PROVISIONING", "DOWNLOAD_SOURCE", "INSTALL", "PRE_BUILD", "BUILD", "POST_BUILD", "UPLOAD_ARTIFACTS", "FINALIZING" ], "completed-phase-status": [ "TIMED_OUT", "STOPPED", "FAILED", "SUCCEEDED", "FAULT", "CLIENT_ERROR" ], "project-name": [ "my-demo-project-1", "my-demo-project-2" ] } }

    En la regla anterior, realice los siguientes cambios de código según sea necesario.

    • Para desencadenar un evento con cada cambio de fase de compilación (lo que podría enviar hasta nueve notificaciones por cada compilación), deje todos los valores tal y como se muestran en la matriz completed-phase o elimine completamente la matriz completed-phase.

    • Para activar eventos solo para cambios de fase de compilación individuales, elimine el nombre de cada fase de compilación en la matriz completed-phase para el que no desee que se active un evento.

    • Para activar un evento para cada cambio de estado de fase de compilación, deje todos los valores tal y como se muestran en la matriz completed-phase-status o elimine completamente la matriz completed-phase-status.

    • Para activar eventos solo para cambios de estado de fase de compilación individuales, elimine el nombre de cada estado de fase de compilación en la matriz completed-phase-status para el que no desee que se active un evento.

    • Para activar eventos para todos los proyectos de compilación, elimine la matriz project-name.

    • Para activar eventos para proyectos de compilación individuales, especifique el nombre de cada proyecto de compilación en la matriz project-name.

    Para obtener más información acerca de los patrones de eventos, consultePatrones de eventosen el Amazonas EventBridge Guía del usuario.

    Para obtener más información acerca del filtrado con patrones de eventos, consulteFiltrado basado en contenido con patrones de eventosen el Amazonas EventBridge Guía del usuario.

    nota

    Si desea desencadenar eventos con los cambios de estado de compilación y los cambios de fase de compilación, debe crear dos reglas distintas: una para los cambios de estado y otra para los cambios de fase. Si intenta combinar las dos reglas en una sola, la regla combinada podría producir resultados inesperados o dejar de funcionar.

    Cuando haya terminado de reemplazar el código, seleccione Save.

  11. En Targets, seleccione Add target.

  12. En la lista de destinos, elija SNS topic.

  13. En Topic, elija el tema que identificó o creó anteriormente.

  14. Expanda Configure input, a continuación, elija Input Transformer.

  15. En el cuadro Input Path (Ruta de entrada), escriba una de las siguientes rutas de entrada.

    Si en una regla el valor de detail-type es CodeBuild Build State Change, escriba lo siguiente.

    {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}

    Si en una regla el valor de detail-type es CodeBuild Build Phase Change, escriba lo siguiente.

    {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}

    Para obtener otros tipos de información, consulte la Referencia del formato de entrada de las notificaciones de compilación.

  16. En el cuadro Input Template (Plantilla de entrada), escriba una de las siguientes plantillas de entrada.

    Si en una regla el valor de detail-type es CodeBuild Build State Change, escriba lo siguiente.

    "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."

    Si en una regla el valor de detail-type es CodeBuild Build Phase Change, escriba lo siguiente.

    "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
  17. Seleccione Configure details.

  18. En laPaso 2: Configurar los detalles de reglas, introduzca un nombre y una descripción opcional. En State (Estado), deje seleccionado el valor Enabled (Habilitado).

  19. Elija Create rule (Crear regla).

  20. Para crear proyectos de compilación, ejecutar las compilaciones y consultar información sobre la compilación, siga los pasos que se indican en Ejecución de CodeBuild directamente.

  21. Confirmación de CodeBuild ahora envía correctamente las notificaciones de compilación. Por ejemplo, compruebe si hay correos electrónicos de notificación de compilación en su bandeja de entrada.

Para cambiar el comportamiento de una regla, en la CloudWatch , elige la regla que quieres cambiar, eligeAccionesy, a continuación, elijaEditar. Realice los cambios que correspondan en la regla y elija Configure details (Configurar detalles) y Update rule (Actualizar regla).

Para dejar de usar una regla para enviar notificaciones de compilación, en la CloudWatch , elige la regla que quieres dejar de usar, eligeAccionesy, a continuación, elijaDeshabilitar.

Para eliminar una regla por completo, en la CloudWatch , elija la regla que desea eliminar, elijaAccionesy, a continuación, elijaBorrar.

Recursos relacionados

Referencia del formato de entrada de las notificaciones de compilación

CloudWatch entrega notificaciones en formato JSON.

Las notificaciones de cambio de estado de compilación usan el siguiente formato:

{ "version": "0", "id": "c030038d-8c4d-6141-9545-00ff7b7153EX", "detail-type": "CodeBuild Build State Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:28Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "build-status": "SUCCEEDED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:4.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "current-phase": "COMPLETED", "current-phase-context": "[]", "version": "1" } }

Las notificaciones de cambio de fase de compilación usan el siguiente formato:

{ "version": "0", "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX", "detail-type": "CodeBuild Build Phase Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:21Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "completed-phase": "COMPLETED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "completed-phase-context": "[]", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:4.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "completed-phase-status": "SUCCEEDED", "completed-phase-duration-seconds": 4, "version": "1", "completed-phase-start": "Sep 1, 2017 4:14:21 PM", "completed-phase-end": "Sep 1, 2017 4:14:26 PM" } }