Close

Implementar alarmas de AWS CloudWatch con Bitbucket

Foto de Warren Marusiak
Warren Marusiak

Divulgador técnico sénior

Para demostrar cómo desarrollar, implementar y gestionar aplicaciones con Jira Software y varias herramientas conectadas, nuestro equipo creó ImageLabeller, una sencilla aplicación de demostración creada con AWS que utiliza el aprendizaje automático para aplicar etiquetas a las imágenes.

Esta página explica cómo monitorizar ImageLabeller con Opsgenie. Antes de empezar, te recomendamos que leas la página de arquitectura de ImageLabeller para ver el contexto.

Añade un repositorio de alarmas para la integración de Opsgenie

Ve a Jira y crea una nueva incidencia de Jira para añadir un repositorio de alarmas AWS CloudWatch a Bitbucket. En este ejemplo, el identificador de la incidencia de Jira es IM-9.

Captura de pantalla de Opsgenie: añadir alarmas

Ve a Bitbucket y haz clic en Crear y, a continuación, en Repositorio.

captura de pantalla de repositorios

Selecciona el espacio de trabajo y el proyecto adecuados. Configura el nombre de la rama predeterminada en la rama principal. Haz clic en Crear repositorio para continuar.

crear captura de pantalla de repositorio

Ve al repositorio de CloudWatchAlarms de tu terminal y ejecuta lo siguiente para enviar el código de la plantilla de AWS CloudFormation a 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

Alarms template.yml

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

Configura el endpoint de suscripción por tema de SNS en la URL del endpoint que copiaste de Opsgenie. El SubmitImageLambdaAlarm monitoriza una sola métrica emitida por la AWS Lambda de SubmitImage. Si hay más de 10 invocaciones en un minuto, se da la alarma.

bitbucket-pipelines.yml para implementar en AWS

Ve al repositorio de CloudWatchAlarms de tu terminal y crea una rama con el nombre de tu identificador de incidencia de 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

Recuerda que debes habilitar Pipelines, configurar los entornos de implementación y añadir claves de acceso de AWS al repositorio antes de que se ejecuten las canalizaciones.

Enviar a una rama de funciones

Ejecuta lo siguiente desde la línea de comandos para enviar los cambios a la rama IM-9 del repositorio de CloudWatchAlarms. Incluye el identificador de incidencia de Jira en los mensajes de confirmación y los nombres de las ramas para que la integración de Jira con Bitbucket pueda hacer un seguimiento de lo que ocurre en tu proyecto.

git add --all
git commit -m "IM-9 add bitbucket-pipelines.yml to CloudWatchAlarms"
git push -u origin IM-9

Haz clic en Canalizaciones y, a continuación, en IM-9 para ver la canalización en ejecución.

Capturas de pantalla de IM-9 ejecutando canalizaciones

Crea una solicitud de incorporación de cambios

Para crear una solicitud de incorporación de cambios, haz clic en Solicitudes de incorporación de cambios y, a continuación, en Crear solicitud de incorporación de cambios. Termina la solicitud de incorporación de cambios y haz clic en Canalizaciones para ver la implementación del entorno de producción.

crear capturas de pantalla de solicitudes de incorporación de cambios

Probar la alarma

Genera una alerta desencadenando la alarma de AWS CloudWatch que acabas de configurar o haciendo clic en Crear alerta.

captura de pantalla de WatchAlarms

¡Bravo! Lo has conseguido. ImageLabeller ya está en funcionamiento.

Warren Marusiak
Warren Marusiak

Warren is a Canadian developer from Vancouver, BC with over 10 years of experience. He came to Atlassian from AWS in January of 2021.


Compartir este artículo

Lecturas recomendadas

Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.

Ilustración de Devops

La comunidad de DevOps

Ilustración de Devops

Ruta de aprendizaje de DevOps

Ilustración de un mapa

Pruébalo gratis

Suscríbete para recibir el boletín de DevOps

Thank you for signing up