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

Уоррен — в прошлом разработчик, а ныне технический эксперт в сфере ИТ, работающий в Atlassian с 2021 года. Его опыт чрезвычайно обширен, начиная с программного обеспечения для телекоммуникаций на COBOL для мэйнфреймов и заканчивая современной облачной инфраструктурой на базе AWS. Он страстный поклонник технологий, уже успевший поработать на ниве исследований в сфере машинного обучения. Будучи техничским экспертом, Уоррен информирует людей о возможностях продуктов Atlassian и интеграциях партнеров посредством демонстраций, статей и видео. В свободное время его можно найти на татами, с увлечением занимающимся бразильским джиу-джитсу.
Чтобы продемонстрировать, как разрабатывать и развертывать приложения, а также управлять ими с помощью Jira Software и различных подключенных инструментов, наша команда создала ImageLabeller — простое демонстрационное приложение на платформе AWS, которое с помощью машинного обучения наносит метки на изображения.
На этой странице рассказывается, как настроить предопределенную модель AWS SageMaker, необходимую для успешной обработки изображений в ImageLabeller. Прежде чем начать, рекомендуем ознакомиться со страницами об архитектуре ImageLabeller и развертывании ImageLabeller с помощью GitHub в качестве контекста.
Добавление репозитория оповещений для интеграции с Opsgenie
Перейдите в Jira и создайте задачу для добавления репозитория оповещений AWS CloudWatch в GitHub. В этом примере идентификатор задачи Jira — IM-10.

Перейдите на GitHub и нажмите New (Создать). Выберите подходящую организацию в поле Owner (Владелец). Нажмите Create repository (Создать репозиторий), чтобы продолжить.

Нажмите Settings (Настройки), а затем — Secrets (Секреты). Добавьте идентификатор ключа доступа AWS как AWS_ACCESS_KEY_ID, а секретный ключ доступа AWS — как AWS_SECRET_ACCESS_KEY.

В терминале перейдите в репозиторий CloudWatchAlarms и выполните следующие команды для отправки кода AWS CloudFormation на GitHub.
1git add --all
2git commit -m "IM-10 add CloudWatchAlarms to github"
3git remote add origin git@github.com:PmmQuickStartGuides01/CloudWatchAlarms.git
4git branch -m mainline
5git push -u origin mainlineФайл шаблонов оповещений template.yml
1Description: 'A description'
2
3Resources:
4 OpsGenieSNS:
5 Type: AWS::SNS::Topic
6 Properties:
7 DisplayName: 'Opsgenie'
8 Subscription:
9 - Endpoint: 'https://api.opsgenie.com/v1/json/cloudwatch?apiKey=a4449509-6998-4d55-841d-2e6b363520c7'
10 Protocol: 'HTTPS'
11 TopicName: 'Opsgenie'
12
13 SubmitImageLambdaAlarm:
14 Type: AWS::CloudWatch::Alarm
15 Properties:
16 AlarmActions:
17 - !Ref 'OpsGenieSNS'
18 AlarmDescription: 'SubmitImage Too Many Invocations'
19 ComparisonOperator: 'GreaterThanThreshold'
20 Dimensions:
21 - Name: FunctionName
22 Value: !ImportValue 'SubmitImageFunctionName'
23 EvaluationPeriods: 1
24 MetricName: 'Invocations'
25 Namespace: 'AWS/Lambda'
26 Period: 60
27 Statistic: 'Sum'
28 Threshold: 10Задайте скопированный из Opsgenie URL-адрес конечной точки в качестве значения параметра endpoint в разделе subscription для темы SNS. SubmitImageLambdaAlarm отслеживает один показатель от SubmitImage AWS Lambda. Если число вызовов превышает 10 в минуту, срабатывает оповещение.
Действия GitHub для развертывания в AWS
Перейдите в репозиторий CloudWatchAlarms в терминале, создайте ветку с именем, соответствующим идентификатору задачи Jira, и создайте папку .github/workflows.
1git checkout -b IM-10
2mkdir -p .github/workflows && cd .github/workflowsСоздайте файл deploy-test-staging.yml со следующим кодом YAML. В нем задается рабочий процесс развертывания для тестовых и промежуточных сред, который выполняется при отправке в ветки, отличные от основной.
1name: deploy-cloudwatchalarms-test-staging
2on:
3 push:
4 branches:
5 - '*'
6 - '!mainline'
7
8jobs:
9 deploy-us-west-1:
10 runs-on: ubuntu-latest
11 outputs:
12 env-name: ${{ steps.env-name.outputs.environment }}
13 steps:
14 - name: Checkout code
15 uses: actions/checkout@v2
16 - name: Configure AWS credentials
17 id: creds
18 uses: aws-actions/configure-aws-credentials@v1
19 with:
20 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
21 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
22 aws-region: "us-west-1"
23 - name: Deploy to AWS CloudFormation
24 uses: aws-actions/aws-cloudformation-github-deploy@v1
25 with:
26 name: OpenDevOpsAlarms
27 template: template.yml
28 no-fail-on-empty-changeset: "1"
29
30 deploy-us-east-2:
31 runs-on: ubuntu-latest
32 needs: deploy-us-west-1
33 steps:
34 - name: Checkout code
35 uses: actions/checkout@v2
36 - name: Configure AWS credentials
37 id: creds
38 uses: aws-actions/configure-aws-credentials@v1
39 with:
40 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
41 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
42 aws-region: "us-east-2"
43 - name: Deploy to AWS CloudFormation
44 uses: aws-actions/aws-cloudformation-github-deploy@v1
45 with:
46 name: OpenDevOpsAlarms
47 template: template.yml
48 no-fail-on-empty-changeset: "1"Затем создайте файл deploy-prod.yml со следующим кодом YAML. В нем задается рабочий процесс развертывания для рабочих сред, который выполняется, когда запрос pull объединяет изменения с основной веткой.
1name: deploy-cloudwatchalarms-prod
2on:
3 pull_request:
4 branches:
5 - mainline
6
7jobs:
8 deploy-us-west-2:
9 runs-on: ubuntu-latest
10 outputs:
11 env-name: ${{ steps.env-name.outputs.environment }}
12 steps:
13 - name: Checkout code
14 uses: actions/checkout@v2
15 - name: Configure AWS credentials
16 id: creds
17 uses: aws-actions/configure-aws-credentials@v1
18 with:
19 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
20 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
21 aws-region: "us-west-2"
22 - name: Deploy to AWS CloudFormation
23 uses: aws-actions/aws-cloudformation-github-deploy@v1
24 with:
25 name: OpenDevOpsAlarms
26 template: template.yml
27 no-fail-on-empty-changeset: "1"
28
29 deploy-ca-central-1:
30 runs-on: ubuntu-latest
31 needs: deploy-us-west-2
32 steps:
33 - name: Checkout code
34 uses: actions/checkout@v2
35 - name: Configure AWS credentials
36 id: creds
37 uses: aws-actions/configure-aws-credentials@v1
38 with:
39 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
40 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
41 aws-region: "ca-central-1"
42 - name: Deploy to AWS CloudFormation
43 uses: aws-actions/aws-cloudformation-github-deploy@v1
44 with:
45 name: OpenDevOpsAlarms
46 template: template.yml
47 no-fail-on-empty-changeset: "1"
48
49 deploy-us-east-1:
50 runs-on: ubuntu-latest
51 needs: deploy-ca-central-1
52 steps:
53 - name: Checkout code
54 uses: actions/checkout@v2
55 - name: Configure AWS credentials
56 id: creds
57 uses: aws-actions/configure-aws-credentials@v1
58 with:
59 aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
60 aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
61 aws-region: "us-east-1"
62 - name: Deploy to AWS CloudFormation
63 uses: aws-actions/aws-cloudformation-github-deploy@v1
64 with:
65 name: OpenDevOpsAlarms
66 template: template.yml
67 no-fail-on-empty-changeset: "1"Отправка в функциональную ветку
В командной строке выполните следующие запросы, чтобы отправить код в ветку IM-10 вашего репозитория CloudWatchAlarms.
1git add --all
2git commit -m "IM-10 add github actions to CloudWatchAlarms"
3git push -u origin IM-10Нажмите Actions (Действия), чтобы увидеть запущенные рабочие процессы.

Создание запроса pull
Нажмите Create pull request (Создать запрос pull), чтобы объединить его с основной веткой.

Нажмите Actions (Действия), чтобы проследить за развертыванием в рабочую среду.

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

Проверьте, появилось ли уведомление в Slack.

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