Close

Distribuzione degli allarmi AWS CloudWatch con GitLab

Primo piano di Warren Marusiak
Warren Marusiak

Senior Technical Evangelist

Per fornire una dimostrazione di come sviluppare, distribuire e gestire applicazioni utilizzando Jira Software e vari strumenti connessi, il nostro team ha creato ImageLabeller, una semplice applicazione demo basata su AWS che utilizza l'apprendimento automatico per applicare etichette alle immagini.

In questa pagina viene spiegato come monitorare ImageLabeller con Opsgenie. Prima di iniziare, ti consigliamo di leggere le pagine sull'architettura di ImageLabeller e sulla distribuzione di ImageLabeller con GitLab per contestualizzare i contenuti.

Aggiunta di un repository di allarmi per l'integrazione di Opsgenie

Vai su Jira e crea un nuovo ticket Jira per aggiungere un repository di allarmi AWS CloudWatch a GitLab. In questo esempio, l'ID del ticket Jira è IM-6.

Screenshot della board IM

Vai su GitLab e crea un nuovo progetto. Aggiorna l'URL del progetto per utilizzare il gruppo che hai collegato a Jira. Clicca su Create project (Crea progetto).

Screenshot di creazione di un progetto in GitLab

Nel terminale utilizzato, vai al repository CloudWatchAlarms ed esegui i comandi riportati di seguito per effettuare il push del file 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

template.yml per gli allarmi

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

Imposta l'endpoint di sottoscrizione dell'argomento SNS sull'URL dell'endpoint che hai copiato da Opsgenie. SubmitImageLambdaAlarm monitora una singola metrica emessa dall'AWS Lambda SubmitImage. Se sono presenti più di 10 chiamate al minuto, si attiva l'allarme.

.gitlab-ci.yml per la distribuzione in AWS

Vai al repository CloudWatchAlarms nel terminale utilizzato e crea un branch che abbia lo stesso nome dell'ID del ticket Jira.

git checkout -b IM-6

Crea un file .gitlab-ci.yml con il seguente yaml. Viene definito un flusso di lavoro di distribuzione per gli ambienti di test, staging e produzione.

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

Push di un branch di funzioni

Esegui lo script seguente dalla riga di comando per effettuare il push delle modifiche al branch IM-6 del repository CloudWatchAlarms. Includi l'ID del ticket Jira nei messaggi di commit e i nomi dei branch per abilitare l'integrazione di Jira GitLab e tenere traccia di ciò che sta accadendo nel progetto.

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

Clicca su CI/CD, quindi su Pipelines per vedere la pipeline in esecuzione.

Creazione di una richiesta di merge

Crea una richiesta di merge da distribuire negli ambienti di produzione dopo la distribuzione di GitLab negli ambienti di test.

Screenshot di creazione delle richieste di merge

Effettua il merge delle modifiche alla mainline dopo il completamento della pipeline delle richieste di merge. Clicca su CI/CD, quindi su Pipelines per vedere la pipeline di produzione in corso.

Screenshot di merge delle pipeline

Test dell'allarme

Genera un avviso attivando l'allarme AWS CloudWatch che hai appena configurato o cliccando su Create alert (Crea avviso).

Screenshot del test degli allarmi

Verifica che la notifica sia stata visualizzata in Slack.

Screenshot di notifica Slack

Bene! Ce l'hai fatta: ImageLabeller è attivo e funzionante.

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.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Illustrazione su Devops

Community DevOps

Illustrazione su Devops

Percorso di apprendimento DevOps

Illustrazione di una mappa

Inizia gratis

Iscriviti alla nostra newsletter DevOps

Thank you for signing up