Close

Bereitstellen von AWS CloudWatch-Warnmeldungen mit GitHub

Portrait Warren Marusiak
Warren Marusiak

Senior Technical Evangelist

Um zu demonstrieren, wie Anwendungen mit Jira Software und verschiedenen verbundenen Tools entwickelt, bereitgestellt und verwaltet werden können, hat unser Team ImageLabeller entwickelt. Dabei handelt es sich um eine einfache Demo-Anwendung, die auf AWS basiert und maschinelles Lernen nutzt, um Images mit Stichwörtern zu versehen.

Auf dieser Seite wird das Einrichten eines vordefinierten AWS SageMaker-Modells erläutert. Dies ist eine Voraussetzung für die erfolgreiche Verarbeitung von Images durch ImageLabeller. Wir empfehlen dir, vorab die Seiten zur ImageLabeller-Architektur und zum Bereitstellen von ImageLabeller mit GitHub zu lesen, um mehr über den Kontext zu erfahren.


Hinzufügen eines Warnmeldungs-Repositorys für die Opsgenie-Integration

Erstelle in Jira einen neuen Jira-Vorgang für das Hinzufügen eines AWS CloudWatch-Warnmeldungs-Repositorys zu GitHub. In diesem Beispiel lautet die Jira-Vorgangs-ID "IM-10".

Screenshot: Jira-Vorgang zum Hinzufügen des GitHub-Repositorys

Klicke in GitHub auf Neu. Wähle unter Besitzer die passende Organisation aus. Klicke auf Repository erstellen, um fortzufahren.

Screenshot: Erstellen eines Repositorys für Warnmeldungen in Bitbucket

Klicke auf Einstellungen und dann auf Secrets (Geheime Schlüssel). Füge deine AWS-Zugangsschlüssel-ID als AWS_ACCESS_KEY_ID und deinen geheimen AWS-Zugriffsschlüssel als AWS_SECRET_ACCESS_KEY hinzu.

Screenshot: Hinzufügen von AWS-Zugriffsschlüsseln in GitHub

Wechsle in deinem Terminal zum Repository "CloudWatchAlarms" und führe den folgenden Befehl aus, um deinen AWS CloudFormation-Code an GitHub zu 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" für Warnmeldungen

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

Setze den Endpunkt für das Abonnement des SNS-Themas auf die Endpunkt-URL, die du aus Opsgenie kopiert hast. "SubmitImageLambdaAlarm" überwacht eine einzelne Metrik, die vom AWS Lambda SubmitImage ausgegeben wird. Wenn mehr als 10 Aufrufe pro Minute erfolgen, wird die Warnmeldung ausgelöst.

GitHub-Aktionen für das Bereitstellen in AWS

Wechsle in deinem Terminal zum Repository "CloudWatchAlarms", erstelle einen Branch, den du nach der Jira-Vorgangs-ID benennst, und erstelle das Verzeichnis ".github/workflows".

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

Erstelle "deploy-test-staging.yml" mit dem nachfolgend aufgeführten YAML. Dies definiert einen Deployment-Workflow für deine Test- und Staging-Umgebungen, der beim Pushen an andere Branches als den "mainline"-Branch ausgeführt wird.

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"

Erstelle dann "deploy-prod.yml" mit dem nachfolgend aufgeführten YAML. Dies definiert einen Deployment-Workflow für deine Produktionsumgebungen, der beim Mergen von Änderungen in den "mainline"-Branch per Pull-Anfrage ausgeführt wird.

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"

Pushen an einen Feature Branch

Führe über die Befehlszeile den nachfolgend angegebenen Befehl aus, um deinen Code an den Branch "IM-10" des Repositorys "CloudWatchAlarms" zu pushen.

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

Klicke auf Aktionen, um die laufenden Workflows anzuzeigen.

Screenshot: Ausführen von Workflows in GitHub

Pull Requests erstellen

Klicke auf Pull-Anfrage erstellen, um einen Merge in "mainline" durchzuführen.

Screenshot: Erstellen von Pull-Anfragen in GitHub

Klicke auf Aktionen, um das Produktions-Deployment zu überwachen.

Screenshot: Produktions-Deployment in GitHub

Testen der Warnmeldung

Generiere eine Warnmeldung, indem du die gerade eingerichtete AWS CloudWatch-Warnmeldung auslöst oder auf "Create alert" (Warnmeldung erstellen) klickst.

Screenshot: Erstellen einer Warnmeldung in Opsgenie

Überprüfe in Slack, ob die Benachrichtigung angezeigt wurde.

Screenshot: Slack-Benachrichtigung in Opsgenie

Bravo! Du hast es geschafft. ImageLabeller ist jetzt betriebsbereit.

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.


Diesen Artikel teilen

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Abbildung: DevOps

DevOps-Community

Abbildung: DevOps

DevOps-Lernpfad

Abbildung: Karte

Kostenlos loslegen

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up