Close

Déployer des alarmes AWS CloudWatch avec GitHub

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 configurer un modèle prédéfini AWS SageMaker, une condition préalable au traitement des images par ImageLabeller. Avant de commencer, nous vous recommandons de lire les pages Architecture ImageLabeller et Déployer ImageLabeller avec GitHub 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 GitHub. Dans cet exemple, l'identifiant du ticket Jira est IM-10.

Capture d'écran de ticket Jira pour l'ajout d'un dépôt GitHub

Accédez à GitHub et cliquez sur New (Nouveau). Choisissez l'organisation appropriée dans Owner (Propriétaire). Cliquez sur Create repository (Créer un dépôt) pour continuer.

Capture d'écran de création d'un dépôt d'alarmes dans Bitbucket

Cliquez sur Settings (Paramètres), puis sur Secrets. Ajoutez votre identifiant de clé d'accès AWS sous AWS_ACCESS_KEY_ID et votre clé d'accès secrète AWS sous AWS_SECRET_ACCESS_KEY.

Capture d'écran d'ajout de clés d'accès AWS dans GitHub

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

git add --all
git commit -m "IM-10 add CloudWatchAlarms to github"
git remote add origin git@github.com: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.

Actions GitHub 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, puis créez un répertoire .github/workflows.

git checkout -b IM-10
mkdir -p .github/workflows && cd .github/workflows

Créez le fichier deploy-test-staging.yml avec le code yaml suivant. Cela définit un workflow de déploiement pour vos environnements de test et de staging qui s'exécute lors des pushs vers des branches autres que la branche principale.

name: deploy-cloudwatchalarms-test-staging
on:
  push:
    branches:
      - '*'
      - '!mainline'

jobs:
  deploy-us-west-1:
    runs-on: ubuntu-latest
    outputs:
      env-name: ${{ steps.env-name.outputs.environment }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-west-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-us-east-2:
    runs-on: ubuntu-latest
    needs: deploy-us-west-1
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-east-2"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

Ensuite, créez un fichier deploy-prod.yml avec le code yaml suivant. Cela définit un workflow de déploiement pour vos environnements de production qui s'exécute lorsqu'une pull request merge des changements dans la branche principale.

name: deploy-cloudwatchalarms-prod
on:
  pull_request:
    branches:
      - mainline

jobs:
  deploy-us-west-2:
    runs-on: ubuntu-latest
    outputs:
      env-name: ${{ steps.env-name.outputs.environment }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-west-2"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-ca-central-1:
    runs-on: ubuntu-latest
    needs: deploy-us-west-2
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "ca-central-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-us-east-1:
    runs-on: ubuntu-latest
    needs: deploy-ca-central-1
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-east-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

Faire un push vers une branche de fonctionnalité

À partir de la ligne de commande, exécutez la commande suivante pour pusher votre code vers la branche IM-10 de votre dépôt CloudWatchAlarms.

git add --all
git commit -m "IM-10 add github actions to CloudWatchAlarms"
git push -u origin IM-10

Cliquez sur Actions pour voir les workflows en cours d'exécution.

Capture d'écran d'exécution de workflows dans GitHub

Création d'une pull request

Cliquez sur Create pull request (Créer une pull request) pour effectuer un merge dans la branche principale.

Capture d'écran de création d'une pull request dans GitHub

Cliquez sur Actions pour surveiller le déploiement en production.

Capture d'écran de déploiement en production dans GitHub

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 de création d'une alerte dans Opsgenie

Consultez Slack pour voir si la notification apparaît.

Capture d'écran de notification Slack dans Opsgenie

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