Bereitstellen von AWS CloudWatch-Warnmeldungen mit GitLab
Warren Marusiak
Senior Technical Evangelist
Um zu demonstrieren, wie Anwendungen mit Jira Software und verschiedenen verbundenen Tools entwickelt, bereitgestellt und verwaltet werden können, hat unser Team ImageLabeller entwickelt. Dabei handelt es sich um eine einfache Demo-Anwendung, die auf AWS basiert und maschinelles Lernen nutzt, um Images mit Stichwörtern zu versehen.
Auf dieser Seite wird das Überwachen von ImageLabeller mit Opsgenie behandelt. Wir empfehlen dir, vorab die Seiten zur ImageLabeller-Architektur und zum Bereitstellen von ImageLabeller mit GitLab zu lesen, um mehr über den Kontext zu erfahren.
Hinzufügen eines Warnmeldungs-Repositorys für die Opsgenie-Integration
Erstelle in Jira einen neuen Jira-Vorgang für das Hinzufügen eines AWS CloudWatch-Warnmeldungs-Repositorys zu GitLab. In diesem Beispiel lautet die Jira-Vorgangs-ID "IM-6".
Erstelle in GitLab ein neues Projekt. Aktualisiere die Projekt-URL, damit die Gruppe verwendet wird, die du mit Jira verknüpft hast. Klicke auf Projekt erstellen.
Wechsle in deinem Terminal zum Repository "CloudWatchAlarms" und führe den folgenden Befehl aus, um deine AWS CloudFormation-Datei "template.yml" an GitLab zu pushen.
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
Wie bei den vorherigen Repositorys musst du AWS-Zugriffsschlüssel hinzufügen, geschützte Branches konfigurieren und Deployment-Umgebungen einrichten.
"template.yml" für Warnmeldungen
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
Setze den Endpunkt für das Abonnement des SNS-Themas auf die Endpunkt-URL, die du aus Opsgenie kopiert hast. "SubmitImageLambdaAlarm" überwacht eine einzelne Metrik, die vom AWS Lambda SubmitImage ausgegeben wird. Wenn mehr als 10 Aufrufe pro Minute erfolgen, wird die Warnmeldung ausgelöst.
".gitlab-ci.yml" für das Bereitstellen in AWS
Wechsle in deinem Terminal zum Repository "CloudWatchAlarms" und erstelle einen Branch, den du nach der Jira-Vorgangs-ID benennst.
git checkout -b IM-6
Erstelle die Datei ".gitlab-ci.yml" mit dem nachfolgend angegebenen YAML. Dies definiert einen Deployment-Workflow für deine Test-, Staging- und Produktionsumgebungen.
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
Pushen an einen Feature Branch
Führe über die Befehlszeile den nachfolgend angegebenen Befehl aus, um deine Änderungen an den Branch "IM-6" des Repositorys "CloudWatchAlarms" zu pushen. Füge die Jira-Vorgangs-ID in Commit-Nachrichten und Branch-Namen ein, damit die Integration zwischen Jira und GitLab die Änderungen am Projekt verfolgen kann.
git add --all
git commit -m "IM-6 .gitlab-ci.yml to CloudWatchAlarms repo"
git push -u origin IM-6
Klicke auf CI/CD und dann auf Pipelines, um die Ausführung der Pipeline anzuzeigen.
Erstellen eines Merge-Requests
Erstelle einen Merge-Request zum Bereitstellen in deinen Produktionsumgebungen nach dem GitLab-Deployment in deinen Testumgebungen.
Merge die Änderungen nach Abschluss der Merge-Request-Pipeline in "mainline". Klicke auf CI/CD und dann auf Pipelines, um die laufende Produktionspipeline anzuzeigen.
Testen der Warnmeldung
Generiere eine Warnmeldung, indem du die gerade eingerichtete AWS CloudWatch-Warnmeldung auslöst oder auf "Create alert" (Warnmeldung erstellen) klickst.
Überprüfe in Slack, ob die Benachrichtigung angezeigt wurde.
Bravo! Du hast es geschafft. ImageLabeller ist jetzt betriebsbereit.
Diesen Artikel teilen
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.