Articoli
Tutorial
Guide interattive
Distribuzione degli allarmi AWS CloudWatch con GitLab
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.
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).
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
Analogamente ai repository precedenti, devi aggiungere le chiavi di accesso AWS, configurare i branch protetti e configurare gli ambienti di distribuzione.
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.
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.
Test dell'allarme
Genera un avviso attivando l'allarme AWS CloudWatch che hai appena configurato o cliccando su Create alert (Crea avviso).
Verifica che la notifica sia stata visualizzata in Slack.
Bene! Ce l'hai fatta: ImageLabeller è attivo e funzionante.
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.