Close

Implementar alarmas de AWS CloudWatch con GitLab

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 las páginas de arquitectura de ImageLabeller y de Implementar ImageLabeller con GitLab para ver el contexto.

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

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

Captura de pantalla de un tablero de GI

Ve a GitLab y crea un nuevo proyecto. Actualiza la URL del proyecto para usar el grupo que has vinculado a Jira. Haz clic en Create project (Crear proyecto).

captura de pantalla de crear proyecto en gitlab

En tu terminal, ve al repositorio de CloudWatchAlarms y ejecuta lo siguiente para enviar tu archivo AWS CloudFormation template.yml a 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

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.

.gitlab-ci.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.

git checkout -b IM-6

Crea un archivo .gitlab-ci.yml con el siguiente yaml. Esto define un flujo de trabajo de implementación para tus entornos de pruebas, ensayo y producción.

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

Enviar a una rama de funciones

Ejecuta lo siguiente desde la línea de comandos para enviar los cambios a la rama IM-6 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 GitLab pueda hacer un seguimiento de lo que ocurre en tu proyecto.

git add --all
git commit -m "IM-6 .gitlab-ci.yml to CloudWatchAlarms repo"
git push -u origin IM-6

Haz clic en CI/CD y, a continuación, en Pipelines (Canalizaciones) para ver cómo se ejecuta la canalización.

Crear una solicitud de fusión

Crea una solicitud de fusión para implementarla en tus entornos de producción después de que GitLab se implemente en tus entornos de pruebas.

capturas de pantalla de crear solicitudes de fusión

Fusiona los cambios en la rama principal una vez que se complete el proceso de canalización de fusión. Haz clic en CI/CD y, a continuación, en Pipelines (Canalizaciones) para ver la canalización del entorno de producción en ejecución.

captura de pantalla de fusionar canalizaciones

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 prueba de alarma

Comprueba Slack para ver si ha aparecido la notificación.

Captura de pantalla de notificación de Slack

¡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