Crea un esempio di notifiche per CodeBuild - AWS CodeBuild

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea un esempio di notifiche per CodeBuild

Amazon CloudWatch Events dispone di un supporto integrato per AWS CodeBuild. CloudWatch Events è un flusso di eventi di sistema che descrive i cambiamenti nelle tue AWS risorse. Con CloudWatch Events, scrivi regole dichiarative per associare gli eventi di interesse alle azioni automatiche da intraprendere. Questo esempio utilizza Amazon CloudWatch Events e Amazon Simple Notification Service (Amazon SNS) per inviare notifiche di build agli abbonati ogni volta che le build hanno successo, falliscono, passano da una fase di compilazione all'altra o qualsiasi combinazione di questi eventi.

Importante

L'esecuzione di questo esempio potrebbe comportare addebiti sul tuo account. AWS Questi includono eventuali addebiti per CodeBuild e per AWS risorse e azioni relative ad Amazon CloudWatch e Amazon SNS. Per ulteriori informazioni, consulta CodeBuild i prezzi, i CloudWatch prezzi di Amazon e i prezzi di Amazon SNS.

Esecuzione dell'esempio

Per eseguire questo esempio
  1. Se hai già configurato e sottoscritto un argomento in Amazon SNS che desideri utilizzare per questo esempio, vai avanti al passaggio 4. Altrimenti, se utilizzi un utente IAM anziché un account AWS root o un utente amministratore per lavorare con Amazon SNS, aggiungi la seguente dichiarazione (tra ### BEGIN ADDING STATEMENT HERE ### e ### END ADDING STATEMENT HERE ###) all'utente (o al gruppo IAM a cui l'utente è associato). L'utilizzo di un account root non è consigliato. AWS Questa dichiarazione consente di visualizzare, creare, sottoscrivere e testare l'invio di notifiche agli argomenti in Amazon SNS. Le ellissi (...) vengono utilizzate per brevità e per aiutare i clienti a individuare il punto in cui aggiungere l'istruzione. Non rimuovere nessuna istruzione e non digitare queste ellissi nella policy esistente.

    { "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

    L'entità IAM che modifica questa politica deve disporre dell'autorizzazione in IAM per modificare le politiche.

    Per ulteriori informazioni, consulta Modifica delle politiche gestite dai clienti o la sezione «Modificare o eliminare una politica in linea per un gruppo, un utente o un ruolo» in Working with inline policies (console) nella IAM User Guide.

  2. Crea o identifica un argomento in Amazon SNS. AWS CodeBuild utilizza CloudWatch Events per inviare notifiche di build su questo argomento tramite Amazon SNS.

    Per creare un argomento:

    1. Apri la console Amazon SNS all'indirizzo https://console.aws.amazon.com/sns.

    2. Scegli Create topic (Crea argomento).

    3. In Create new topic (Crea nuovo argomento) per Topic name (Nome argomento), digitare un nome per l'argomento, ad esempio CodeBuildDemoTopic. (Se si sceglie un nome diverso, sostituirlo in tutto il campione).

    4. Scegli Create topic (Crea argomento).

    5. Nella CodeBuildDemoTopic pagina Dettagli argomento:, copia il valore Arn dell'argomento. che servirà per la fase successiva.

    Per ulteriori informazioni, consulta Creare un argomento nella Amazon SNS Developer Guide.

  3. Abbonare uno o più destinatari all'argomento per ricevere notifiche e-mail.

    Per sottoscrivere un destinatario a un argomento:

    1. Con la console Amazon SNS aperta dal passaggio precedente, nel riquadro di navigazione, scegli Abbonamenti, quindi scegli Crea abbonamento.

    2. In Create subscription (Crea abbonamento), per Topic ARN (ARN argomento), copiare e incollare l'ARN dell'argomento dalla fase precedente.

    3. Per Protocollo, scegli E-mail.

    4. Per Endpoint, immettere l'indirizzo e-mail completo del destinatario.

    5. Scegli Create Subscription (Crea sottoscrizione).

    6. Amazon SNS invia un'e-mail di conferma dell'abbonamento al destinatario. Per iniziare a ricevere le notifiche e-mail, il destinatario deve selezionare il link Confirm subscription (Conferma abbonamento) nell'e-mail di conferma dell'abbonamento. Dopo che il destinatario ha fatto clic sul link, se l'iscrizione è avvenuta correttamente, Amazon SNS visualizza un messaggio di conferma nel browser Web del destinatario.

    Per ulteriori informazioni, consulta Abbonarsi a un argomento nella Amazon SNS Developer Guide.

  4. Se utilizzi un utente anziché un account AWS root o un utente amministratore per lavorare con CloudWatch Events, aggiungi la seguente dichiarazione (tra ### BEGIN ADDING STATEMENT HERE ### e ### END ADDING STATEMENT HERE ###) all'utente (o al gruppo IAM a cui l'utente è associato). L'utilizzo di un account root non è consigliato. AWS Questa istruzione viene utilizzata per consentire all'utente di lavorare con CloudWatch Events. Le ellissi (...) vengono utilizzate per brevità e per aiutare i clienti a individuare il punto in cui aggiungere l'istruzione. Non rimuovere nessuna istruzione e non digitare queste ellissi nella policy esistente.

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

    L'entità IAM che modifica questa politica deve disporre dell'autorizzazione in IAM per modificare le politiche.

    Per ulteriori informazioni, consulta Modifica delle politiche gestite dai clienti o la sezione «Modificare o eliminare una politica in linea per un gruppo, un utente o un ruolo» in Working with inline policies (console) nella IAM User Guide.

  5. Crea una regola in CloudWatch Events. Per fare ciò, apri la CloudWatch console all'indirizzo https://console.aws.amazon.com/cloudwatch.

  6. Nel riquadro di navigazione, in Events (Eventi), selezionare Rules (Regolamento), quindi Create rule (Crea regolamento).

  7. Nella pagina Step 1: Create rule (Fase 1: Creare regolamento), dovrebbero già essere selezionate le opzioni Event Pattern (Modello evento) e Build event pattern to match events by service (Crea un modello evento da abbinare agli eventi in base al servizio).

  8. Per Service Name (Nome del servizio), selezionare CodeBuild. Per Event Type (Tipo di evento), All Events (Tutti gli eventi) dovrebbe già essere selezionato.

  9. Il codice seguente deve essere visualizzato nell'anteprima del modello di evento:

    { "source": [ "aws.codebuild" ] }
  10. Scegliete Modifica e sostituite il codice in Event Pattern Preview con uno dei due modelli di regole seguenti.

    Il primo modello di regola attiva un evento quando una compilazione viene avviata o completata, per i progetti di compilazione specificati in 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" ] } }

    Nella regola precedente, eseguire le modifiche al codice seguente laddove necessario.

    • Per attivare un evento quando una compilazione viene avviata o completata, lasciare tutti i valori come illustrato nell'array build-status oppure rimuovere completamente l'array build-status.

    • Per attivare un evento solo quando una compilazione viene completata, rimuovere IN_PROGRESS dall'array build-status.

    • Per attivare un evento solo quando una compilazione viene avviata, rimuovere tutti i valori eccetto IN_PROGRESS dall'array build-status.

    • Per attivare gli eventi per tutti i progetti di compilazione, rimuovere completamente l'array project-name.

    • Per attivare gli eventi solo per singoli progetti di compilazione, specificare il nome di ciascun progetto di compilazione nell'array project-name.

    Il secondo modello di regola attiva un evento ogni volta che una compilazione si sposta da una fase di compilazione a un'altra, per i progetti di compilazione specificati in 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" ] } }

    Nella regola precedente, eseguire le modifiche al codice seguente laddove necessario.

    • Per attivare un evento per ogni modifica della fase di compilazione (che può inviare fino a nove notifiche per ogni compilazione), lasciare tutti i valori come illustrato nell'array completed-phase oppure rimuovere completamente l'array completed-phase.

    • Per attivare gli eventi solo per le singole modifiche della fase di compilazione, rimuovere il nome di ciascun progetto di compilazione nell'array completed-phase per cui non si desidera attivare un evento.

    • Per attivare un evento per ogni modifica dello stato della fase di compilazione, lasciare tutti i valori come illustrato nell'array completed-phase-status oppure rimuovere completamente l'array completed-phase-status.

    • Per attivare gli eventi solo per le singole modifiche dello stato della fase di compilazione, rimuovere il nome di ciascuno stato della fase di compilazione nell'array completed-phase-status per cui non si desidera attivare un evento.

    • Per attivare gli eventi per tutti i progetti di compilazione, rimuovi l'array project-name.

    • Per attivare gli eventi per i singoli progetti di compilazione, specificare il nome di ciascun progetto di compilazione nell'array project-name.

    Per ulteriori informazioni sui pattern di eventi, consulta Event Patterns nella Amazon EventBridge User Guide.

    Per ulteriori informazioni sul filtraggio con pattern di eventi, consulta Content-based Filtering with Event Patterns nella Amazon EventBridge User Guide.

    Nota

    Se si desidera attivare gli eventi sia per le modifiche dello stato della compilazione che per le modifiche della fase di compilazione, è necessario creare due regole separate, una per le modifiche dello stato della compilazione e l'altra per le modifiche della fase di compilazione. Se si tenta di combinare entrambe le regole in una singola regola, la regola combinata potrebbe produrre risultati imprevisti o smettere di funzionare del tutto.

    Al termine della sostituzione del codice, selezionare Save (Salva).

  11. In Targets (Destinazioni), seleziona Add target (Aggiungi destinazione).

  12. Nell'elenco degli obiettivi, selezionare SNS topic (Argomento SNS);

  13. Per Argomento, selezionare l'argomento identificato o creato in precedenza.

  14. Espandere Configure input (Configura input), quindi selezionare Input Transformer (Trasformatore di input).

  15. Nella casella Input Path (Percorso dell'input), immettere uno dei seguenti percorsi di input.

    Per una regola con il valore CodeBuild Build State Change per detail-type, immettere quanto segue.

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

    Per una regola con il valore CodeBuild Build Phase Change per detail-type, immettere quanto segue.

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

    Per ottenere altri tipi di informazioni, consultare Informazioni di riferimento sul formato di input delle notifiche di compilazione.

  16. Nella casella Input Template (Modello dell'input), immettere uno dei seguenti modelli di input.

    Per una regola con il valore CodeBuild Build State Change per detail-type, immettere quanto segue.

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

    Per una regola con il valore CodeBuild Build Phase Change per detail-type, immettere quanto segue.

    "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
  17. Scegli Configura dettagli.

  18. Nella pagina Step 2: Configure rule details (Fase 2: Configurare i dettagli della regola), immettere un nome e una descrizione facoltativa. Per State (Stato), lasciare l'opzione Enabled (Abilitato) selezionata.

  19. Scegli Crea regola.

  20. Crea progetti di compilazione, esegui le build e visualizza le informazioni sulle build.

  21. Conferma che CodeBuild ora le notifiche di build sono state inviate correttamente. Ad esempio, verificare se le e-mail di notifica di compilazione si trovano nella casella di posta.

Per modificare il comportamento di una regola, nella CloudWatch console, scegli la regola che desideri modificare, scegli Azioni e quindi scegli Modifica. Apportare le modifiche alla regola, scegliere Configure details (Configura dettagli) e quindi selezionare Update rule (Aggiorna regola).

Per smettere di usare una regola per inviare notifiche di build, nella CloudWatch console, scegli la regola che vuoi smettere di usare, scegli Azioni e quindi scegli Disabilita.

Per eliminare completamente una regola, nella CloudWatch console, scegli la regola che desideri eliminare, scegli Azioni, quindi scegli Elimina.

Risorse correlate

Informazioni di riferimento sul formato di input delle notifiche di compilazione

CloudWatch fornisce notifiche in formato JSON.

Le notifiche di modifica dello stato di compilazione utilizzano il seguente 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:5.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" } }

Le notifiche di modifica della fase di compilazione utilizzano il seguente 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:5.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" } }