Implemente alarmes do AWS CloudWatch com o GitLab
![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 monitorar o ImageLabeller com o Opsgenie. Antes de começar, recomendamos a leitura das páginas sobre a arquitetura do ImageLabeller e a implementação do ImageLabeller com o GitLab 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 GitLab. Neste exemplo, o ID do item do Jira é GI-6.
![Captura de tela do painel de GI](https://wac-cdn.atlassian.com/dam/jcr:ec07a8ca-d476-402f-a720-a6946dc9d75c/jsw_createissueaddrepocloudwatchalarms.png?cdnVersion=2079)
Acesse o GitLab e crie um novo projeto. Atualize o URL do projeto para usar o grupo que você vinculou ao Jira. Clique em Criar projeto.
![captura de tela de criar projeto no gitlab](https://wac-cdn.atlassian.com/dam/jcr:ddb680ec-de20-47e5-9379-0426b73da91f/gitlab_crearteprojectcloudwatch.png?cdnVersion=2079)
Em seu terminal, acesse seu repositório CloudWatchAlarms e execute o seguinte para enviar seu arquivo template.yml do AWS CloudFormation para o 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
Assim como com os repositórios anteriores, você deve adicionar chaves de acesso da AWS, configurar ramificações protegidas e configurar ambientes de implementação.
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.
.gitlab-ci.yml para implementação na AWS
Acesse seu repositório CloudWatchAlarms no terminal e crie uma ramificação com o nome do ID de item do Jira.
git checkout -b IM-6
Crie o arquivo .gitlab-ci.yml com o seguinte yaml. Isso define um fluxo de trabalho de implementação para seus ambientes de teste, staging e produção.
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
Enviando para uma ramificação de recursos
Execute o seguinte na linha de comando para enviar suas alterações para a ramificação GI-6 do seu repositório CloudWatchAlarms. Inclua o ID do item do Jira nas mensagens de commit e nos nomes das ramificações para permitir a integração com o Jira GitLab e acompanhar o que está acontecendo em seu projeto.
git add --all
git commit -m "IM-6 .gitlab-ci.yml to CloudWatchAlarms repo"
git push -u origin IM-6
Clique em IC/CD e, em seguida, em Pipelines para ver o pipeline em execução.
Crie uma solicitação de mesclagem
Crie uma solicitação de mesclagem para implementar em seus ambientes de produção após as implementações do GitLab em seus ambientes de teste.
![capturas de tela de criar solicitações de mesclagem](https://wac-cdn.atlassian.com/dam/jcr:8d4e54c1-e8ad-48ae-8813-ab12a446d9c7/gitlab_mergerequestcloudwatch.png?cdnVersion=2079)
Mescle as alterações na linha principal após a conclusão do pipeline de solicitação de mesclagem. Clique em IC/CD e, em seguida, em Pipelines para ver o pipeline de produção em execução.
![captura de tela de pipelines de mesclagem](https://wac-cdn.atlassian.com/dam/jcr:4b89d321-2cc8-4301-bcff-6e707ad8fbf1/gitlab_runningproductionpipelinecloudwatch.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 do teste de alarme](https://wac-cdn.atlassian.com/dam/jcr:052db568-f3fb-4119-9ebc-8392bd638ed2/opsgenie_testgitlabalarmsrepo.png?cdnVersion=2079)
Verifique o Slack para ver se a notificação apareceu.
![captura de tela da notificação do slack](https://wac-cdn.atlassian.com/dam/jcr:188523f6-38fe-4a02-ace6-dc7443a14d8d/opsgenie_slackintegrationnotification.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)