uso | seguridad | registro de cambios | apéndice
(alfa) Una herramienta para ayudar a crear sitios estáticos con Amazon Web Services (AWS).
Justificación : los sitios estáticos son divertidos. Implementar en S3 es pura alegría. CloudFront hace que escalar sea algo en lo que ya no piensa. No hay servidores para administrar; no hay lágrimas para llorar. Sin embargo, configurarlo todo no es tan sencillo. Confetti es un intento de codificar las mejores prácticas en un programa repetible utilizando CloudFormation y proporcionando herramientas útiles para escenarios de implementación básicos y avanzados.
[confetti/confetti " 0.2.1 " ] ; ; latest release
creando un sitio | sincronizando su sitio | último paso: dns | agregando subdominios
Confetti está empaquetado como una tarea de arranque. Esto se debe principalmente a que el arranque facilita la escritura de aplicaciones de línea de comandos en Clojure sin necesidad de preocuparse por el arranque o la resolución de dependencias.
Confetti proporciona dos comandos, en Boot-lingo llamados tareas . La tarea create-site
creará una pila de CloudFormation con todos los recursos para su sitio web estático y guardará toda la información importante en un archivo EDN en el directorio actual.
Veamos un ejemplo de cómo crear un sitio y sincronizarlo por primera vez.
¿Confundido acerca de las claves de acceso? Consulte la sección Seguridad de este archivo README.
Supongamos que desea implementar un sitio en my-app.com
. Para crear un depósito S3, una distribución de CloudFront y claves de acceso restringido, puede ejecutar lo siguiente:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
Nota: el bit
-d confetti
garantiza que Boot descargará confetti para que la tareacreate-site
esté disponible.
¡Excepción! Como desea utilizar un dominio simple/APEX, debe utilizar Route53 para DNS. (Puede encontrar más información sobre esto en el Apéndice). Inténtelo nuevamente con DNS habilitado:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
Esto debería iniciar el proceso. Los primeros comentarios deberían aparecer en su pantalla. En algún momento no se imprimirán nuevos eventos, pero el proceso tampoco ha regresado todavía. Lo que estás esperando ahora es la creación de tu distribución CloudFront. Esto suele tardar entre 10 y 15 minutos.
Puede finalizar el proceso en este punto. Todo funciona de forma remota y no se interrumpirá. Se guarda un archivo
.confetti.edn
en su directorio de trabajo actual y, si utiliza la tareafetch-outputs
con credenciales suficientes, puede descargar toda la información útil en cualquier momento. (La tarea también le indicará si la pila aún no está lista).
Una vez finalizada la tarea create-site
, debería encontrar un archivo en su directorio de trabajo actual: my-app-com.confetti.edn
. Su contenido debe contener todo lo importante sobre los recursos recién aprovisionados:
{ :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 " }
¡Ahora todo está listo para el primer despliegue!
Ahora entra en juego la tarea sync-bucket
. Si bien la tarea proporciona muchas formas diferentes de especificar qué cargar, aquí solo mostraremos la más simple: sincronizar un directorio local. Para nuestros propósitos de demostración, creemos un directorio rápidamente:
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
Ahora sincronicémoslo. Tome los valores del bucket-name
, access-key
y secret-key
del archivo .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
Esto cargará index.html
y about.html
en su depósito. Para verificar que todo fue exitoso, puede navegar a la URL almacenada como cloudfront-url
en el archivo edn.
Hay muchas más formas de especificar qué archivos cargar (con metadatos personalizados si se desea) que no están cubiertas en esta guía. Consulte
boot sync-bucket --help
para obtener más detalles.
Ahora el único paso que falta es configurar DNS correctamente. Lo que se debe hacer aquí varía dependiendo de si habilitó la opción --dns
o no. En el ejemplo anterior lo habilitamos, así que cubramos ese caso primero:
DNS con Route53: debido a que tiene una configuración de dominio raíz/desnudo/apex, decidió utilizar DNS administrado por AWS. Ahora necesita configurar los servidores de nombres para el dominio que utilizó en los servidores de nombres de AWS. Estos son diferentes para diferentes zonas alojadas, por lo que debe buscarlos en la consola de AWS.
Sin Route53: cuando no utilices Route53, lo único que tienes que hacer es agregar una entrada CNAME al Zonefile de tu dominio que apunte a la distribución de Cloudfront.
Ambos pasos variarán de un registrador de dominio a otro, por lo que se recomienda verificar su documentación individual.
¿Quieres SSL? Aquí se explica cómo habilitarlo.
Digamos que usó Confetti para crear un sitio weloveparens.com
y ahora desea agregar un sitio estático a un subdominio de ese dominio. Puedes simplemente ejecutar:
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
Esto creará un RecordSet de Route53 en HostedZone que se creó previamente para usted al configurar weloveparens.com
. El depósito S3, la distribución de CloudFront, etc. se crearán como de costumbre. Además, como siempre, todo (incluido RecordSet) se creará como una pila de CloudFormation, por lo que si ya no la necesita, puede simplemente eliminar la pila, sin que weloveparens.com
se vea afectado.
Para obtener ayuda en la línea de comando siempre puedes ejecutar:
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
También siéntase libre de abrir ediciones para hacer preguntas o sugerir mejoras.
Dar sus claves de AWS a algún programa y simplemente dejar que se ejecute es un poco aterrador, por lo que esta sección tiene como objetivo brindar algo de comodidad al respecto.
create-site
creará una pila de CloudFormation de acuerdo con una plantilla definida en confetti-clj/cloudformation.--dry-run
.create-site
deben tener permisos para crear los recursos individuales enumerados en la plantilla de CloudFormation. (En el futuro, Confetti puede proporcionar un fragmento de política de AWS IAM para que pueda crear un usuario que tenga todos los derechos que Confetti necesita). A partir de la versión 0.2.0
el comando create-site
creará un archivo que termina en .confetti.edn
y que contiene toda la información necesaria para mantener su sitio. ¡La información de este archivo contiene secretos!
Actualización: he llegado a la conclusión de que crear este archivo es una mala idea. La gente inevitablemente lo cometerá y publicará las claves de su depósito S3. En el futuro, me gustaría simplemente imprimir algo en un formato que direnv entienda y recomendar env vars / direnv en su lugar.
[confetti/cloudformation "0.1.6"]
, que trae las siguientes mejoras:confetti/s3-deploy
para mejorar la compatibilidad con Windows Reutilización de HostedZone: crear una nueva HostedZone para cada sitio tiene dos inconvenientes:
Al utilizar una HostedZone para su dominio raíz example.com
estos problemas se resuelven y agregar un nuevo sitio en demo.example.com
es solo cuestión de agregar un RecordSet. Confetti ahora intenta encontrar una HostedZone existente y solo agrega un RecordSet si encuentra uno.
Nueva opción invalidation-paths
para la tarea sync-bucket
. Anteriormente, las rutas de invalidación se determinaban en función de los archivos que subías. Ahora puede proporcionar un conjunto personalizado. (#21 + #29)
Se corrigió el error con un nuevo método para proporcionar opciones a través de un archivo .confetti.edn
confetti-edn
, ahora aceptamos ambas versiones (que terminan en .confetti.edn
y solo la parte anterior). Anteriormente, se esperaba que solo suministrara la pieza antes del sufijo .confetti.edn
confetti-edn
y la tarea de fetch-outputs
.create-site
fetch-outputs
[confetti/cloudformation "0.1.3"]
para tener :website-url
en las salidas de la pila sin importar si se usa Route53 o nofetch-outputs
si no se utiliza Route53 fetch-outputs
que se puede utilizar para descargar resultados de pilas de Cloudformation. Anteriormente, los informes a menudo se bloqueaban y no guardaban correctamente los resultados de la pila. Para evitar esto, ahora puede cancelar los informes y llamar a fetch-outputs
en cualquier momento posterior para descargar los resultados.sync-bucket
ahora proporciona una opción confetti-edn
que se puede usar para proporcionar la parte some-id de {some-id}.confetti.edn
. La información de ese archivo se utilizará en lugar de las opciones de tareas habituales.Si algo no funciona como se esperaba, abra un problema. ?
Nota Si termina recibiendo errores 504 al solicitar activos de su distribución de Cloudfront, verifique que realmente esté utilizando el punto final del sitio web como origen. La política del Protocolo de origen debe ser "Solo HTTP" como resultado del uso del punto final del sitio web.
Cloudfront admite dominios APEX, pero solo si utiliza los registros ALIAS
de Route53. Puede encontrar más información en el anuncio oficial.
Esta limitación dificulta la automatización de las configuraciones de dominio raíz (APEX), por lo que actualmente no se admite la creación de sitios para dominios raíz sin administrar también DNS con Route53.