Close

Wdrażanie alarmów AWS CloudWatch za pomocą GitHub

Warren Marusiak — zdjęcie portretowe
Warren Marusiak

Starszy propagator techniczny

Aby zademonstrować sposób opracowywania i wdrażania aplikacji oraz zarządzania nimi przy użyciu Jira Software oraz różnych połączonych narzędzi, nasz zespół utworzył ImageLabeller, prostą aplikację demonstracyjną opartą na usłudze AWS, która wykorzystuje uczenie maszynowe do oznaczania etykietami obrazów.

Na tej stronie opisano, jak skonfigurować wstępnie zdefiniowany model AWS SageMaker wymagany, aby aplikacja ImageLabeller mogła skutecznie przetwarzać obrazy. Przed rozpoczęciem najlepiej zapoznać się ze stronami na temat architektury aplikacji ImageLabeller oraz wdrażania aplikacji ImageLabeller za pomocą GitHub, aby uzyskać kontekst.


Dodawanie repozytorium alarmów na potrzeby integracji z Opsgenie

Przejdź do systemu Jira i utwórz nowe zgłoszenie Jira dotyczące dodania repozytorium alarmów AWS CloudWatch do GitHub. W tym przykładzie identyfikator zgłoszenia Jira to IM-10.

Zrzut ekranu zgłoszenia Jira dotyczącego dodania repozytorium GitHub

Przejdź do GitHub i kliknij opcję New (Nowy). Wybierz odpowiednią organizację w pozycji Owner (Właściciel). Kliknij przycisk Create repository (Utwórz repozytorium), aby kontynuować.

Zrzut ekranu tworzenia repozytorium alarmów w GitHub

Kliknij kolejno opcje Settings (Ustawienia) i Secrets (Klucze tajne). Dodaj swój identyfikator klucza dostępu AWS jako AWS_ACCESS_KEY_ID oraz swój tajny klucz dostępu AWS jako AWS_SECRET_ACCESS_KEY.

Zrzut ekranu dodawania kluczy dostępu AWS w GitHub

W terminalu przejdź do repozytorium CloudWatchAlarms i uruchom poniższe polecenie, aby wypchnąć kod AWS CloudFormation do 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

Plik template.yml alarmów

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

Ustaw punkt końcowy subskrypcji tematu SNS na adres URL punktu końcowego skopiowany z Opsgenie. SubmitImageLambdaAlarm monitoruje jeden wskaźnik emitowany przez funkcję AWS Lambda submitImage. Jeśli liczba wywołań w ciągu minuty przekroczy 10, zostanie wygenerowany alarm.

Czynności GitHub wdrażania w AWS

Przejdź do repozytorium CloudWatchAlarms w terminalu, utwórz gałąź o nazwie odpowiadającej identyfikatorowi zgłoszenia Jira i utwórz katalog .github/workflows.

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

Utwórz plik deploy-test-staging.yml zawierający poniższy kod yaml. Spowoduje to zdefiniowanie wdrożeniowego przepływu pracy dla środowisk testowych i przejściowych, który będzie uruchamiany podczas wypychania kodu do gałęzi innych niż 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"

Następnie utwórz plik deploy-prod.yml zawierający poniższy kod yaml. Spowoduje to zdefiniowanie wdrożeniowego przepływu pracy dla środowisk produkcyjnych, który będzie uruchamiany podczas scalania zmian z pull requestu z gałęzią 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"

Wypychanie do gałęzi funkcji

Z poziomu wiersza polecenia uruchom poniższe polecenie, aby wypchnąć kod do gałęzi IM-10 repozytorium CloudWatchAlarms.

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

Kliknij Actions (Czynności), aby zobaczyć uruchomione przepływy pracy.

Zrzut ekranu uruchomionych przepływów pracy w GitHub

Tworzenie pull requestu

Kliknij przycisk Create pull request (Utwórz pull request), aby scalić z gałęzią mainline.

Zrzut ekranu tworzenia pull requestu w GitHub

Kliknij Actions (Czynności), aby monitorować wdrożenie produkcyjne.

Zrzut ekranu wdrożenia produkcyjnego w GitHub

Testowanie alarmu

Wygeneruj alert, wyzwalając skonfigurowany przed chwilą alarm AWS CloudWatch lub klikając przycisk Create alert (Utwórz alert).

Zrzut ekranu tworzenia alertu w Opsgenie

Sprawdź, czy powiadomienie pojawiło się w aplikacji Slack.

Zrzut ekranu powiadomienia Slack w Opsgenie

Brawo! Udało się. Aplikacja ImageLabeller już działa.

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.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność DevOps

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Ilustracja przedstawiająca mapę

Zacznij korzystać za darmo

Zapisz się do newslettera DevOps

Thank you for signing up