Nutzung | Sicherheit | Änderungsprotokoll | Anhang
(Alpha) Ein Tool zum Erstellen statischer Websites mit Amazon Web Services (AWS).
Begründung : Statische Websites machen Spaß. Die Bereitstellung auf S3 ist pure Freude. CloudFront macht Skalierung zu etwas, an das Sie nicht mehr denken. Keine zu verwaltenden Server; keine Tränen zum Weinen. Allerdings ist die Einrichtung nicht so einfach. Confetti ist ein Versuch, Best Practices mithilfe von CloudFormation in ein wiederholbares Programm zu kodieren und praktische Tools für grundlegende und erweiterte Bereitstellungsszenarien bereitzustellen.
[confetti/confetti " 0.2.1 " ] ; ; latest release
Erstellen einer Website | Synchronisierung Ihrer Website | Letzter Schritt: DNS | Hinzufügen von Subdomains
Confetti ist als Boot-Task verpackt. Dies liegt hauptsächlich daran, dass Boot es einfach macht, Befehlszeilen-Apps in Clojure zu schreiben, ohne sich um Bootstrapping oder Abhängigkeitsauflösung kümmern zu müssen.
Confetti stellt zwei Befehle bereit, die im Boot-Jargon „tasks“ genannt werden. Die Aufgabe create-site
erstellt einen CloudFormation-Stack mit allen Ressourcen für Ihre statische Website und speichert alle wichtigen Informationen in einer EDN-Datei im aktuellen Verzeichnis.
Sehen wir uns ein Beispiel für die Erstellung und Synchronisierung einer Website zum ersten Mal an.
Sind Sie verwirrt über die Zugangsschlüssel? Sehen Sie sich den Abschnitt „Sicherheit“ dieser README-Datei an.
Nehmen wir an, Sie möchten eine Site unter my-app.com
bereitstellen. Um einen S3-Bucket, eine CloudFront-Verteilung und eingeschränkte Zugriffsschlüssel zu erstellen, können Sie Folgendes ausführen:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
Hinweis: Das Bit
-d confetti
stellt sicher, dass Boot Konfetti herunterlädt, damit die Aufgabecreate-site
verfügbar ist.
Ausnahme! Da Sie eine nackte/APEX-Domäne verwenden möchten, müssen Sie Route53 für DNS verwenden. (Mehr dazu finden Sie im Anhang.) Versuchen Sie es erneut mit aktiviertem DNS:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
Dies sollte den Prozess in Gang setzen. Das erste Feedback sollte auf Ihrem Bildschirm erscheinen. Irgendwann werden keine neuen Ereignisse mehr gedruckt, aber der Prozess ist auch noch nicht zurückgekehrt. Worauf Sie jetzt warten, ist die Erstellung Ihrer CloudFront-Distribution. Dies dauert normalerweise zwischen 10 und 15 Minuten.
Sie können den Prozess an dieser Stelle abbrechen. Alles läuft remote und wird nicht unterbrochen. Eine
.confetti.edn
Datei wird in Ihrem aktuellen Arbeitsverzeichnis gespeichert und wenn Sie denfetch-outputs
-Task mit ausreichenden Anmeldeinformationen verwenden, können Sie jederzeit alle nützlichen Informationen herunterladen. (Die Aufgabe teilt Ihnen auch mit, ob der Stapel noch nicht fertig ist.)
Nachdem die Aufgabe create-site
abgeschlossen ist, sollten Sie in Ihrem aktuellen Arbeitsverzeichnis eine Datei finden: my-app-com.confetti.edn
. Der Inhalt sollte alles Wichtige über Ihre neu bereitgestellten Ressourcen enthalten:
{ :stack-id " arn:aws:cloudformation:us-east-1:297681564547:stack/my-app-com/xxx " ,
:bucket-name " my-app-com-sitebucket-3fu0w0729ndk " ,
:cloudfront-id " E3760XUWU2V9R7 " ,
:cloudfront-url " d3up0oy7r2svli.cloudfront.net " ,
:access-key " AAA " ,
:secret-key " BBB " ,
:website-url " http://my-app.com " ,
:hosted-zone-id " Z3KJWNUJTT8GHO " }
Jetzt ist alles bereit für den ersten Einsatz!
Jetzt kommt die sync-bucket
-Aufgabe ins Spiel. Während die Aufgabe viele verschiedene Möglichkeiten bietet, anzugeben, was hochgeladen werden soll, zeigen wir hier nur die einfachste: das Synchronisieren eines lokalen Verzeichnisses. Für unsere Demozwecke erstellen wir schnell ein Verzeichnis:
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
Jetzt können wir es synchronisieren. Nehmen Sie die Werte für bucket-name
, access-key
und secret-key
aus der Datei .confetti.edn :
boot -d confetti sync-bucket --bucket "my-app-com-sitebucket-3fu0w0729ndk"
--access-key AAA --secret-key BBB --dir my-app-site
;; or alternatively
boot -d confetti sync-bucket --confetti-edn your-site.confetti.edn --dir my-app-site
Dadurch werden index.html
und about.html
in Ihren Bucket hochgeladen. Um zu überprüfen, ob alles erfolgreich war, können Sie zu der URL navigieren, die als cloudfront-url
in der EDN-Datei gespeichert ist.
Es gibt viele weitere Möglichkeiten, anzugeben, welche Dateien hochgeladen werden sollen (ggf. mit benutzerdefinierten Metadaten), die in diesem Handbuch nicht behandelt werden. Weitere Informationen finden Sie
boot sync-bucket --help
.
Jetzt fehlt nur noch die ordnungsgemäße Einrichtung von DNS. Was hier zu tun ist, hängt davon ab, ob Sie die Option --dns
aktiviert haben oder nicht. Im obigen Beispiel haben wir es aktiviert. Lassen Sie uns also zunächst diesen Fall behandeln:
DNS mit Route53: Da Sie eine Root-/Naked-/Apex-Domäne eingerichtet haben, haben Sie sich für die Verwendung von verwaltetem DNS von AWS entschieden. Jetzt müssen Sie die Nameserver für die von Ihnen verwendete Domäne auf die Nameserver von AWS festlegen. Diese sind für verschiedene gehostete Zonen unterschiedlich, daher müssen Sie sie in der AWS-Konsole nachschlagen.
Ohne Route53: Wenn Sie Route53 nicht verwenden, müssen Sie lediglich einen CNAME-Eintrag zum Zonefile Ihrer Domain hinzufügen, der auf die Cloudfront-Distribution verweist.
Beide Schritte variieren von Domain-Registrar zu Domain-Registrar. Es wird daher empfohlen, die jeweilige Dokumentation zu überprüfen.
Möchten Sie SSL? Hier erfahren Sie, wie Sie es aktivieren.
Nehmen wir an, Sie haben mit Confetti eine Site weloveparens.com
erstellt und möchten nun einer Subdomain dieser Domain eine statische Site hinzufügen. Sie können einfach Folgendes ausführen:
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
Dadurch wird ein Route53 RecordSet in der HostedZone erstellt, das zuvor beim Einrichten weloveparens.com
für Sie erstellt wurde. Der S3-Bucket, die CloudFront-Verteilung usw. werden wie gewohnt erstellt. Außerdem wird wie immer alles (einschließlich des RecordSets) als CloudFormation-Stack erstellt. Wenn Sie es also nicht mehr benötigen, können Sie den Stack einfach löschen, weloveparens.com
bleibt davon unberührt.
Um Hilfe über die Befehlszeile zu erhalten, können Sie jederzeit Folgendes ausführen:
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
Sie können auch gerne Probleme öffnen, um Fragen zu stellen oder Verbesserungen vorzuschlagen.
Es ist irgendwie beängstigend, einem Programm seine AWS-Schlüssel zu geben und es einfach damit laufen zu lassen, deshalb soll dieser Abschnitt etwas Trost spenden.
create-site
erstellt einen CloudFormation-Stack gemäß einer in confetti-clj/cloudformation definierten Vorlage.--dry-run
übergeben.create-site
übergeben, müssen über Berechtigungen zum Erstellen der einzelnen Ressourcen verfügen, die in der CloudFormation-Vorlage aufgeführt sind. (In Zukunft stellt Confetti möglicherweise einen AWS IAM-Richtlinienausschnitt bereit, damit Sie einen Benutzer erstellen können, der über alle Rechte verfügt, die Confetti benötigt.) Ab Version 0.2.0
erstellt der Befehl create-site
eine Datei mit der Endung .confetti.edn
Diese enthält alle Informationen, die zur Pflege Ihrer Site erforderlich sind. Die Informationen in dieser Datei enthalten Geheimnisse!
Update: Ich bin zu dem Schluss gekommen, dass das Erstellen dieser Datei eine schlechte Idee ist. Die Leute werden es unweigerlich begehen und die Schlüssel zu ihrem S3-Bucket veröffentlichen. In Zukunft möchte ich einfach etwas in einem Format drucken, das von direnv verstanden wird, und stattdessen env vars / direnv empfehlen.
[confetti/cloudformation "0.1.6"]
, was folgende Verbesserungen mit sich bringt:confetti/s3-deploy
zur Verbesserung der Windows-Kompatibilität Wiederverwendung von HostedZone: Das Erstellen einer neuen HostedZone für jede Site hat zwei Nachteile:
Durch die Verwendung einer HostedZone für Ihre Root-Domain example.com
werden diese Probleme gelöst und das Hinzufügen einer neuen Site unter demo.example.com
ist lediglich eine Frage des Hinzufügens eines RecordSets. Confetti versucht nun, eine vorhandene HostedZone zu finden und fügt nur dann ein RecordSet hinzu, wenn es eines findet.
Neue Option invalidation-paths
für die sync-bucket
-Aufgabe. Bisher wurden die Invalidierungspfade anhand der von Ihnen hochgeladenen Dateien ermittelt. Jetzt können Sie ein individuelles Set bereitstellen. (#21 + #29)
Behebung eines Fehlers mit der neuen Methode zur Bereitstellung von Optionen über eine .confetti.edn
-Datei
confetti-edn
angeben, akzeptieren wir jetzt beide Versionen (die mit .confetti.edn
enden und nur den Teil davor). Bisher wurde erwartet, dass Sie das Teil nur vor dem Suffix .confetti.edn
bereitstellenconfetti-edn
und der Aufgabe fetch-outputs
vorzuschlagencreate-site
aus aufgerufen wirdfetch-outputs
-Aufgabe[confetti/cloudformation "0.1.3"]
um :website-url
in den Stack-Ausgaben zu haben, unabhängig davon, ob Route53 verwendet wird oder nichtfetch-outputs
aus, wenn Route53 nicht verwendet wird fetch-outputs
hinzugefügt, mit der Ausgaben von Cloudformation-Stacks heruntergeladen werden können. Bisher blieb die Berichterstellung oft hängen und speicherte die Stack-Ausgaben nicht ordnungsgemäß. Um dies zu umgehen, können Sie jetzt die Berichterstellung abbrechen und zu einem späteren Zeitpunkt fetch-outputs
aufrufen, um die Ausgaben herunterzuladen.sync-bucket
-Aufgabe bietet jetzt eine confetti-edn
-Option, die verwendet werden kann, um den some-id-Teil von {some-id}.confetti.edn
bereitzustellen. Die Informationen in dieser Datei werden dann anstelle der regulären Aufgabenoptionen verwendet.Wenn etwas nicht wie erwartet funktioniert, öffnen Sie bitte ein Problem. ?
Hinweis: Wenn Sie beim Anfordern von Assets von Ihrer Cloudfront-Distribution am Ende 504-Fehler erhalten, überprüfen Sie noch einmal, ob Sie tatsächlich den Website-Endpunkt als Ursprung verwenden. Aufgrund der Verwendung des Website-Endpunkts muss die Origin-Protokollrichtlinie „Nur HTTP“ lauten .
Cloudfront unterstützt APEX-Domänen, jedoch nur, wenn Sie ALIAS
Einträge von Route53 verwenden. Weitere Informationen finden Sie in der offiziellen Ankündigung.
Diese Einschränkung macht es schwieriger, die Einrichtung von Root-Domänen (APEX) zu automatisieren. Daher wird die Erstellung von Sites für Root-Domänen ohne gleichzeitige Verwaltung von DNS mit Route53 derzeit nicht unterstützt.