Close

AWS CloudWatch-alarmen implementeren met GitHub

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 een vooraf gedefinieerd AWS SageMaker-model instelt, een vereiste voor ImageLabeller om afbeeldingen succesvol te verwerken. We raden je aan om voordat je begint de pagina's ImageLabeller-architectuur en ImageLabeller implementeren met GitHub 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 GitHub. In dit voorbeeld is de Jira-issue-ID IM-10.

screenshot van Jira-issue om een github-repository toe te voegen

Ga naar GitHub en klik op Nieuw. Kies de juiste organisatie voor Eigenaar. Klik op Repository aanmaken om verder te gaan.

screenshot van het aanmaken van een repository voor alarmen in github

Klik op Instellingen en vervolgens op Geheimen. Voeg je AWS-toegangssleutel-ID toe als AWS_ACCESS_KEY_ID en je geheime AWS-toegangssleutel als AWS_SECRET_ACCESS_KEY.

screenshot van het toevoegen van aws-toegangssleutels in github

Ga in je terminal naar je CloudWatchAlarms-repository en voer het volgende uit om je AWS CloudFormation-code naar GitHub te pushen.

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

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.

GitHub-acties voor implementatie in AWS

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

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

Maak deploy-test-staging.yml aan met de volgende yaml. Dit bepaalt een implementatieworkflow voor je test- en stagingomgevingen die wordt uitgevoerd tijdens pushes naar andere branches dan de mainline.

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"

Maak vervolgens deploy-prod.yml aan met de volgende yaml. Dit definieert een implementatieworkflow voor je productieomgevingen die wordt uitgevoerd wanneer een pull request wijzigingen samenvoegt in de mainline.

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"

Naar een functie-branch pushen

Voer vanaf de opdrachtregel het volgende uit om je code naar de IM-10-branch van je CloudWatchAlarms-repository te pushen.

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

Klik op Acties om de lopende workflows te zien.

screenshot van lopende workflows in github

Een pull-aanvraag aanmaken

Klik op Pull request aanmaken om in de mainline samen te voegen.

screenshot van het aanmaken van een pull request in github

Klik op Acties om de implementatie van de productie te monitoren.

screenshot van productie-implementatie in github

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 het aanmaken van een waarschuwing in opsgenie

Controleer Slack om te zien of de melding is verschenen.

screenshot van slack-melding in opsgenie

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