Close

Implementar alarmas de AWS CloudWatch con GitHub

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 configurar un modelo predefinido de AWS SageMaker, un requisito previo para que ImageLabeller procese las imágenes correctamente. Antes de empezar, te recomendamos que leas las páginas de arquitectura de ImageLabeller y de Implementar ImageLabeller con GitHub 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 de AWS CloudWatch a GitHub. En este ejemplo, el identificador de la incidencia de Jira es IM-10.

captura de pantalla de incidencia de jira para añadir un repositorio de github

Ve a GitHub y haz clic en New (Nuevo). Elige la organización adecuada para el Owner (Propietario). Haz clic en Create Repository (Crear repositorio) para continuar.

captura de pantalla de la creación de un repositorio de alarmas en github

Haz clic en Settings (Configuración) y, a continuación, en Secrets (Secretos). Añade tu identificador de clave de acceso de AWS como AWS_ACCESS_KEY_ID y tu clave de acceso secreta de AWS como AWS_SECRET_ACCESS_KEY.

captura de pantalla de añadir claves de acceso a AWS en github

En tu terminal, ve al repositorio de SubmitImage y ejecuta lo siguiente para enviar tu código de AWS CloudFormation a GitHub.

git add --all
git commit -m "IM-10 add CloudWatchAlarms to github"
git remote add origin git@github.com: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.

Acciones de GitHub para la implementación en AWS

Ve al repositorio de CloudWatchAlarms de tu terminal, crea una rama con el nombre de tu identificador de incidencia de Jira y crea un directorio .github/workflows .

git checkout -b IM-10
mkdir -p .github/workflows && cd .github/workflows

Crea deploy-test-staging.yml con el siguiente yaml. Esto define un flujo de trabajo de implementación para tus entornos de pruebas y ensayo que se ejecuta durante los envíos a ramas distintas de la rama principal.

name: deploy-cloudwatchalarms-test-staging
on:
  push:
    branches:
      - '*'
      - '!mainline'

jobs:
  deploy-us-west-1:
    runs-on: ubuntu-latest
    outputs:
      env-name: ${{ steps.env-name.outputs.environment }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-west-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-us-east-2:
    runs-on: ubuntu-latest
    needs: deploy-us-west-1
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-east-2"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

A continuación, crea deploy-prod.yml con el siguiente yaml. Esto define un flujo de trabajo de implementación para tus entornos de producción que se ejecuta cuando una solicitud de incorporación de cambios fusiona los cambios en la rama principal.

name: deploy-cloudwatchalarms-prod
on:
  pull_request:
    branches:
      - mainline

jobs:
  deploy-us-west-2:
    runs-on: ubuntu-latest
    outputs:
      env-name: ${{ steps.env-name.outputs.environment }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-west-2"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-ca-central-1:
    runs-on: ubuntu-latest
    needs: deploy-us-west-2
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "ca-central-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-us-east-1:
    runs-on: ubuntu-latest
    needs: deploy-ca-central-1
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-east-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

Enviar a una rama de funciones

Desde la línea de comandos, ejecuta lo siguiente para enviar tu código a la rama IM-10 del repositorio de CloudWatchAlarms.

git add --all
git commit -m "IM-10 add github actions to CloudWatchAlarms"
git push -u origin IM-10

Haz clic en Actions (Acciones) para ver los flujos de trabajo en ejecución.

captura de pantalla de flujos de trabajo en ejecución en github

Crea una solicitud de incorporación de cambios

Haz clic en Create pull request (Crear solicitud de incorporación de cambios) para fusionarla con la rama principal.

captura de pantalla de la creación de solicitudes de incorporación de cambios en github

Haz clic en Actions (Acciones) para monitorizar la implementación del entorno de producción.

captura de pantalla de la implementación del entorno de producción en github

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 la creación de alertas en Opsgenie

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

captura de pantalla de la notificación de Slack en Opsgenie

¡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