Code-Bereitstellung in AWS automatisieren – 2
WordPress-Bereitstellung in Devops mit AWS – Teil 2
Unter einem Deployment versteht AWS CodeDeploy den Prozess samt der in ihn involvierten Dateien und Skripte, um App-Content auf einer oder mehreren EC2-Instanzen bereitzustellen. In Teil 2 unseres Workshops stellen wir mit Hilfe von CodeDeploy WordPress auf EC2 bereit.
Dazu erstellen wir nun, noch immer auf unserem Entwicklungs-EC2-Server aus Teil 1 via SSH verbunden, wie folgt eine CodeDeploy-Application:
aws deploy create-application –application-name WordPress_App
Das Kommando gibt die “Application-ID” zurück:
Nun müssen wir ein S3-Bucket erzeugen, das die in Teil 1 bereitgestellten Source-Dateien aufnehmen soll:
aws s3 mb s3://codedeploybucket989
Dann wechseln wir, sofern noch nicht geschehen ins Quellcode-Verzeichnis /tmp/WordPress und pushen den gesamten Inhalt einschließlich der appspec.yml-Datei auf den S3-Bucket.
aws deploy push –application-name WordPress_App –description “Das ist Revision 1 unserer Applikation WordPress-App” –ignore-hidden-files –s3-location s3://<BUCKET>/WordPressApp.zip –source
Ist das geschehen, können wir unsere Bereitstellungsgruppe “WordPress_DG” wir folgt erzeugen:
aws deploy create-deployment-group –application-name WordPress_App –deployment-config-name CodeDeployDefault.AllAtOnce –deployment-group-name WordPress_DG –ec2-tag-filters Key=Name,Value=CodeDeploy,Type=KEY_AND_VALUE –service-role-arn <Rollenname>
Das kann man selbstverständlich auch grafisch in der AWS Management-Console tun. Der Deployment-Typ kann übrigens “In-place” oder “Blue/green” sein. Ferner brauchen wir eine Service-Rolle in IAM und eine “Envrionment configuration”. Hier stehen wie in Teil 1 beschrieben “Autoscaling Gruppen”, “EC2-Instanzen” oder “On Premise Instanzen” zur Verfügung.
Spätestens jetzt müssen die gewünschten Ziel-EC2-Instanzen selbstverständlich auch verfügbar sein, denn CodeDeploy erzeugt selbst keine Infrastruktur. Allerdings verwenden wir in diesem Beispiel wie in Teil 1 erwähnt unsere Entwicklungs-Instanz auch als Bereitstellungziel.
Wie man sieht, spezifiziert die Deployment Gruppe ein Set individueller Ziel-Instanzen für das Deployment, die über Tags oder den Namen der Autoscaling Gruppe (sofern vorhanden) spezifiziert werden.
Neben dem “Deployment type” gibt es noch die “Deployment configuration”. Hier kann der Entwickler zwischen “AllAtOnce”, “HalfAtATime” und “OneAtATime” oder einer Custom-Configuration (Create deployment configuration) wählen. Eine Bereitstellungskonfiguration definiert Regeln, die bestimmen, wie schnell eine Anwendung bereitgestellt wird und welche Erfolgs- oder Fehlerbedingungen für eine Bereitstellung gelten.
Nun können wir das eigentliche Deployment erzeugen, was letztendlich WordPress auf dem angegebenen Zielsystem ausrollt.
aws deploy push –application-name WordPress_App –description “This is a revision for the application WordPress_App” –ignore-hidden-files –s3-location s3://<Sorce-Bucket-Name>/WordPressApp.zip –source
Auch das kann man natürlich alternativ in der Console tun.
Updates Management
Um zu verifizieren, dass das Deployment funktioniert hat, verbinden wir uns zunächst mit der öffentlichen IP-Adresse der Ziel-Instanz und stellen im Browser die WordPress-Installation/Konfiguration fertig.
Um die Update-Funktion zu testen, verbinden wir uns wieder mit dem Entwicklungsrechner und nehmen eine geringfügige Änderungen an den Quelldateien vor. Mit dem Linux-Befehl “sed” können wir auf einfache Weise einige Seitenfarben in den CSS-Dateien unter /wp-conent/themes/twentyfifteen/style.css anpassen.
sed -i ‘s/#fff/#768331/g’ wp-content/themes/twentyseventeen/style.css
Die Änderungen pushen wir dann wieder mit
aws deploy push –application-name WordPress_App –s3-location s3://<Bucket-Name>/WordPressApp.zip –ignore-hidden-files
Nun müssen wir uns nur noch mit der CodeDeploy-Console verbinden, wechseln zu unserer WordPress_App, dort zum Tab “Revisions” und klicken auf “Deploy application”. Das Ergebnis können wir nach wenigen Minuten wieder visuell auf der Ziel-Instanz überprüfen.
Kontakt
„*“ zeigt erforderliche Felder an