использование | безопасность | журнал изменений | приложение
(альфа) Инструмент, помогающий создавать статические сайты с помощью Amazon Web Services (AWS).
Обоснование : статические сайты — это весело. Развертывание на S3 — сплошное удовольствие. CloudFront позволяет масштабировать то, о чем вы больше не думаете. Нет серверов для администрирования; нет слез, чтобы плакать. Однако настроить все это не так просто. Confetti — это попытка воплотить лучшие практики в повторяемую программу с использованием CloudFormation и предоставить удобные инструменты для базовых и расширенных сценариев развертывания.
[confetti/confetti " 0.2.1 " ] ; ; latest release
создание сайта | синхронизация вашего сайта | последний шаг: DNS | добавление субдоменов
Confetti упаковывается как загрузочная задача. Это происходит главным образом потому, что загрузка позволяет легко писать приложения командной строки в Clojure, не беспокоясь о начальной загрузке или разрешении зависимостей.
Confetti предоставляет две команды, которые на Boot-жаргоне называются задачами . Задача create-site
создаст стек CloudFormation со всеми ресурсами для вашего статического веб-сайта и сохранит всю важную информацию в файле EDN в текущем каталоге.
Давайте рассмотрим пример создания сайта и его первой синхронизации.
Не знаете, какие ключи доступа? Ознакомьтесь с разделом «Безопасность» этого README.
Допустим, вы хотите развернуть сайт my-app.com
. Чтобы создать корзину S3, раздачу CloudFront и ключи ограниченного доступа, вы можете запустить следующее:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY
Примечание. Бит
-d confetti
гарантирует, что Boot загрузит конфетти, поэтому задачаcreate-site
будет доступна.
Исключение! Поскольку вы хотите использовать голый домен/домен APEX, вам необходимо использовать Route53 для DNS. (Подробнее об этом можно прочитать в Приложении.) Попробуйте еще раз с включенным DNS:
boot -d confetti create-site --domain "my-app.com" --access-key XXX --secret-key YYY --dns
Это должно положить начало процессу. На вашем экране должен появиться первый отзыв. В какой-то момент новые события не будут напечатаны, но процесс еще не возобновился. Сейчас вы ждете создания своего дистрибутива CloudFront. Обычно это занимает от 10 до 15 минут.
На этом этапе вы можете завершить процесс. Все работает удаленно и не будет прерываться. Файл
.confetti.edn
сохраняется в вашем текущем рабочем каталоге, и если вы используете задачуfetch-outputs
с достаточными учетными данными, вы можете загрузить всю полезную информацию в любой момент времени. (Задание также сообщит вам, не готов ли стек еще.)
После завершения задачи create-site
вы должны найти файл в текущем рабочем каталоге: my-app-com.confetti.edn
. Его содержимое должно содержать все важное о ваших новых ресурсах:
{ :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 " }
Теперь все готово к первому развертыванию!
Теперь в игру вступает задача sync-bucket
. Хотя задача предоставляет множество различных способов указать, что загружать, мы покажем здесь самый простой: синхронизацию локального каталога. Для наших демонстрационных целей давайте быстро создадим каталог:
mkdir my-app-site
echo "Hello World" > my-app-site/index.html
echo "About Us" > my-app-site/about.html
Теперь давайте синхронизируем его. Возьмите значения bucket-name
, access-key
и secret-key
из файла .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
Это приведет к загрузке index.html
и about.html
в вашу корзину. Чтобы убедиться, что все прошло успешно, вы можете перейти к URL-адресу, сохраненному как cloudfront-url
в файле EDN.
Существует множество других способов указать, какие файлы следует загружать (с использованием пользовательских метаданных, если необходимо), которые не рассматриваются в этом руководстве. Подробности смотрите в
boot sync-bucket --help
.
Теперь осталось только правильно настроить DNS. То, что здесь необходимо сделать, зависит от того, включили ли вы опцию --dns
или нет. В приведенном выше примере мы включили эту функцию, поэтому давайте сначала рассмотрим этот случай:
DNS с Route53: поскольку у вас есть настройка корневого/голого/верхушечного домена, вы решили использовать управляемый DNS от AWS. Теперь вам нужно настроить серверы имен для домена, который вы использовали, на серверы имен AWS. Они различаются для разных размещенных зон, поэтому вам нужно искать их в консоли AWS.
Без Route53: Если вы не используете Route53, единственное, что вам нужно сделать, это добавить запись CNAME в файл зоны вашего домена, которая указывает на дистрибутив Cloudfront.
Оба этих шага будут различаться от регистратора домена к регистратору доменов, поэтому рекомендуется проверить их индивидуальную документацию.
Хотите SSL? Вот как это включить.
Допустим, вы использовали Confetti для создания сайта weloveparens.com
и теперь хотите добавить статический сайт в поддомен этого домена. Вы можете просто запустить:
boot create-site --domain "shop.weloveparens.com" --dns --access-key FOO --secret-key BAR
Это создаст набор записей Route53 в HostedZone, который был ранее создан для вас при настройке weloveparens.com
. Корзина S3, дистрибутив CloudFront и т. д. будут созданы как обычно. Кроме того, как всегда, все (включая RecordSet) будет создано как стек CloudFormation, поэтому, если он вам больше не нужен, вы можете просто удалить стек, не затрагивая weloveparens.com
.
Чтобы получить справку в командной строке, вы всегда можете запустить:
boot create-site --help
boot fetch-outputs --help
boot sync-bucket --help
Также не стесняйтесь открывать проблемы, задавать вопросы или предлагать улучшения.
Давать ключи AWS какой-либо программе и просто позволять ей работать с ней — это немного пугает, поэтому цель этого раздела — дать некоторое успокоение по этому поводу.
create-site
создаст стек CloudFormation в соответствии с шаблоном, определенным в confetti-clj/cloudformation.--dry-run
.create-site
должны иметь разрешения на создание отдельных ресурсов, перечисленных в шаблоне CloudFormation. (В будущем Confetti может предоставить фрагмент политики AWS IAM, чтобы вы могли создать пользователя, обладающего всеми правами, необходимыми Confetti.) Начиная с версии 0.2.0
команда create-site
создаст файл, заканчивающийся на .confetti.edn
Он содержит всю информацию, необходимую для поддержки вашего сайта. Информация в этом файле содержит секреты!
Обновление: я пришел к выводу, что создание этого файла — плохая идея. Люди неизбежно совершат это и опубликуют ключи от своей корзины S3. В будущем я хотел бы просто напечатать что-нибудь в формате, понятном direnv, и вместо этого порекомендовать env vars/direnv.
[confetti/cloudformation "0.1.6"]
, что принесет следующие улучшения:confetti/s3-deploy
для улучшения совместимости с Windows Повторное использование HostedZone. Создание новой HostedZone для каждого сайта имеет два недостатка:
Используя одну HostedZone для корневого домена example.com
эти проблемы решаются, а для добавления нового сайта demo.example.com
достаточно просто добавить RecordSet. Confetti теперь пытается найти существующую HostedZone и добавляет RecordSet только в том случае, если он ее находит.
Новая опция invalidation-paths
для задачи sync-bucket
. Раньше пути аннулирования определялись на основе загруженных вами файлов. Теперь вы можете предоставить индивидуальный набор. (#21 + #29)
Исправлена ошибка с новым методом предоставления параметров через файл .confetti.edn
confetti-edn
, мы теперь принимаем обе версии (заканчивающиеся на .confetti.edn
и только часть перед ней). Ранее предполагалось, что вы укажете только часть перед суффиксом .confetti.edn
confetti-edn
и задачи fetch-outputs
.create-site
fetch-outputs
.[confetti/cloudformation "0.1.3"]
чтобы иметь :website-url
в выходных данных стека независимо от того, используется Route53 или нет.fetch-outputs
если Route53 не используется fetch-outputs
, которую можно использовать для загрузки выходных данных стеков Cloudformation. Раньше отчеты часто зависали и результаты стека не сохранялись должным образом. Чтобы обойти это, теперь вы можете отменить отчеты и вызвать fetch-outputs
в любой более поздний момент времени, чтобы загрузить выходные данные.sync-bucket
теперь предоставляет опцию confetti-edn
, которую можно использовать для предоставления части some-id файла {some-id}.confetti.edn
. Информация в этом файле затем будет использоваться вместо обычных параметров задачи.Если что-то не работает должным образом, пожалуйста, откройте проблему. ?
Примечание. Если вы в конечном итоге получаете ошибку 504 при запросе ресурсов из вашего дистрибутива Cloudfront, дважды проверьте, вы действительно используете конечную точку веб-сайта в качестве источника. В результате использования конечной точки веб-сайта политика исходного протокола должна быть «Только HTTP».
Cloudfront поддерживает домены APEX, но только если вы используете записи ALIAS
Route53. Более подробную информацию можно найти в официальном объявлении.
Это ограничение усложняет автоматизацию настройки корневого домена (APEX), поэтому в настоящее время не поддерживается создание сайтов для корневых доменов без управления DNS с помощью Route53.