Implemente alarmes do AWS CloudWatch com o GitHub
![Foto de rosto de Warren Marusiak](https://wac-cdn.atlassian.com/dam/jcr:7509aefb-43e8-401d-90fe-0850cbe6bb13/wmarusiak_headshot%20(1).png?cdnVersion=2079)
Warren Marusiak
Evangelista tecnológico sênior
Para demonstrar como desenvolver, implementar e gerenciar aplicativos usando o Jira Software e várias ferramentas conectadas, nossa equipe criou o ImageLabeller, um aplicativo de demonstração simples gerado na AWS que usa aprendizado de máquina para aplicar etiquetas às imagens.
Esta página aborda como configurar um modelo predefinido do AWS SageMaker, um pré-requisito para que o ImageLabeller processe imagens com êxito. Antes de começar, recomendamos a leitura das páginas da arquitetura do ImageLabeller e da configuração do AWS SageMaker para contextualizar.
Adicione um repositório de alarmes para integração com o Opsgenie
Acesse o Jira e crie um item novo do Jira para adicionar um repositório de alarmes do AWS CloudWatch ao GitHub. Neste exemplo, o ID do item do Jira é GI-10.
![captura de tela do item do jira para adicionar o repositório github](https://wac-cdn.atlassian.com/dam/jcr:f5497e4c-8c42-4291-90f4-35fc3ddb13ca/screenshot_jsw_issueaddgithubalarmsrepository.png?cdnVersion=2079)
Acesse o GitHub e clique em Novo. Escolha a organização apropriada para o proprietário. Clique em Criar repositório para continuar.
![captura de tela da criação de repositório de alarmes no github](https://wac-cdn.atlassian.com/dam/jcr:fdf36856-a64e-4b1d-baa2-65e1f49e85b7/screenshot_github_createalarmsrepository.png?cdnVersion=2079)
Clique em Configurações e depois em Segredos. Adicione seu ID de chave de acesso da AWS como AWS_ACCESS_KEY_ID e sua chave de acesso secreta da AWS como AWS_SECRET_ACCESS_KEY.
![captura de tela da adição de chaves de acesso da aws no github](https://wac-cdn.atlassian.com/dam/jcr:862e11d1-ef4e-4e21-92e9-5916c67f115a/screenshot_github_addawsaccesskeyalarmsrepo.png?cdnVersion=2079)
No seu terminal, acesse seu repositório CloudWatchAlarms e execute o seguinte para enviar seu código do AWS CloudFormation para o 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
template.yml de alarmes
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
Defina o endpoint de assinatura do tópico do SNS como o URL do endpoint que você copiou do Opsgenie. O SubmitImageLambdaAlarm monitora uma única métrica emitida pelo submitImage AWS Lambda. Se houver mais de 10 invocações, em um minuto o alarme é disparado.
Ações do GitHub para implementação na AWS
Acesse seu repositório CloudWatchAlarms em seu terminal, crie uma ramificação com o nome do seu ID de item do Jira e crie um diretório .github/workflows .
git checkout -b IM-10
mkdir -p .github/workflows && cd .github/workflows
Crie deploy-test-staging.yml com o seguinte yaml. Isso define um fluxo de trabalho de implementação para seus ambientes de teste e staging que é executado durante envios para filiais que não sejam a linha principal.
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"
Em seguida, crie o deploy-prod.yml com o yaml abaixo. Ele define o fluxo de trabalho da implementação nos ambientes de produção que é executado quando uma solicitação pull mescla as alterações na linha principal.
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"
Enviando para uma ramificação de recursos
Na linha de comando, execute o seguinte para enviar seu código para a ramificação GI-10 do seu repositório CloudWatchAlarms.
git add --all
git commit -m "IM-10 add github actions to CloudWatchAlarms"
git push -u origin IM-10
Clique em Ações para ver os fluxos de trabalho em execução.
![captura de tela dos fluxos de trabalho em execução no github](https://wac-cdn.atlassian.com/dam/jcr:ba53984a-1acd-48d1-8220-bb2d49f201bd/screenshot_github_seerunningworkflowsalarmsrepo.png?cdnVersion=2079)
Criar uma solicitação pull
Clique em Criar pull request para mesclar na linha principal.
![captura de tela da criação de solicitação pull no github](https://wac-cdn.atlassian.com/dam/jcr:82c762bf-f4a5-4361-b528-5ba687b995a6/screenshot_github_createpullrequestalarmsrepo.png?cdnVersion=2079)
Clique em Ações para monitorar a implementação da Produção.
![captura de tela da implementação da produção no github](https://wac-cdn.atlassian.com/dam/jcr:743455d2-8514-433e-ba57-d9ff3376fe3a/screenshot_github_monitorproductionalarmsrepo.png?cdnVersion=2079)
Como testar o alarme
Gere um alerta acionando o alarme do AWS CloudWatch que você acabou de configurar ou clicando em Criar alerta.
![captura de tela da criação de alerta no opsgenie](https://wac-cdn.atlassian.com/dam/jcr:bf0b4621-78c9-4eff-8393-e60a6e84cb4e/screenshot_opsgenie_testgithubalarmsrepo.png?cdnVersion=2079)
Verifique o Slack para ver se a notificação apareceu.
![captura de tela da notificação do slack no opsgenie](https://wac-cdn.atlassian.com/dam/jcr:e3e5423a-bc3d-442d-b804-fcc88788e731/screenshot_opsgenie_slackintegrationnotificationgithub.png?cdnVersion=2079)
Parabéns! Você conseguiu. O ImageLabeller agora está instalado e funcionando.
Compartilhe este artigo
Próximo tópico
Leitura recomendada
Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.
![Ilustração do DevOps](https://wac-cdn.atlassian.com/dam/jcr:bd9d8b2c-ca36-444f-8595-719cb1990e64/Devops-community.png?cdnVersion=2079)
Comunidade de DevOps
![Ilustração do DevOps](https://wac-cdn.atlassian.com/dam/jcr:297108ea-d232-4368-af51-b53af230c4fe/Simulation-workshop.png?cdnVersion=2079)
Caminho de aprendizagem de DevOps
![Ilustração do mapa](https://wac-cdn.atlassian.com/dam/jcr:25f6330a-4191-408f-a4e5-2e24bfba67b4/Maturity-model.png?cdnVersion=2079)