Implementar alarmas de AWS CloudWatch con GitLab
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.
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).
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
Como en el caso de repositorios anteriores, debes añadir las claves de acceso de AWS, configurar las ramas protegidas y configurar los entornos de implementación.
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.
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.
Probar la alarma
Genera una alerta desencadenando la alarma de AWS CloudWatch que acabas de configurar o haciendo clic en Crear alerta.
Comprueba Slack para ver si ha aparecido la notificación.
¡Bravo! Lo has conseguido. ImageLabeller ya está en funcionamiento.
Compartir este artículo
Tema siguiente
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.