Anatomie einer AWS CloudFormation-Vorlage

Anhand eines Support-Ticket-Service als Beispiel für eine SaaS-Lösung habe ich gezeigt, wie jeder die von Amazon Web Services angebotenen Tools nutzen kann, um Ihre Idee von einem Geschäftsplan auf ein Produkt zu übertragen, das Ihren Kunden über die Cloud zur Verfügung steht. Bisher haben wir Planungs- und Entwurfsüberlegungen durchgearbeitet, eine IaaS-Ebene erstellt und AWS CloudFormation-Vorlagen verwendet, um einen hochverfügbaren Cluster zu erstellen. Wir können jetzt mit dem Polieren der Anwendung beginnen.

Der nächste Schritt besteht darin, die AWS CloudFormation-Vorlage zu ändern, um die Erstellung meines Support-Ticket-Service zu automatisieren. Ich habe einen Hochverfügbarkeitscluster, Drupal, eine RDS-Datenbank, Firewall-Regeln, einen Load Balancer und so weiter. Es ist eine fantastische Sache, mit einer Web-Benutzeroberfläche und ein paar Mausklicks zu erreichen.

Aber es ist nicht fantastisch genug. Ich muss die CloudFormation-Vorlage bearbeiten, um sie meinen Anforderungen näher zu bringen, aber zuerst muss ich wissen, was darin enthalten ist und wo ich die erforderlichen Änderungen vornehmen muss. Im Folgenden gebe ich Ihnen einen Überblick über alle Teile.

Das Polieren meines Dienstes bedeutet das Betreten des Entwicklergebiets

Der von der AWS CloudFormation Drupal-Vorlage bereitgestellte Service entspricht nicht meinen Anforderungen. Ich werde diese Vorlage hier optimieren, um die erforderlichen Änderungen vorzunehmen. Leider bedeutet dies, in das Gebiet der Entwickler zu gelangen. Ich werde nicht die ganze Reise machen, weil Entwicklergebiet ein ödes Ödland ist, das unangenehm zu besuchen ist. Ich werde genug abdecken, um den Weg zu erhellen.

Eine Kombination von Drupal-Modulen

SaaS-Unternehmen bauen ihre Dienste auf. Sie nehmen keine White-Label-Waren und kleben ihr Abzeichen auf. Ich werde meinen Support-Ticket-Service mit dem Drupal Core CMS-Toolkit, einer Reihe optionaler Extras und viel Entwicklungszeit erstellen.

Es gibt jedoch viele optionale Module für Drupal, die ich aneinanderreihen kann, um die Entwicklungszeit zu verkürzen.

  • Der Support-Ticket-Service stammt aus dem Support-Modul. Das Support- Modul bietet das geschäftliche Ende meines Service.
  • Der Monetarisierungsmechanismus basiert auf einer Reihe von Commerce- Modulen. Diese kümmern sich um die E-Commerce-Seite. Drupal Commerce ist eine große Sammlung mit fast zwanzig zu installierenden Modulen und vielen weiteren unterstützenden Modulen. Diese bilden den Rahmen für den Umgang mit Kunden, Steuern, Werbebuchungen, Zahlungen, Produkten usw.
  • Die Steuerung dieses Premium-Inhalts wird vom Inhaltszugriffsmodul und anderen Dingen wie dem Rollenzugriffskontrollmechanismus verwaltet . Diese Module halten die Teile für Handel und Support-Tickets zusammen.

Was ist in einer AWS CloudFormation-Vorlage?

Ich kann eine AWS CloudFormation-Vorlagendatei entsprechend meinen Anforderungen bearbeiten.

Klicken um zu vergrößern.

Zuerst muss ich verstehen, was eine Vorlage ist. Hier ist eine kurze Übersicht. Eine ausführlichere Beschreibung finden Sie im AWS-Handbuch Bootstrapping-Anwendungen über AWS CloudFormation.

Die kleinen automatischen Gremlins, die CloudFormation erstellen, beziehen ihre Anweisungen aus einer Konfigurationsdatei, die ein bisschen so aussieht.

 { 
 "AWSTemplateFormatVersion": "Versionsdatum", 
 "Beschreibung": "Gültige JSON-Zeichenfolgen bis zu 4 KB", 
 "Parameter": { 
 Schlüssel und Werte 
 }, 
 "Zuordnungen": { 
 Schlüssel und Werte 
 }, 
 "Ressourcen": { 
 Schlüssel und Werte 
 }, 
 "Ausgänge": { 
 Schlüssel und Werte 
 }} 
 }} 

Dieser Text mit seiner großzügigen Streuung von geschweiften Klammern, Anführungszeichen und Doppelpunkten ist JSON (JavaScript Object Notation). JSON ist beliebt bei Entwicklern, die die Worthaftigkeit von XML nicht wollen, aber für YAML nicht cool genug sind.

Die Zeile mit den Schlüsseln und Werten im obigen Beispiel würde in einer echten Vorlagendatei ungefähr so ​​aussehen.

 "S3Bucket": { 
 "Typ": "AWS :: S3 :: Bucket", 
 "Eigenschaften" : { 
 "AccessControl": "PublicRead", 
 "WebsiteConfiguration": { 
 "IndexDocument": "index.html", 
 "ErrorDocument": "error.html" 
 }} 
 }} 
 }} 

Alles, was eingerückt ist, ist eine Ladung verschachtelter Schlüssel / Wert-Paare. Es ist kompliziert und nur die Spitze des Eisbergs. Vorlagendateien sind Nerd Himmel.

Die Startkonfiguration

Der Abschnitt Ressourcen der Vorlagendatei enthält einen Unterabschnitt namens LaunchConfig . Dieser Abschnitt beginnt mit dieser Zeile.

"LaunchConfig": {

Der LaunchConfig-Bereich umfasst 200 Zeilen Cleverness. Es enthält eine Liste der Dateien, die installiert, heruntergeladen und erstellt werden müssen. Es ist auch ein ganzes Bash-Skript eingebettet.

Ich verwende die gruppierte Drupal-Vorlage. Sie können es hier sehen: Hochverfügbarer Webserver mit Multi-AZ Amazon RDS-Datenbankinstanz und Verwendung von S3 zum Speichern von Dateiinhalten.

Später werde ich einige Änderungen am Abschnitt LaunchConfig dieser Vorlage vornehmen und einen Cluster erstellen.

Das eingebettete Bash-Skript

Das Bash-Skript im Abschnitt LaunchConfig befindet sich am Ende der Datei. Das Skript ist ungefähr 60 Zeilen lang und sieht so aus.

"UserData" : { "Fn::Base64" : { "Fn::Join" : "",  
  "#!/bin/bash -v\n",  
  "yum update -y aws-cfn-bootstrap\n",  
 ... 
 ... 
 ... 
  "# All is well so signal success\n",  
  "/opt/aws/bin/cfn-signal -e 0 -r \"Drupal setup complete\" '", { "Ref" : "WaitHandle" }, "'\n" 
 
  }} 

Die Aufgabe dieses störend aussehenden Vorlagencodes besteht darin, alle diese Zeilen in ein Bash-Skript einzufügen.

Ein Bash-Skript ist eine Sammlung von Befehlen, die alle möglichen Dinge mit dem System tun. Systemadministratoren schreiben seit Jahrzehnten Skripte. Dieses clevere Bash-Skript bearbeitet die Apache-Webserverkonfiguration, listet alle neuen EC2-Computer auf, richtet eine grundlegende Drupal-Site ein und so weiter.

Dieses Skript wird auf jede neue EC2-VM kopiert. Es landet im Verzeichnis / var / lib / cloud / data / scripts / . Alle von ihm erzeugten Nachrichten landen in /var/log/cloud-init.log .

Die Dateien und Verzeichnisse der EC2-Maschinen

Das Verteilen einer Anwendung auf viele Server ist schwierig. Sie müssen wissen, was kopiert wird, was geteilt wird und wohin alles gehen soll.

Viele Dateien werden auf den Computern dupliziert. Der gesamte allgemeine Code (Drupal Core) wird auf jedem neuen Server in das Website-Verzeichnis kopiert (in / var / www / html ).

Der S3-Eimer

Einige der Dateien werden von Computern gemeinsam genutzt. Ein Teil des Dateisystems ist tatsächlich ein AWS S3-Bucket (Simple Storage Service). Dieser freigegebene Bereich wird auf allen drei Servern bereitgestellt (unter / var / www / html / sites / default / files ). Einige Drupal-Dateien befinden sich in diesem S3-Bucket.

S3-Buckets werden normalerweise für statische Inhalte von Websites verwendet und nicht für ausführbare Dateien, Protokolle und andere knifflige Dateien. Dieser S3-Bucket enthält das Hochladen von Kundendateien. Ein Kunde lädt eine Datei einmal hoch, dann können alle Webserver auf Anfragen nach dieser Datei antworten.

Vorlagensicherung

Speichern Sie Ihre neue Vorlage nicht im Web. Sie können CloudFormation eine URL zum Abrufen Ihrer Vorlagendatei geben, dies funktioniert jedoch nur mit AWS S3 (Simple Storage Service). Dort speichert AWS seine Vorlagen. Dort wird Ihre hochgeladene Vorlage gespeichert. Entwickler, die ein Code-Repository wie Github oder Gitorious verwenden, haben kein Glück.

© Copyright 2020 | mobilegn.com