Implementar alarmas de AWS CloudWatch con GitHub
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.
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.
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.
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.
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.
Haz clic en Actions (Acciones) para monitorizar la implementación del entorno de producció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.