Close

Implementeer AWS CloudWatch-alarmen met GitLab

Profielfoto van Warren Marusiak
Warren Marusiak

Senior Technical Evangelist

Om te demonstreren hoe je toepassingen ontwikkelt, implementeert en beheert met behulp van Jira Software en verschillende bijbehorende tools, heeft ons team ImageLabeller aangemaakt, een eenvoudige demotoepassing gebouwd op AWS die gebruikmaakt van machine learning om labels op afbeeldingen aan te brengen.

Op deze pagina wordt beschreven hoe je ImageLabeller monitort met Opsgenie. We raden je aan om, voordat je begint, de pagina's ImageLabeller-architectuur en ImageLabeller implementeren met GitLab te lezen voor meer context.

Voeg een repository voor alarmen toe voor Opsgenie-integratie

Ga naar Jira en maak een nieuwe Jira-issue door de AWS CloudWatch-repository voor alarmen toe te voegen aan GitLab. In dit voorbeeld is de Jira-issue-ID IM-6.

Screenshot van het IM-bord

Ga naar GitLab en maak een nieuw project. Werk de URL van het project bij om de groep te gebruiken die je aan Jira hebt gekoppeld. Klik op Project aanmaken.

screenshot project aanmaken in gitlab

Ga in je terminal naar je CloudWatchAlarms-repository en voer het volgende uit om je template.yml-bestand van AWS CloudFormation naar GitLab te pushen.

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

template.yml voor alarmen

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

Stel het eindpunt van het abonnement op SNS-onderwerpen in op de eindpunt-URL die je van Opsgenie hebt gekopieerd. Het SubmitImageLambdaAlarm monitort één statistiek die wordt uitgezonden door de submitImage AWS Lambda. Als er binnen een minuut meer dan 10 aanroepingen zijn, wordt er alarm geslagen.

.gitlab-ci.yml voor implementatie in AWS

Ga naar je CloudWatchAlarms-repository in je terminal en maak een branch aan die vernoemd is naar je Jira-issue-ID.

git checkout -b IM-6

Maak een .gitlab-ci.yml-bestand met de volgende yaml. Hierdoor wordt een implementatieworkflow voor je test-, staging- en productieomgevingen gedefinieerd.

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

Naar een functie-branch pushen

Voer vanaf de opdrachtregel het volgende uit om je wijzigingen naar de IM-6-branch van je CloudWatchAlarms-repository te pushen. Vermeld de Jira-issue-ID in commit-berichten en branchnamen om de Jira GitLab-integratie mogelijk te maken om bij te houden wat er in je project gebeurt.

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

Klik op CI/CD en vervolgens op Pipelines om te zien hoe de pipeline draait.

Maak een samenvoegingsverzoek aan

Dien een samenvoegingsverzoek in om te implementeren in je productieomgevingen nadat GitLab in je testomgevingen is geïmplementeerd.

screenshots samenvoegingsverzoeken aanmaken

Voeg de wijzigingen samen naar de mainline nadat de pipeline voor samenvoegingsverzoeken is voltooid. Klik op CI/CD en vervolgens op Pipelines om de lopende productiepipeline te zien.

screenshot samenvoegen van pipelines

Het alarm testen

Genereer een melding door het AWS CloudWatch-alarm te activeren dat je zojuist hebt ingesteld, of door te klikken op Melding aanmaken.

screenshot van de alarmtest

Controleer Slack om te zien of de melding is verschenen.

screenshot van Slack-melding

Fantastisch! Het is je gelukt. ImageLabeller is nu actief.

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.


Deel dit artikel

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Toelichting DevOps

DevOps-community

Toelichting DevOps

DevOps-leertraject

Afbeelding van kaart

Gratis aan de slag

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up