Close

Déployer des alarmes AWS CloudWatch avec GitLab

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 les pages Architecture ImageLabeller et Déployer ImageLabeller avec GitLab 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 GitLab. Dans cet exemple, l'identifiant du ticket Jira est IM-6.

Capture d'écran du tableau IM

Dans GitLab, créez un projet. Mettez à jour l'URL du projet de sorte à utiliser le groupe que vous avez lié à Jira. Cliquez sur Create project (Créer un projet).

Capture d'écran montrant la création d'un projet dans GitLab

Dans votre terminal, accédez à votre dépôt CloudWatchAlarms et exécutez les commandes suivantes pour pusher votre fichier template.yml AWS CloudFormation vers GitLab.

git add --all
git commit -m "IM-6 add CloudWatchAlarms repository to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/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 .gitlab-ci.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.

git checkout -b IM-6

Créez un fichier .gitlab-ci.yml avec le code yaml suivant. Cela définit un workflow de déploiement pour vos environnements de test, de staging et de production.

stages:
  - merge-request
  - test-us-west-1
  - test-us-east-2
  - production-us-west-2
  - production-us-east-1
  - production-ca-central-1

merge-request-pipeline-job:
  stage: merge-request
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  script:
    - echo "This pipeline always succeeds and enables merge."
    - echo true

deploy-test-us-west-1:
  stage: test-us-west-1
  environment: test-us-west-1
  rules:
    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
  script:
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsAlarms

deploy-test-us-east-2:
  stage: test-us-east-2
  environment: test-us-east-2
  rules:
    - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
  script:
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - aws cloudformation deploy --region us-east-2 --template-file template.yml --stack-name OpenDevOpsAlarms

deploy-production-us-west-2:
  stage: production-us-west-2
  environment: production-us-west-2
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
  script:
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - aws cloudformation deploy --region us-west-2 --template-file template.yml --stack-name OpenDevOpsAlarms

deploy-production-us-east-1:
  stage: production-us-east-1
  environment: production-us-east-1
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
  script:
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - aws cloudformation deploy --region us-east-1 --template-file template.yml --stack-name OpenDevOpsAlarms

deploy-production-ca-central-1:
  stage: production-ca-central-1
  environment: production-ca-central-1
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
  image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
  script:
    - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
    - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
    - aws cloudformation deploy --region us-east-2 --template-file template.yml --stack-name OpenDevOpsAlarms

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 GitLab de suivre l'évolution de votre projet.

git add --all
git commit -m "IM-6 .gitlab-ci.yml to CloudWatchAlarms repo"
git push -u origin IM-6

Cliquez sur CI/CD, puis sur Pipelines pour voir le pipeline s'exécuter.

Créer une demande de merge

Créez une demande de merge à déployer dans vos environnements de production après le déploiement de GitLab dans vos environnements de test.

Captures d'écran montrant la création de demandes de merge

Mergez les changements apportés à la branche principale une fois le pipeline de demandes de merge terminé. Cliquez sur CI/CD, puis sur Pipelines pour voir le pipeline de production en cours d'exécution.

Capture d'écran montrant des pipelines de merge

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 montrant le test d'alarme

Consultez Slack pour voir si la notification apparaît.

Capture d'écran de notification Slack

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