Close

Déployer des alarmes AWS CloudWatch avec Bitbucket

Portrait de Warren Marusiak
Warren Marusiak

Senior Technical Evangelist

Pour montrer comment développer, déployer et gérer des applications à l'aide de Jira Software et de divers outils connectés, notre équipe a créé ImageLabeller, une application de démo simple basée sur AWS qui utilise l'apprentissage machine pour appliquer des étiquettes à des images.

Cette page explique comment surveiller ImageLabeller avec Opsgenie. Avant de commencer, nous vous recommandons de lire la page consacrée à l'architecture ImageLabeller pour plus de contexte.

Ajouter un dépôt d'alarmes pour l'intégration Opsgenie

Accédez à Jira et créez un ticket Jira pour ajouter un dépôt d'alarmes AWS CloudWatch dans Bitbucket. Dans cet exemple, l'identifiant du ticket Jira est IM-9.

Capture d'écran d'ajout d'alarmes Opsgenie

Accédez à Bitbucket et cliquez sur Create (Créer), puis sur Repository (Dépôt).

Capture d'écran de dépôts

Sélectionnez l'espace de travail et le projet appropriés. Définissez le nom de la branche par défaut sur Mainline (Principale). Cliquez sur Create repository (Créer un dépôt) pour continuer.

Capture d'écran de création de dépôt

Accédez au dépôt CloudWatchAlarms sur votre terminal et exécutez les commandes suivantes pour pusher le code de votre modèle AWS CloudFormation vers Bitbucket.

git add --all
git commit -m "IM-9 add CloudWatchAlarms to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/cloudwatchalarms.git
git branch -m mainline
git push -u origin mainline

Fichier template.yml pour les alarmes

Description: 'A description'

Resources:
  OpsGenieSNS:
    Type: AWS::SNS::Topic
    Properties: 
      DisplayName: 'Opsgenie'
      Subscription:
        - Endpoint: 'https://api.opsgenie.com/v1/json/cloudwatch?apiKey=a4449509-6998-4d55-841d-2e6b363520c7'
          Protocol: 'HTTPS'
      TopicName: 'Opsgenie'

  SubmitImageLambdaAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties: 
      AlarmActions:
        - !Ref 'OpsGenieSNS'
      AlarmDescription: 'SubmitImage Too Many Invocations'
      ComparisonOperator: 'GreaterThanThreshold'
      Dimensions:
        - Name: FunctionName
          Value: !ImportValue 'SubmitImageFunctionName'
      EvaluationPeriods: 1
      MetricName: 'Invocations'
      Namespace: 'AWS/Lambda'
      Period: 60
      Statistic: 'Sum'
      Threshold: 10

Définissez le point de terminaison de l'abonnement de rubrique SNS sur l'URL de point de terminaison que vous avez copiée depuis Opsgenie. SubmitImageLambdaAlarm surveille une seule métrique émise par SubmitImage AWS Lambda. S'il y a plus de 10 invocations par minute, l'alarme se déclenche.

Fichier bitbucket-pipelines.yml pour le déploiement sur AWS

Accédez au dépôt CloudWatchAlarms de votre terminal, créez une branche portant l'identifiant de votre ticket Jira.

definitions:
  steps:
    - step: &deploy-test-usw1
        name: Deploy Test us-west-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-west-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-staging-use2
        name: Deploy Staging us-east-2
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-east-2'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-usw2
        name: Deploy Production us-west-2
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-west-2'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-use1
        name: Deploy Proudction us-east-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-east-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-cac1
        name: Deploy Production ca-central-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'ca-central-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
pipelines:
  default:
    - step:
        <<: *deploy-test-usw1
        deployment: Test us-west-1
    - step:
        <<: *deploy-staging-use2
        deployment: Staging us-east-2
  branches:
    mainline:
      - step:
          <<: *deploy-production-usw2
          deployment: Production us-west-2
      - step:
          <<: *deploy-production-use1
          deployment: Production us-east-1
      - step:
          <<: *deploy-production-cac1
          deployment: Production ca-central-1

N'oubliez pas que vous devez activer des pipelines, configurer des environnements de déploiement et ajouter des clés d'accès AWS au dépôt avant que les pipelines ne soient exécutés.

Faire un push vers une branche de fonctionnalité

Exécutez l'instruction suivante depuis la ligne de commande pour pusher vos changements vers la branche IM-9 de votre dépôt CloudWatchAlarms. Incluez l'identifiant du ticket Jira dans les messages de commit et les noms des branches pour permettre à l'intégration Jira Bitbucket de suivre l'évolution de votre projet.

git add --all
git commit -m "IM-9 add bitbucket-pipelines.yml to CloudWatchAlarms"
git push -u origin IM-9

Cliquez sur Pipelines, puis sur IM-9 pour voir le pipeline en cours d'exécution.

Captures d'écran d'IM-9 exécutant des pipelines

Création d'une pull request

Pour créer une pull request, cliquez sur Pull requests, puis sur Create pull request (Créer une pull request). Terminez la pull request, puis cliquez sur Pipelines pour voir le déploiement en production.

Captures d'écran de création de pull requests

Tester l'alarme

Générez une alerte en déclenchant l'alarme AWS CloudWatch que vous venez de configurer ou en cliquant sur Create alert (Créer une alerte).

Capture d'écran des alarmes de surveillance

Bravo ! Le tour est joué. ImageLabeller est désormais opérationnel.

Warren Marusiak
Warren Marusiak

Warren is a Canadian developer from Vancouver, BC with over 10 years of experience. He came to Atlassian from AWS in January of 2021.


Partager cet article

Lectures recommandées

Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.

Illustration Devops

Communauté DevOps

Illustration Devops

Parcours de formation DevOps

Illustration d'une carte

Essayez la solution gratuitement

Inscrivez-vous à notre newsletter Devops

Thank you for signing up