Der Blog

IRL zu IAC: Ihre Umgebung zu PagerDuty über Terraform

von Mandi-Wände 2. Mai 2024 | 9 min lesen

Einführung

Für neue Benutzer kann es verwirrend sein, herauszufinden, wie Sie Ihre As-Built-Umgebung in PagerDuty darstellen. PagerDuty enthält viele Komponenten, die Ihrem Team dabei helfen, Vorfälle erfolgreich zu verwalten, andere Systeme in Ihrer Umgebung zu integrieren, Workflows auszuführen und Automatisierung zu nutzen. Ihre Organisation verfügt möglicherweise über viele dieser Komponenten – Benutzer, Teams, Dienste, Integrationen, Orchestrierungen usw.

Um größere oder komplexere PagerDuty Umgebungen programmgesteuert zu verwalten, empfehlen wir die Verwendung Infrastruktur als Code Werkzeuge wie Terraform oder Pulumi . Beide Lösungen verfügen über PagerDuty Anbieter. In diesem Beispiel sehen wir uns Terraform an und Sie können Finden Sie hier Ihren PagerDuty Anbieter . (Wir werden uns Pulumi in einem zukünftigen Beitrag ansehen.)Wenn Sie neu bei Terraform sind, HashiCorp verfügt über Dokumentation um Ihnen den Einstieg zu erleichtern. Auf YouTube gibt es viele tolle Einführungsvideos. einschließlich dieses Tutorials von TechWorld mit Nana .

Die ersten Schritte mit PagerDuty sind ein vorgeschriebener Prozess. Beim Erstellen eines neuen Kontos müssen bestimmte Strukturen in einer bestimmten Reihenfolge erstellt werden, und in der Web-Benutzeroberfläche werden Schritte angezeigt, die Sie anleiten. Für die folgenden Beispiele gehe ich davon aus, dass Sie ein PagerDuty Konto haben und Ihre Benutzer bereits an Bord sind. Weitere Informationen zum Einstieg in PagerDuty finden Sie in unserem Online-Lernprogramm unter PagerDuty Universität .

Ziele

Für diesen Ausflug in Terraform gehe ich davon aus, dass bereits eine Produktionsumgebung läuft. Ich werde die in GCPs enthaltenen Dienste verwenden. Microservices-Demo Projekt, um mir etwas zum Arbeiten zu geben. Diese Demo ist komplex genug, um Dienste, Abhängigkeiten und Integrationen zu erstellen! Das Dienstdiagramm in der README-Datei ist hilfreich, um Dienste und ihre Beziehungen zu definieren.

Wenn ich fertig bin, möchte ich einen vollständigen Satz von Diensten haben, die die Microservices-Demoumgebung mit definierten Abhängigkeiten nachahmen. Für jeden Dienst wird außerdem ein generischer Integrationsendpunkt definiert, damit er Warnmeldungen empfangen kann.

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

Grundlegende Informationen, die Sie benötigen

Ich werde meine Teammitglieder als lokale Daten in meine Terraform-Dateien aufnehmen. Wenn Ihr Team bereits Terraform verwendet, verwenden Sie möglicherweise Datenmodule oder lokale Dateien zum Speichern von Daten, und das ist auch in Ordnung. Wenn Sie Terraform zur Verwaltung von Benutzern verwenden möchten, lesen Sie die Anbieterdokumente für pagerduty_benutzer .

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

Bestellung von Ressourcen

Sobald ein PagerDuty -Konto Benutzer hat, müssen als Nächstes mindestens ein Zeitplan und eine Eskalationsrichtlinie erstellt werden. Dies tun wir, bevor wir irgendwelche Dienste erstellen, da eine Eskalationsrichtlinie Voraussetzung für die Erstellung eines Dienstes ist. Sie können für jeden Dienst eine neue Eskalationsrichtlinie erstellen, aber ich werde meine Eskalationsrichtlinien explizit erstellen. Jede Eskalationsrichtlinie enthält mindestens einen Zeitplan. Sie können Eskalationsrichtlinien auch für Einzelpersonen erstellen.

Zeitpläne und Eskalationsrichtlinien

So sieht einer meiner Zeitpläne aus, einschließlich der lokalen Daten für die Teammitglieder, unter Verwendung der pagerdienstplan 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         =   [lokales.demo_team] 
       Schicht   { 
           Name                             =   'Anwendung   Entwickler' 
         Start                             =   '2024-01-01T00:08:00-05:00' 
           virtueller_Rotationsstart           =   '2024-01-01T00:08:00-05:00'  
           Rotationsdrehlänge in Sekunden     =   604800 
           Benutzer                             =   local.app_team 
       } 
 } 

Es sind nur wenige Argumente erforderlich: die Zeitzone (siehe PagerDuty API-Dokumente für unterstützte Zonen); und mindestens eine Schicht Das benötigt Start , virtueller_Rotationsstart , Rotationsdrehlänge in Sekunden , Und Benutzer .

Sie können Ihren Zeitplänen auch Einschränkungen und andere Funktionen hinzufügen. Weitere Informationen finden Sie in den Anbieterdokumenten. .

Ich kann dann darauf verweisen pagerdienstplan Ressource, wenn ich meine Eskalationsrichtlinie erstelle, mit dem PagerDuty_Eskalationsrichtlinie Ressource:

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

Der PagerDuty_Eskalationsrichtlinie Ressource hat auch nur wenige Anforderungen: eine Name und ein oder mehrere Regel Blöcke, die enthalten Eskalationsverzögerung in Minuten und ein Ziel . Der Ziel erfordert eine Ausweis , wo ich es mit dem Zeitplan verknüpft habe, den ich oben definiert habe: pagerduty_schedule.msd_apps_sched.id .

Dienstleistungen

Jetzt, da ich eine Eskalationsrichtlinie habe, kann ich meine Dienste erstellen. In der Dokumentation für die Demo zu Microservices gibt es 12 potenzielle Dienste in der Umgebung. Ich werde die Lastgenerator Service, also werde ich 11 technische Services erstellen, die zur Umgebung passen. Ich werde auch einen erstellen Unternehmensdienstleistungen zur Darstellung der gesamten Demoumgebung in meinem Servicediagramm .

Ich verwende die einfachste Konfiguration für meine Dienste. Sie können sich die Anbieterdokumente für alle Ressourcenargumente. Ich kann meine Dienste später immer noch mit Terraform ändern, wenn ich etwas ändern oder hinzufügen muss.

Dienste erfordern eigentlich nur eine Name , und ein Eskalationsrichtlinie . Der Alarmerstellung Das Argument ist zum Zeitpunkt des Schreibens dieses Artikels veraltet. Die neue Einstellung ist Erstellen_von_Warnungen_und_Vorfällen für alle Dienste, daher 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   Zwischenspeicher 
 Ressource   'pagerduty_service'   'Demo_Redis_Cache'   { 
       Name                 =   „Redis   Zwischenspeicher   -   Mikrodienste   Demo' 
       Eskalationsrichtlinie   =   pagerduty_escalation_policy.msd_dbre.id 
       Alarmerstellung       =   „Erstellen_von_Warnungen_und_Vorfällen“ 
 } 

 #   Einkaufen   Wagen 
 Ressource   'pagerduty_service'   'Demo_Warenkorb'   { 
       Name                 =   'Einkaufen   Wagen   -   Mikrodienste   Demo' 
       Eskalationsrichtlinie   =   pagerduty_escalation_policy.msd_apps.id 
       Alarmerstellung       =   „Erstellen_von_Warnungen_und_Vorfällen“ 
 } 

 

Weil mein Eskalationsrichtlinie Ressourcen wurden mit Terraform erstellt, ich kann ihre einschließen Ausweis S direkt über die Ressourcenreferenz. Ich kann auch für jeden Dienst unterschiedliche Eskalationsrichtlinien verwenden, wenn ich möchte, aber hier habe ich nur zwei erstellt – eine für das DBRE-Team und eine für das Anwendungsteam.

Wie oben erwähnt, werde ich auch eine Unternehmensdienstleistungen um den Anwendungsstapel als Ganzes darzustellen. Business Services helfen anderen Teilen meiner Organisation dabei, zu erkennen, wann Vorfälle auftreten, die sich auf benutzerorientierte Anwendungen auswirken, und sie werden auf der Service Graph-Seite angezeigt. Sie können sich den Business Service als die Darstellung des Benutzer auf dem Original-Umgebungsdiagramm!

Der PagerDuty_Geschäftsdienst Ressource ähnelt ein wenig der Ressource für technische Dienste, hat aber keine zugeordnete Eskalationsrichtlinie :

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

 

Es gibt nur ein paar zusätzliche Argumente für die PagerDuty_Geschäftsdienst Ressource, können Sie sie sehen in der Anbieterdokumente .

Dienstabhängigkeiten

Sobald ich alle Dienste für meine Umgebung definiert habe, kann ich ihre Beziehungen hinzufügen mit Dienstabhängigkeiten . Abhängigkeiten helfen meinem Team dabei, die potenziellen Auswirkungen von Vorfällen auf alle Dienste zu bestimmen.

Jede Abhängigkeit muss einzeln als Beziehung zwischen einem abhängiger_dienst und ein unterstützender_service . Unter Verwendung der Konvention im Diagramm in der Microservices Demo README, ein abhängiger_dienst wird vor allem sein unterstützender_service S , aber darunter alle Dienste, die davon abhängen. Ich werde auch eine Abhängigkeit zwischen dem Frontend Service und meine Microservices-Demo Unternehmensdienstleistungen.

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

 Ressource   'Pagerduty_Service_Abhängigkeit'   'fe_to_checkout'   { 
       Abhängigkeit   { 
           abhängiger_dienst   { 
               Ausweis     =   pagerduty_service.Demo_Frontend.id 
               Typ   =   pagerduty_service.Demo_Frontend.type 
           }            unterstützender_service   { 
               Ausweis     =   pagerduty_service.Demo_Checkout.id 
               Typ   =   pagerduty_service.Demo_Checkout.type 
           } 
       } 
 } 

Ich kann verweisen auf die Ausweis Und Typ Eigenschaften dieser Dienste, da sie beide mit Terraform erstellt wurden.

Die Abhängigkeit, die den Business-Service mit meinen technischen Services verbindet, sieht etwas anders aus, weil PagerDuty_Geschäftsdienst Ressource:

 Ressource   'Pagerduty_Service_Abhängigkeit'   'biz_to_fe'   { 
       Abhängigkeit   { 
           abhängiger_dienst   { 
               Ausweis     =   pagerduty_business_service.Microservices_Demo.id 
               Typ   =   pagerduty_business_service.Microservices_Demo.type 
           } 
           unterstützender_service   { 
               Ausweis     =   pagerduty_service.Demo_Frontend.id 
               Typ   =   pagerduty_service.Demo_Frontend.type 
           } 
       } 
 } 

Wenn alle meine Dienstabhängigkeiten definiert sind, kann ich sie über die Web-Benutzeroberfläche mit dem ursprünglichen Anwendungstopologiediagramm aus der README-Datei vergleichen. Ich kann die Objekte im Diagramm verschieben, um sie wie im Original auszurichten:

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

Schließlich möchte ich allen meinen Diensten den Empfang von Warnmeldungen ermöglichen. Es gibt viele verschiedene Arten von Integrationen die auf PagerDuty Diensten konfiguriert werden können, aber ich werde mit einem grundlegenden Ereignisse-API v2 Integration für jeden Dienst. Weitere Informationen zum Definieren anderer Integrationstypen, einschließlich E-Mail-Integrationen und Verweisen auf bestimmte Anbieter , im Anbieterdokumente .

 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 nun in PagerDuty definiert sind und alle über Integrationen zum Empfangen von Ereignissen verfügen, kann ich mit den grundlegenden Funktionen loslegen. Ich kann diese grundlegenden Ressourcen auch verwenden, um hilfreiche Lösungen zu integrieren, wie Ereignisorchestrierungen Und Automatisierungsaktionen sowie anspruchsvollere Integrationen, um die Anforderungen meines Teams zu erfüllen.

Die aktuellsten Informationen zum PagerDuty Terraform-Anbieter finden Sie immer im Anbieterdokumentation . Unser Maintainer, José Antonio Reyes, präsentiert Terraform Time auf der PagerDuty Twitch Mittwochs um 16:00 Uhr Eastern Time und veranstaltet vierteljährlich einen Runden Tisch. Wenn Sie weitere Fragen haben, helfen wir Ihnen gerne weiter! Sie erreichen uns unter community-team@pagerduty.com .