Close

Развертывание оповещений AWS CloudWatch с помощью Bitbucket

Фото Уоррена Марусяка
Уоррен Марусяк

Старший технический эксперт

Чтобы продемонстрировать, как разрабатывать и развертывать приложения, а также управлять ими с помощью Jira Software и различных подключенных инструментов, наша команда создала ImageLabeller — простое демонстрационное приложение на платформе AWS, которое с помощью машинного обучения наносит метки на изображения.

На этой странице мы расскажем, как отслеживать ImageLabeller с помощью Opsgenie. Прежде чем начать, рекомендуем ознакомиться с архитектурой ImageLabeller в качестве контекста.

Добавление репозитория оповещений для интеграции с Opsgenie

Перейдите в Jira и создайте задачу для добавления репозитория оповещений AWS CloudWatch в Bitbucket. В этом примере идентификатор задачи Jira — IM-9.

снимок экрана: добавление оповещений Opsgenie

Перейдите в Bitbucket и нажмите Create (Создать), а затем — Repository (Репозиторий).

снимок экрана: репозитории

Выберите необходимые значения в полях Workspace (Рабочее пространство) и Project (Проект). Задайте mainline в качестве Default branch name (Имя ветки по умолчанию). Нажмите Create repository (Создать репозиторий), чтобы продолжить.

снимок экрана: создание репозитория

Перейдите в репозиторий CloudWatchAlarms в терминале и выполните следующие команды, чтобы отправить код шаблона AWS CloudFormation в Bitbucket.

git add --all
git commit -m "IM-9 add CloudWatchAlarms to Bitbucket"
git remote add origin git@bitbucket.org:pmmquickstartguides01/cloudwatchalarms.git
git branch -m mainline
git push -u origin mainline

Файл шаблонов оповещений template.yml

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

Задайте скопированный из Opsgenie URL-адрес конечной точки в качестве значения параметра endpoint в разделе subscription для темы SNS. SubmitImageLambdaAlarm отслеживает один показатель от SubmitImage AWS Lambda. Если число вызовов превышает 10 в минуту, срабатывает оповещение.

Файл bitbucket-pipelines.yml для развертывания в AWS

Перейдите в репозиторий CloudWatchAlarms в терминале и создайте ветку с именем, соответствующим идентификатору задачи Jira.

definitions:
  steps:
    - step: &deploy-test-usw1
        name: Deploy Test us-west-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-west-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-staging-use2
        name: Deploy Staging us-east-2
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-east-2'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-usw2
        name: Deploy Production us-west-2
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-west-2'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-use1
        name: Deploy Proudction us-east-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-east-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-cac1
        name: Deploy Production ca-central-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'ca-central-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM', 'CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
pipelines:
  default:
    - step:
        <<: *deploy-test-usw1
        deployment: Test us-west-1
    - step:
        <<: *deploy-staging-use2
        deployment: Staging us-east-2
  branches:
    mainline:
      - step:
          <<: *deploy-production-usw2
          deployment: Production us-west-2
      - step:
          <<: *deploy-production-use1
          deployment: Production us-east-1
      - step:
          <<: *deploy-production-cac1
          deployment: Production ca-central-1

Помните, что перед запуском конвейеров необходимо включить конвейеры, настроить среды развертывания и добавить ключи доступа AWS в репозиторий.

Отправка в функциональную ветку

Выполните следующие запросы в командной строке, чтобы отправить изменения в ветку IM-9 репозитория CloudWatchAlarms. Включите идентификатор задачи Jira в сообщения о коммитах и имена веток, чтобы позволить интеграции Jira с Bitbucket отслеживать, что происходит в проекте.

git add --all
git commit -m "IM-9 add bitbucket-pipelines.yml to CloudWatchAlarms"
git push -u origin IM-9

Нажмите Pipelines (Конвейеры), а затем — IM-9, чтобы увидеть запущенный конвейер.

снимки экрана: запущенные конвейеры IM-9

Создание запроса pull

Чтобы создать запрос pull, нажмите Pull requests (Запросы pull), а затем — Create pull request (Создать запрос pull). Завершите запрос pull и нажмите Pipelines (Конвейеры), чтобы проследить за развертыванием в рабочую среду.

снимки экрана: создание запросов pull

Тестирование оповещения

Создайте оповещение, вызвав срабатывание только что настроенного оповещения AWS CloudWatch или нажав кнопку Create alert (Создать оповещение).

снимок экрана: просмотр оповещений

Браво! Вам удалось настроить ImageLabeller.

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.


Поделитесь этой статьей

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Рисунок: DevOps

Сообщество DevOps

Рисунок: DevOps

Образовательные программы DevOps

Рисунок: карта

Начните работу бесплатно

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up