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

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 monitorować aplikację ImageLabeller przy użyciu Opsgenie. Przed rozpoczęciem najlepiej zapoznać się ze stronami na temat architektury aplikacji ImageLabeller oraz wdrażania aplikacji ImageLabeller za pomocą GitLab, 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 GitLab. W tym przykładzie identyfikator zgłoszenia Jira to IM-6.

Zrzut ekranu tablicy IM

Przejdź do GitLab i utwórz nowy projekt. Zaktualizuj adres URL projektu, aby użyć grupy połączonej z systemem Jira. Kliknij przycisk Utwórz projekt.

Zrzut ekranu tworzenia projektu w GitLab

W terminalu przejdź do repozytorium CloudWatchAlarms i uruchom poniższe polecenie, aby wypchnąć plik template.yml AWS CloudFormation do GitLab.

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

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.

Plik .gitlab-ci.yml wdrażania w AWS

Przejdź do repozytorium CloudWatchAlarms w terminalu i utwórz gałąź o nazwie zgodnej z identyfikatorem zgłoszenia Jira.

git checkout -b IM-6

Utwórz plik .gitlab-ci.yml zawierający poniższy kod yaml. Definiuje on wdrożeniowy przepływ pracy dla środowiska testowego, przejściowego i produkcyjnego.

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

Wypychanie do gałęzi funkcji

Wykonaj poniższą instrukcję z poziomu wiersza polecenia, aby wypchnąć zmiany do gałęzi IM-6 repozytorium CloudWatchAlarms. Uwzględnij identyfikator zgłoszenia Jira w komunikatach commita oraz nazwach gałęzi, aby wykorzystać integrację systemu Jira z GitLab do śledzenia, co dzieje się z Twoim projektem.

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

Kliknij opcję CI/CD, a następnie Pipelines (Pipeline'y), aby wyświetlić przebieg pipeline'u.

Tworzenie wniosku o scalenie

Utwórz wniosek o scalenie, aby dokonać wdrożenia w środowiskach produkcyjnych po tym, jak GitLab przeprowadzi wdrożenia w środowiskach testowych.

Zrzuty ekranu tworzenia wniosków o scalenie

Po ukończeniu pipeline'u wniosku o scalenie scal zmiany z gałęzią mainline. Kliknij opcję CI/CD, a następnie Pipeline'y, aby wyświetlić uruchomiony pipeline produkcyjny.

Zrzut ekranu pipeline'ów scalania

Testowanie alarmu

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

Zrzut ekranu testu alarmu

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

Zrzut ekranu powiadomienia w Slack

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

Polecane dla Ciebie

Społeczność DevOps

Ścieżka szkoleniowa DevOps

Zacznij korzystać bezpłatnie