Развертывание оповещений 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.

снимок экрана: задача Jira по добавлению репозитория GitHub

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

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

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

снимок экрана: добавление ключей доступа AWS в GitHub

В терминале перейдите в репозиторий 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 (Действия), чтобы увидеть запущенные рабочие процессы.

снимок экрана: запущенные рабочие процессы в GitHub

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

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

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

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

снимок экрана: развертывание в рабочую среду в GitHub

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

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

снимок экрана: создание оповещения в Opsgenie

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

снимок экрана: уведомление Slack в Opsgenie

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

Рекомендовано для вас

Сообщество DevOps

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

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

Morty Proxy This is a proxified and sanitized view of the page, visit original site.