Créer un exemple de notifications pour CodeBuild - AWS CodeBuild

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Créer un exemple de notifications pour CodeBuild

Amazon CloudWatch Events dispose d'un support intégré pour AWS CodeBuild. CloudWatch Les événements sont un flux d'événements système décrivant les modifications apportées à vos AWS ressources. Avec CloudWatch Events, vous rédigez des règles déclaratives pour associer les événements intéressants aux actions automatisées à entreprendre. Cet exemple utilise Amazon CloudWatch Events et Amazon Simple Notification Service (Amazon SNS) pour envoyer des notifications de build aux abonnés chaque fois que les builds réussissent, échouent, passent d'une phase de construction à une autre, ou toute combinaison de ces événements.

Important

L'exécution de cet échantillon peut entraîner des frais sur votre AWS compte. Cela inclut les éventuels frais pour CodeBuild et pour les AWS ressources et les actions liées à Amazon CloudWatch et Amazon SNS. Pour plus d'informations, consultez les CodeBuild sections Tarification, CloudWatchTarification Amazon et Tarification Amazon SNS.

Exécution de l'exemple

Pour exécuter cet exemple
  1. Si vous avez déjà configuré une rubrique et que vous êtes abonné sur Amazon SNS et que vous souhaitez utiliser pour cet exemple, passez à l'étape 4. Sinon, si vous utilisez un utilisateur IAM au lieu d'un compte AWS root ou un utilisateur administrateur pour travailler avec Amazon SNS, ajoutez l'instruction suivante (entre ### BEGIN ADDING STATEMENT HERE ### et ### END ADDING STATEMENT HERE ###) à l'utilisateur (ou au groupe IAM auquel l'utilisateur est associé). L'utilisation d'un compte AWS root n'est pas recommandée. Cette déclaration permet de consulter, de créer, de s'abonner et de tester l'envoi de notifications à des rubriques sur Amazon SNS. Des ellipses (...) sont utilisées par souci de concision et pour vous aider à déterminer l'endroit où ajouter l'instruction. Ne supprimez aucune instruction, et n'entrez pas ces ellipses dans la stratégie existante.

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

    L'entité IAM qui modifie cette politique doit être autorisée dans IAM à modifier les politiques.

    Pour plus d'informations, consultez la section Modification des politiques gérées par le client ou la section « Pour modifier ou supprimer une politique intégrée pour un groupe, un utilisateur ou un rôle » dans Utilisation des politiques intégrées (console) du guide de l'utilisateur IAM.

  2. Créez ou identifiez un sujet dans Amazon SNS. AWS CodeBuild utilise CloudWatch Events pour envoyer des notifications de build à cette rubrique via Amazon SNS.

    Pour créer une rubrique:

    1. Ouvrez la console Amazon SNS à l'adresse https://console.aws.amazon.com/sns.

    2. Choisissez Créer une rubrique.

    3. Dans Create new topic (Créer une rubrique), pour Topic name (Nom de rubrique), saisissez un nom de rubrique (par exemple, CodeBuildDemoTopic). (Si vous choisissez un autre nom, remplacez-le dans l'ensemble de cet exemple.)

    4. Choisissez Créer une rubrique.

    5. Sur la CodeBuildDemoTopic page Détails du sujet :, copiez la valeur ARN du sujet. Vous avez besoin de cette valeur pour l’étape suivante.

    Pour plus d'informations, consultez la section Créer une rubrique dans le manuel Amazon SNS Developer Guide.

  3. Abonnez un ou plusieurs destinataires à la rubrique pour recevoir des notifications par e-mail.

    Pour abonner un destinataire à une rubrique :

    1. La console Amazon SNS étant ouverte depuis l'étape précédente, dans le volet de navigation, choisissez Subscriptions, puis Create subscription.

    2. Dans la boîte de dialogue Create subscription (Créer un abonnement, pour Topic ARN (ARN de la rubrique), collez l'ARN de la rubrique que vous avez copié à l'étape précédente.

    3. Pour Protocole, choisissez E-mail.

    4. Indiquez l'adresse e-mail complète du destinataire dans Endpoint (Point de terminaison).

    5. Choisissez Create Subscription (Créer un abonnement).

    6. Amazon SNS envoie un e-mail de confirmation d'abonnement au destinataire. Pour commencer à recevoir des notifications par e-mail, le destinataire doit choisir le lien Confirmer l'abonnement dans l'e-mail de confirmation d'abonnement. Une fois que le destinataire a cliqué sur le lien, s'il est correctement inscrit, Amazon SNS affiche un message de confirmation dans le navigateur Web du destinataire.

    Pour plus d'informations, consultez la section S'abonner à une rubrique du manuel Amazon SNS Developer Guide.

  4. Si vous utilisez un utilisateur plutôt qu'un compte AWS root ou un utilisateur administrateur pour travailler avec CloudWatch Events, ajoutez l'instruction suivante (entre ### BEGIN ADDING STATEMENT HERE ### et ### END ADDING STATEMENT HERE ###) à l'utilisateur (ou au groupe IAM auquel l'utilisateur est associé). L'utilisation d'un compte AWS root n'est pas recommandée. Cette déclaration est utilisée pour permettre à l'utilisateur de travailler avec CloudWatch Events. Des ellipses (...) sont utilisées par souci de concision et pour vous aider à déterminer l'endroit où ajouter l'instruction. Ne supprimez aucune instruction, et n'entrez pas ces ellipses dans la stratégie existante.

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

    L'entité IAM qui modifie cette politique doit être autorisée dans IAM à modifier les politiques.

    Pour plus d'informations, consultez la section Modification des politiques gérées par le client ou la section « Pour modifier ou supprimer une politique intégrée pour un groupe, un utilisateur ou un rôle » dans Utilisation des politiques intégrées (console) du guide de l'utilisateur IAM.

  5. Créez une règle dans CloudWatch Events. Pour ce faire, ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch.

  6. Dans le volet de navigation, sous Events, choisissez Rules, puis Create rule.

  7. Sur la page Step 1: Create rule page (Étape 1 : Créer une page de règle), les options Event Pattern (Modèle d'événement) et Build event pattern to match events by service (Créer un modèle d'événement pour correspondre aux événements en fonction du service) doivent toujours être activées.

  8. Pour Service Name (Nom du service), choisissez CodeBuild. Pour Event Type (Type d'événement), vous devez toujours choisir All Events (Tous les événements).

  9. Le code suivant doit être affiché dans l'aperçu du modèle d'événement :

    { "source": [ "aws.codebuild" ] }
  10. Choisissez Edit (Modifier) pour remplacer le code présent dans Event Pattern Preview (Aperçu du modèle d'événement) par l'un des deux modèles de règle suivants.

    Ce premier modèle de règle déclenche un événement chaque fois qu'une génération commence ou se termine, pour les projets de génération spécifiés dans 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" ] } }

    Dans la règle précédente, effectuez les modifications de code suivantes en fonction de vos besoins.

    • Pour déclencher un événement chaque fois qu'une génération commence ou se termine, laissez toutes les valeurs indiquées dans la zone build-status ou supprimez complètement la zone build-status.

    • Pour déclencher un événement uniquement lorsqu'une génération est terminée, supprimez IN_PROGRESS dans la zone build-status.

    • Pour déclencher un événement uniquement lorsqu'une génération commence, supprimez toutes les valeurs sauf IN_PROGRESS dans la zone build-status.

    • Pour déclencher des événements inhérents à tous les projets de génération, supprimez complètement la zone project-name.

    • Pour déclencher des événements uniquement pour les projets de génération individuels, spécifiez le nom de chaque projet de génération dans la zone project-name.

    Ce second modèle de règle déclenche un événement chaque fois qu'une génération passe d'une phase à une autre pour les projets de génération spécifiés dans 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" ] } }

    Dans la règle précédente, effectuez les modifications de code suivantes en fonction de vos besoins.

    • Pour déclencher un événement à chaque changement de phase de génération (ce qui peut générer l'envoi de jusqu'à 9 notifications par génération), laissez toutes les valeurs indiquées dans la zone completed-phase ou supprimez complètement le tableau completed-phase.

    • Pour déclencher des événements uniquement lors des changements de phase de génération individuelle, supprimez le nom de chaque phase de génération pour laquelle vous ne souhaitez pas déclencher un événement dans la zone completed-phase.

    • Pour déclencher un événement à chaque changement de statut de phase de génération, laissez toutes les valeurs indiquées dans la zone completed-phase-status ou supprimez complètement la zone completed-phase-status.

    • Pour déclencher des événements uniquement lors des changements de statut de phase de génération individuelle, supprimez le nom de chaque statut de phase de génération pour lequel vous ne souhaitez pas déclencher un événement dans la zone completed-phase-status.

    • Pour déclencher des événements pour tous les projets de génération, supprimez la zone project-name.

    • Pour déclencher des événements pour les projets de génération individuels, spécifiez le nom de chaque projet de génération dans la zone project-name.

    Pour plus d'informations sur les modèles d'événements, consultez la section Modèles d'événements dans le guide de EventBridge l'utilisateur Amazon.

    Pour plus d'informations sur le filtrage à l'aide de modèles d'événements, consultez la section Filtrage basé sur le contenu à l'aide de modèles d'événements dans le guide de EventBridge l'utilisateur Amazon.

    Note

    Si vous souhaitez déclencher des événements à la fois pour les changements d'état de génération et les changements de phase de génération, vous devez créer deux règles distinctes, une pour les changements d'état de génération et une autre pour les changements de phase de génération. Si vous essayez de combiner les deux règles en une seule, la règle combinée peut entraîner des résultats inattendus ou un arrêt de la procédure.

    Une fois que vous avez terminé le remplacement du code, choisissez Save.

  11. Pour Targets (Cibles), choisissez Add target (Ajouter une cible).

  12. Dans la liste des cibles, sélectionnez Rubrique SNS.

  13. Pour Topic, choisissez la rubrique que vous avez identifiée ou créée précédemment.

  14. Développez Configurer l'entrée, puis choisissez Transformateur d'entrée.

  15. Dans la zone Input Path (Chemin d'entrée), tapez l'un des chemins d'entrée ci-après.

    Pour une règle dont l'élément detail-type a pour valeur CodeBuild Build State Change, tapez ce qui suit.

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

    Pour une règle dont l'élément detail-type a pour valeur CodeBuild Build Phase Change, tapez ce qui suit.

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

    Pour obtenir d'autres types d'informations, consultez Référence du format d'entrée des notifications de génération.

  16. Dans la zone Input Template (Modèle d'entrée), tapez l'un des modèles d'entrée ci-après.

    Pour une règle dont l'élément detail-type a pour valeur CodeBuild Build State Change, tapez ce qui suit.

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

    Pour une règle dont l'élément detail-type a pour valeur CodeBuild Build Phase Change, tapez ce qui suit.

    "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
  17. Choisissez Configure details (Configurer les détails).

  18. Sur la page Step 2: Configure rule details (Étape 2 : Configurer les détails de la règle), tapez un nom et une description. Pour State (État), la case Enabled (Activé) doit rester sélectionnée.

  19. Choisissez Créer une règle.

  20. Créez des projets de build, exécutez les builds et consultez les informations de build.

  21. Confirmez CodeBuild que les notifications de build sont désormais correctement envoyées. Par exemple, vérifiez si les e-mails de notification de build sont à présent dans votre boîte de réception.

Pour modifier le comportement d'une règle, dans la CloudWatch console, choisissez la règle que vous souhaitez modifier, sélectionnez Actions, puis sélectionnez Modifier. Modifiez la règle, choisissez Configure details (Configurer les détails), puis choisissez Mettre à jour la règle (Update rule).

Pour arrêter d'utiliser une règle pour envoyer des notifications de build, dans la CloudWatch console, choisissez la règle que vous souhaitez arrêter d'utiliser, choisissez Actions, puis choisissez Désactiver.

Pour supprimer complètement une règle, dans la CloudWatch console, choisissez la règle que vous souhaitez supprimer, choisissez Actions, puis choisissez Supprimer.

Ressources connexes

Référence du format d'entrée des notifications de génération

CloudWatch fournit des notifications au format JSON.

Les notifications de changement d'état de génération utilisent le format suivant :

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

Les notifications de changement de phase de génération utilisent le format suivant :

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