utilisation | sécurité | journal des modifications | appendice
(alpha) Un outil pour aider à la création de sites statiques avec Amazon Web Services (AWS).
Justification : Les sites statiques sont amusants. Déployer sur S3 est un pur bonheur. CloudFront fait de la mise à l'échelle une chose à laquelle vous ne pensez plus. Aucun serveur à administrer ; pas de larmes pour pleurer. Cependant, tout configurer n’est pas aussi simple. Confetti est une tentative d'encodage des meilleures pratiques dans un programme reproductible utilisant CloudFormation et fournissant des outils pratiques pour les scénarios de déploiement de base et avancés.
[confetti/confetti " 0.2.1 " ] ; ; latest release
créer un site | synchroniser votre site | étape finale : DNS | ajout de sous-domaines
Confetti est présenté sous forme de tâche de démarrage. Cela est principalement dû au fait que le démarrage facilite l'écriture d'applications en ligne de commande dans Clojure sans avoir à se soucier du démarrage ou de la résolution des dépendances.
Confetti fournit deux commandes, appelées tâches dans Boot-lingo. La tâche create-site
créera une pile CloudFormation avec toutes les ressources de votre site Web statique et enregistrera toutes les informations importantes dans un fichier EDN dans le répertoire actuel.
Passons en revue un exemple de création d'un site et de sa première synchronisation.
Vous n'êtes pas sûr des clés d'accès ? Consultez la section Sécurité de ce README.
Disons que vous souhaitez déployer un site sur my-app.com
. Pour créer un compartiment S3, une distribution CloudFront et des clés d'accès restreint, vous pouvez exécuter ce qui suit :
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
Remarque : le bit
-d confetti
garantit que Boot téléchargera les confettis afin que la tâchecreate-site
soit disponible.
Exception! Parce que vous souhaitez utiliser un domaine nu/APEX, vous devez utiliser Route53 pour DNS. (Vous pouvez en savoir plus à ce sujet dans l'annexe.) Réessayez avec DNS activé :
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
Cela devrait lancer le processus. Les premiers commentaires devraient apparaître sur votre écran. À un moment donné, aucun nouvel événement ne sera imprimé, mais le processus n'est pas encore revenu. Ce que vous attendez maintenant, c'est la création de votre distribution CloudFront. Cela prend généralement entre 10 et 15 minutes.
Vous pouvez arrêter le processus à ce stade. Tout se déroule à distance et ne sera pas interrompu. Un fichier
.confetti.edn
est enregistré dans votre répertoire de travail actuel et si vous utilisez la tâchefetch-outputs
avec des informations d'identification suffisantes, vous pouvez télécharger toutes les informations utiles à tout moment. (La tâche vous dira également si la pile n'est pas encore prête.)
Une fois la tâche create-site
terminée, vous devriez trouver un fichier dans votre répertoire de travail actuel : my-app-com.confetti.edn
. Son contenu doit contenir tout ce qui est important concernant vos ressources nouvellement provisionnées :
{ :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 " }
Maintenant tout est prêt pour le premier déploiement !
Maintenant, la tâche sync-bucket
entre en jeu. Bien que la tâche propose de nombreuses façons différentes de spécifier ce qu'il faut télécharger, nous montrerons ici simplement la plus simple : la synchronisation d'un répertoire local. À des fins de démonstration, créons rapidement un répertoire :
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
Maintenant, synchronisons-le. Prenez les valeurs bucket-name
, access-key
et secret-key
du fichier .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
Cela téléchargera index.html
et about.html
dans votre bucket. Pour vérifier que tout s'est bien passé, vous pouvez accéder à l'URL stockée sous cloudfront-url
dans le fichier edn.
Il existe de nombreuses autres façons de spécifier les fichiers à télécharger (avec des métadonnées personnalisées si vous le souhaitez) qui ne sont pas couvertes par ce guide. Consultez
boot sync-bucket --help
pour plus de détails.
Désormais, la seule étape manquante est de configurer correctement le DNS. Ce qui doit être fait ici varie selon que vous avez activé ou non l'option --dns
. Dans l'exemple ci-dessus, nous l'avons activé, abordons donc d'abord ce cas :
DNS avec Route53 : étant donné que vous disposez d'une configuration de domaine racine/nu/apex, vous avez décidé d'utiliser le DNS géré par AWS. Vous devez maintenant définir les serveurs de noms du domaine que vous avez utilisé sur les serveurs de noms AWS. Ceux-ci sont différents selon les zones hébergées, vous devez donc les rechercher dans la console AWS.
Sans Route53 : lorsque vous n'utilisez pas Route53, la seule chose que vous devez faire est d'ajouter une entrée CNAME au Zonefile de votre domaine qui pointe vers la distribution Cloudfront.
Ces deux étapes varient d'un registraire de domaine à l'autre, il est donc recommandé de vérifier leur documentation individuelle.
Vous voulez SSL ? Voici comment l'activer.
Disons que vous avez utilisé Confetti pour créer un site weloveparens.com
et que vous souhaitez maintenant ajouter un site statique à un sous-domaine de ce domaine. Vous pouvez simplement exécuter :
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
Cela créera un RecordSet Route53 dans la HostedZone qui a été précédemment créé pour vous lors de la configuration de weloveparens.com
. Le compartiment S3, la distribution CloudFront, etc. seront créés comme d'habitude. De plus, comme toujours, tout (y compris le RecordSet) sera créé en tant que pile CloudFormation, donc si vous n'en avez plus besoin, vous pouvez simplement supprimer la pile, sans affecter weloveparens.com
.
Pour obtenir de l'aide sur la ligne de commande, vous pouvez toujours exécuter :
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
N'hésitez pas également à ouvrir des problèmes pour poser des questions ou suggérer des améliorations.
Donner vos clés AWS à un programme et le laisser fonctionner avec lui est un peu effrayant, cette section vise donc à vous rassurer à ce sujet.
create-site
créera une pile CloudFormation selon un modèle défini dans confetti-clj/cloudformation.--dry-run
.create-site
doivent disposer des autorisations nécessaires pour créer les ressources individuelles répertoriées dans le modèle CloudFormation. (À l'avenir, Confetti pourra fournir un extrait de stratégie AWS IAM afin que vous puissiez créer un utilisateur disposant de tous les droits dont Confetti a besoin.) À partir de la version 0.2.0
la commande create-site
créera un fichier se terminant par .confetti.edn
qui contient toutes les informations nécessaires à la maintenance de votre site. Les informations contenues dans ce fichier contiennent des secrets !
Mise à jour : je suis arrivé à la conclusion que la création de ce fichier est une mauvaise idée. Les gens le feront inévitablement et publieront les clés de leur compartiment S3. À l'avenir, j'aimerais simplement imprimer quelque chose dans un format compris par direnv et recommander env vars / direnv à la place.
[confetti/cloudformation "0.1.6"]
, qui apporte les améliorations suivantes :confetti/s3-deploy
pour améliorer la compatibilité Windows Réutilisation de HostedZone : créer une nouvelle HostedZone pour chaque site présente deux inconvénients :
En utilisant une HostedZone pour votre domaine racine example.com
ces problèmes sont résolus et l'ajout d'un nouveau site sur demo.example.com
consiste simplement à ajouter un RecordSet. Confetti essaie désormais de trouver une HostedZone existante et ajoute un RecordSet uniquement s'il en trouve un.
Nouvelle option invalidation-paths
pour la tâche sync-bucket
. Auparavant, les chemins d'invalidation étaient déterminés en fonction des fichiers que vous avez téléchargés. Vous pouvez désormais fournir un ensemble personnalisé. (#21 + #29)
Correction d'un bug avec une nouvelle méthode de fourniture d'options via un fichier .confetti.edn
confetti-edn
, nous acceptons désormais les deux versions (se terminant par .confetti.edn
et juste la partie précédente). Auparavant, il était prévu que vous fournissiez uniquement la pièce avant le suffixe .confetti.edn
confetti-edn
et la tâche de fetch-outputs
create-site
fetch-outputs
[confetti/cloudformation "0.1.3"]
pour avoir :website-url
dans les sorties de la pile, peu importe si Route53 est utilisé ou nonfetch-outputs
si Route53 n'est pas utilisé fetch-outputs
a été ajoutée et peut être utilisée pour télécharger les sorties des piles Cloudformation. Auparavant, les rapports restaient souvent bloqués et n'enregistraient pas correctement les sorties de la pile. Pour contourner ce problème, vous pouvez désormais annuler le reporting et appeler fetch-outputs
à tout moment ultérieur pour télécharger les sorties.sync-bucket
fournit désormais une option confetti-edn
qui peut être utilisée pour fournir la partie some-id d'un {some-id}.confetti.edn
. Les informations contenues dans ce fichier seront ensuite utilisées à la place des options de tâche habituelles.Si quelque chose ne fonctionne pas comme prévu, veuillez ouvrir un problème. ?
Remarque Si vous finissez par obtenir des erreurs 504 lors de la demande d'actifs à votre distribution Cloudfront, vérifiez que vous utilisez réellement le point de terminaison du site Web comme origine. La politique du protocole d'origine doit être « HTTP uniquement » suite à l'utilisation du point de terminaison du site Web.
Cloudfront prend en charge les domaines APEX mais uniquement si vous utilisez les enregistrements ALIAS
de Route53. Plus d’informations peuvent être trouvées dans l’annonce officielle.
Cette limitation rend plus difficile l'automatisation des configurations de domaine racine (APEX). Il n'est donc actuellement pas pris en charge pour créer des sites pour les domaines racine sans également gérer le DNS avec Route53.