Blog

IRL zu IAC: Ihre Umgebung via Terraform zu PagerDuty

von Mandi Walls 2. Mai 2024 | 9 Minuten Lesezeit

Einführung

Die Abbildung Ihrer bestehenden Systemumgebung in PagerDuty kann für neue Benutzer verwirrend sein. PagerDuty bietet zahlreiche Komponenten, die Ihr Team bei der erfolgreichen Bearbeitung von Incidents, der Integration mit anderen Systemen, der Ausführung von Workflows und der Automatisierung unterstützen. Ihre Organisation verfügt möglicherweise über viele dieser Komponenten – Benutzer, Teams, Services, Integrationen, Orchestrierungen usw.

Um größere oder komplexere PagerDuty Umgebungen programmatisch zu verwalten, empfehlen wir die Verwendung von Infrastruktur als Code Werkzeuge wie Terraform oder Pulumi Beide Lösungen bieten PagerDuty -Provider. In diesem Beispiel betrachten wir Terraform. Finden Sie hier Ihren PagerDuty Anbieter. (Wir werden Pulumi in einem späteren Beitrag genauer betrachten.) Falls Sie Terraform noch nicht kennen, HashiCorp verfügt über Dokumentation Um Ihnen den Einstieg zu erleichtern, gibt es viele tolle Einführungsvideos auf YouTube. einschließlich dieses Tutorials von TechWorld mit Nana Die

Die Einrichtung von PagerDuty ist ein strukturierter Prozess. Bestimmte Strukturen müssen bei der Kontoerstellung in einer vorgegebenen Reihenfolge angelegt werden. Die Web-Oberfläche führt Sie dabei Schritt für Schritt durch den Prozess. In den folgenden Beispielen gehe ich davon aus, dass Sie bereits ein PagerDuty -Konto besitzen und Ihre Benutzer eingerichtet sind. Weitere Informationen zur Einrichtung von PagerDuty finden Sie in unserem Online-Lernangebot unter [Link einfügen]. PagerDuty Universität Die

Ziele

Für diesen Einstieg in Terraform gehe ich davon aus, dass bereits eine Produktionsumgebung läuft. Ich werde die in GCP enthaltenen Dienste nutzen. Microservices-Demo Dieses Projekt bietet mir eine gute Grundlage für meine Arbeit. Die Demo ist komplex genug, um Dienste, Abhängigkeiten und Integrationen zu erstellen! Das Dienstdiagramm in der README-Datei hilft Ihnen dabei, Dienste und ihre Beziehungen zu definieren.

Nach Abschluss der Arbeiten möchte ich einen vollständigen Satz von Diensten haben, der die Microservices-Demo-Umgebung mit definierten Abhängigkeiten nachbildet. Jeder Dienst wird außerdem über einen generischen Integrationsendpunkt verfügen, damit er Benachrichtigungen empfangen kann.

Du kannst Den gesamten Code für dieses Beispiel finden Sie in meinem GitHub-Konto. Die

Grundlegende Informationen, die Sie benötigen

Ich werde meine Teammitglieder als lokale Daten in meine Terraform-Dateien einbinden. Falls Ihr Team bereits Terraform verwendet, nutzen Sie möglicherweise Datenmodule oder lokale Dateien zur Datenspeicherung – das ist auch in Ordnung. Wenn Sie Terraform zur Benutzerverwaltung einsetzen möchten, lesen Sie bitte die Dokumentation des Anbieters. pagerduty_user Die

Um Ihre Benutzer als lokale Daten einzubinden, benötigen Sie lediglich deren Benutzer-IDs.

Ressourcenordnung

Sobald ein PagerDuty -Konto Benutzer enthält, müssen mindestens ein Zeitplan und eine Eskalationsrichtlinie erstellt werden. Dies erfolgt vor der Einrichtung von Diensten, da eine Eskalationsrichtlinie Voraussetzung für die Erstellung eines Dienstes ist. Sie können für jeden Dienst eine neue Eskalationsrichtlinie erstellen, ich werde meine Eskalationsrichtlinien jedoch explizit anlegen. Jede Eskalationsrichtlinie enthält mindestens einen Zeitplan. Sie können auch Eskalationsrichtlinien für einzelne Personen erstellen.

Zeitpläne und Eskalationsrichtlinien

So sieht einer meiner Zeitpläne aus, einschließlich der lokalen Daten für die Teammitglieder, unter Verwendung von pagerduty_schedule Ressource:

 Einheimische   { 
       dbre_team     =   ['PC6K5C9',   'PULO4NW'] 
       demo_team     =   'POJW28N' 
       app_team =   ['PC6K5C9',   'PULO4NW',   'P73R26T'] 
 } 

 Ressource   'pagerduty_schedule'   'msd_apps_sched'   { 
       Name         =   'Anwendung   Team   Mikrodienste   Demo' 
       Zeitzone     =   'Amerika/New_York' 
       Teams         =   [local.demo_team] 
       Schicht   { 
           Name                             =   'Anwendung   Entwickler' 
         Start                             =   '2024-01-01T00:08:00-05:00' 
           rotation_virtual_start           =   '2024-01-01T00:08:00-05:00'  
           Rotationslänge in Sekunden     =   604800 
           Nutzer                             =   local.app_team 
       } 
 } 

Es sind nur wenige Argumente erforderlich: die Zeitzone (siehe die PagerDuty API-Dokumentation für unterstützte Zonen); und mindestens eine Schicht das erfordert Start , rotation_virtual_start , Rotationslänge in Sekunden , Und Nutzer Die

Sie können auch Einschränkungen und andere Merkmale in Ihre Zeitpläne aufnehmen. Weitere Informationen finden Sie in der Dokumentation des Anbieters. Die

Ich kann dann darauf Bezug nehmen. pagerduty_schedule Ressource, wenn ich meine Eskalationsrichtlinie erstelle, unter Verwendung der Eskalationsrichtlinie für den Pagerdienst Ressource:

 Ressource   'pagerduty_escalation_policy'   'msd_apps'   { 
       Name         =   'Anwendung   Team   Mikrodienste   Demo' 
       Anzahl_Schleifen   =   1 
       Teams       =   [local.demo_team] 
       Regel   { 
         Eskalationsverzögerung in Minuten   =   10 
           Ziel   { 
               Typ   =   'schedule_reference' 
               Ausweis     =   pagerduty_schedule.msd_apps_sched.id 
           } 
       } 
 } 

Der Eskalationsrichtlinie für den Pagerdienst Die Ressource hat außerdem nur wenige Anforderungen: a Name und ein oder mehrere Regel Blöcke, die enthalten Eskalationsverzögerung in Minuten und ein Ziel . Der Ziel benötigt ein Ausweis Dort habe ich es mit dem oben definierten Zeitplan verknüpft: pagerduty_schedule.msd_apps_sched.id Die

Dienstleistungen

Nachdem ich nun eine Eskalationsrichtlinie habe, kann ich meine Dienste erstellen. (Einblick in die Dokumentation für die …) Microservices-Demo Es gibt 12 potenzielle Dienstleistungen in der Umgebung. Ich werde die Lastgenerator Ich werde also elf technische Dienste erstellen, die der Umgebung entsprechen. Außerdem werde ich einen erstellen. Geschäftsdienst um die gesamte Demo-Umgebung in meinem Servicegraph Die

Ich nutze die einfachste Konfiguration für meine Dienste. Sie können sich das ansehen. Anbieterdokumente für alle Ressourcenargumente. Ich kann meine Dienste später jederzeit mit Terraform anpassen, falls ich etwas ändern oder hinzufügen muss.

Für die Dienstleistungen ist eigentlich nur ein Name und ein Eskalationsrichtlinie . Der Alarmerstellung Das Argument ist zum Zeitpunkt der Erstellung dieses Dokuments veraltet; die neue Einstellung lautet: Warnungen und Vorfälle erstellen Da dies für alle Dienste gilt, benötigen Sie es möglicherweise nicht in Ihrem Code. Ich werde zunächst alle meine Dienste gleich erstellen, sodass sie alle so aussehen:

 #   Redis   Cache 
 Ressource   'pagerduty_service'   'Demo_Redis_Cache'   { 
       Name                 =   'Redis   Cache   -   Mikrodienste   Demo' 
       Eskalationsrichtlinie   =   pagerduty_escalation_policy.msd_dbre.id 
       Alarmerstellung       =   'create_alerts_and_incidents' 
 } 

 #   Einkaufen   Warenkorb 
 Ressource   'pagerduty_service'   'Demo_Cart'   { 
       Name                 =   'Einkaufen   Warenkorb   -   Mikrodienste   Demo' 
       Eskalationsrichtlinie   =   pagerduty_escalation_policy.msd_apps.id 
       Alarmerstellung       =   'create_alerts_and_incidents' 
 } 

 

Weil mein Eskalationsrichtlinie Die Ressourcen wurden mit Terraform erstellt, ich kann sie einbinden. Ausweis S direkt über die Ressourcenreferenz. Ich kann bei Bedarf auch für jeden Dienst unterschiedliche Eskalationsrichtlinien verwenden, hier habe ich jedoch nur zwei erstellt – eine für das DBRE-Team und eine für das Anwendungsteam.

Wie ich oben bereits erwähnt habe, werde ich auch ein Geschäftsdienst um den gesamten Anwendungsstack darzustellen. Geschäftsdienste helfen anderen Bereichen meiner Organisation, Vorfälle zu erkennen, die benutzerorientierte Anwendungen beeinträchtigen, und werden auf der Seite „Dienstgraph“ angezeigt. Man kann sich den Geschäftsdienst als Repräsentanten des gesamten Anwendungsstacks vorstellen. Benutzer auf dem ursprünglichen Umgebungsdiagramm!

Der pagerduty_business_service Die Ressource ähnelt der Ressource für technische Dienstleistungen, hat aber keine zugehörige Eskalationsrichtlinie :

 Ressource   'pagerduty_business_service'   'Microservices_Demo'   { 
       Name           =   'Mikrodienste'   Demo' 
       Beschreibung   =   Dienstleistungen   ausgerichtet   hinter   Die   Online   Boutique   Demo' 
       Team           =   local.demo_team 
 } 

 

Es gibt nur noch wenige zusätzliche Argumente für die pagerduty_business_service Ressource, Sie können sie in der Anbieterdokumente Die

Dienstabhängigkeiten

Sobald ich alle Dienste für meine Umgebung definiert habe, kann ich deren Beziehungen hinzufügen mithilfe von Dienstabhängigkeiten Die Abhängigkeiten helfen meinem Team, die potenziellen Auswirkungen von Vorfällen auf die verschiedenen Dienste zu ermitteln.

Jede Abhängigkeit muss einzeln als Beziehung zwischen einem definiert werden. abhängiger Dienst und ein unterstützender Dienst Gemäß der Konvention im Diagramm in der README-Datei der Microservices-Demo, ein abhängiger Dienst wird über allem stehen unterstützender Dienst S , aber unterhalb aller Dienste, die davon abhängen. Ich werde auch eine Abhängigkeit zwischen den Diensten erstellen. Frontend Service und mein Microservices-Demo Geschäftsdienstleistungen.

Die folgende Ressource erzeugt die Abhängigkeit zwischen meinem Frontend Und Kasse Dienstleistungen:

 Ressource   'pagerduty_service_dependency'   'fe_to_checkout'   { 
       Abhängigkeit   { 
           abhängiger Dienst   { 
               Ausweis     =   pagerduty_service.Demo_Frontend.id 
               Typ   =   pagerduty_service.Demo_Frontend.type 
           }            unterstützender Dienst   { 
               Ausweis     =   pagerduty_service.Demo_Checkout.id 
               Typ   =   pagerduty_service.Demo_Checkout.type 
           } 
       } 
 } 

Ich kann mich auf die beziehen Ausweis Und Typ Diese Dienste weisen ähnliche Eigenschaften auf, da sie beide mit Terraform erstellt wurden.

Die Abhängigkeit, die den Geschäftsdienst mit meinen technischen Diensten verbindet, sieht aufgrund der pagerduty_business_service Ressource:

 Ressource   'pagerduty_service_dependency'   'biz_to_fe'   { 
       Abhängigkeit   { 
           abhängiger Dienst   { 
               Ausweis     =   pagerduty_business_service.Microservices_Demo.id 
               Typ   =   pagerduty_business_service.Microservices_Demo.type 
           } 
           unterstützender Dienst   { 
               Ausweis     =   pagerduty_service.Demo_Frontend.id 
               Typ   =   pagerduty_service.Demo_Frontend.type 
           } 
       } 
 } 

Sobald alle meine Serviceabhängigkeiten definiert sind, kann ich sie mithilfe der Web-Oberfläche mit dem ursprünglichen Anwendungstopologiediagramm aus der README-Datei vergleichen. Ich kann die Objekte im Diagramm so verschieben, dass sie der ursprünglichen Anordnung entsprechen:

PagerDuty web UI screen capture of the service graph representation of this environment. It is oriented with the business service “Microservices Demo” at the top and the technical service “Redis Cache” at the bottom. Technical services are represented with circles with green checks in them to represent the OK status of the services. The business service also has a green check but is represented by a square. The relationships among the services are represented by blue lines.

Integrationen

Abschließend möchte ich alle meine Dienste so aktivieren, dass sie Benachrichtigungen empfangen. Es gibt viele verschiedene Arten von Benachrichtigungen. Integrationen Das kann in den PagerDuty -Diensten konfiguriert werden, aber ich beginne mit einer grundlegenden Konfiguration. Events API v2 Integration für jeden Dienst. Weitere Informationen zur Definition anderer Integrationstypen, einschließlich E-Mail-Integrationen und Verweisen auf spezifische Dienste, finden Sie hier. Anbieter , im Anbieterdokumente Die

 Ressource   'pagerduty_service_integration'   'events_msd_frontend'   { 
     Name       =   'API   V2' 
     Typ       =   'events_api_v2_inbound_integration' 
     Service     =   pagerduty_service.Demo_Frontend.id 
 } 

Nächste Schritte

Nachdem meine Dienste in PagerDuty definiert und alle Integrationen zum Empfangen von Ereignissen eingerichtet sind, kann ich mit den grundlegenden Funktionen loslegen. Ich kann diese grundlegenden Ressourcen auch nutzen, um hilfreiche Lösungen wie die folgenden zu integrieren: Event-Orchestrierung Und Automatisierungsaktionen sowie anspruchsvollere Integrationen, um den Bedürfnissen meines Teams gerecht zu werden.

Die aktuellsten Informationen zum PagerDuty Terraform-Provider finden Sie immer unter Anbieterdokumentation Unser Entwickler, José Antonio Reyes, präsentiert Terraform Time auf dem PagerDuty Twitch Mittwochs um 16:00 Uhr Eastern Time findet ein Treffen statt, und vierteljährlich veranstaltet ein Runder Tisch. Bei weiteren Fragen helfen wir Ihnen gerne weiter! Sie erreichen uns unter community-team@pagerduty.com Die