Implemente alarmes do AWS CloudWatch com o Bitbucket
.png?cdnVersion=2595)
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 da página da arquitetura do ImageLabeller 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 Bitbucket. Neste exemplo, o ID do item do Jira é GI-9.

Vá para o Bitbucket e clique em Criar e depois em Repositório.

Selecione a Área de trabalho e o Projeto apropriados. Defina o Nome da ramificação padrão como linha principal. Clique em Criar repositório para continuar.

Acesse seu repositório do CloudWatchAlarms pelo seu terminal e execute o seguinte para enviar seu código de template do AWS CloudFormation para o 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 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.
bitbucket-pipelines.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.
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
Lembre-se de que você precisa habilitar pipelines, configurar ambientes de implementação e adicionar chaves de acesso da AWS ao repositório antes que os pipelines sejam executados.
Enviando para uma ramificação de funções
Execute o seguinte na linha de comando para enviar suas alterações para a ramificação GI-9 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 Bitbucket e acompanhar o que está acontecendo em seu projeto.
git add --all
git commit -m "IM-9 add bitbucket-pipelines.yml to CloudWatchAlarms"
git push -u origin IM-9
Clique em Pipelines e depois em GI-9 para ver o pipeline em execução.

Criar uma solicitação pull
Para criar uma solicitação pull, clique em Solicitações pull e depois em Criar solicitação pull. Conclua o solicitação pull e clique em Pipelines para ver a implementação da produção.

Como testar o alarme
Gere um alerta acionando o alarme do AWS CloudWatch que você acabou de configurar ou clicando em Criar alerta.

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.

Comunidade de DevOps

Caminho de aprendizagem de DevOps
