Создание статического сайта на AWS S3
Войдите в свой аккаунт AWS и создайте корзину (bucket) с именем www.mystaticsite77.ru (обязательно укажите www в начале имени). Выберите регион, в котором должны храниться ваши файлы.
На вкладке Properties включите функцию хостинга статического сайта (Static website hosting).
Укажите имя основного файла (index.html) и страницу, которую нужно отображать при ошибке (404.html). Сохраните изменения
Обратите внимание на URL (Endpoint), сгенерированного AWS. Скопируйте его
Чтобы открыть общий доступ к это корзине, нужно изменить политику на вкладке Permissions -> Bucket Policy
Загрузите новую статическую страницу HTML в созданную корзину (Object->Upload).
Теперь сайт должен быть доступен по длинному endpoint bucket URL, который выглядит примерно так: http://www.mystaticsite77.ru.s3-website-us-east-1.amazonaws.com
3: Создание конфигурационного файла DNS
Теперь нужно создать базовый конфигурационный файл DNS, который будет содержать DNS-записи для вашего доменного имени или делегированной зоны DNS.
Каждая DNS-зона, которой вы хотите управлять с помощью OctoDNS, будет иметь свой собственный файл, например, your-domain.yaml. В этом файле определяются DNS записи зоны в формате YAML.
Для начала перейдите в каталог ~/octodns/config:
Затем создайте файл your-domain.yaml и откройте его в редакторе:
Добавьте следующие конфигурации в файл:
Этот файл определяет зону DNS с двумя записями A, указывающими на адрес IPv4, на котором вы размещаете свой домен или веб-сайт. Одна запись A предназначена для корневого домена (например, your-domain), а вторая – для субдомена с префиксом www (например, www.your-domain).
Сохраните и закройте файл.
Только что вы настроили базовый файл зоны DNS для OctoDNS с двумя основными записями A, указывающими на IPv4-адрес вашего домена или веб-сайта. Давайте расширим файл некоторыми полезными записями DNS.
5: Тестирование и развертывание конфигурации DNS
Пора запустить локальную проверку синтаксиса DNS, а затем развернуть изменения на работающем DNS-сервере/провайдере.
Перейдите в каталог octodns:
Убедитесь, что вы все еще находитесь в virtualenv, посмотрев на префикс в командной строке:
Далее, используйте команду octodns-validate, чтобы проверить синтаксис конфигурационных файлов. В команде необходимо указать путь к файлу:
Если синтаксис YAML вашего конфигурационного файла DNS правильный, OctoDNS не вернет никакого вывода. Если вы увидите сообщение об ошибке или предупреждение, в нем OctoDNS предоставит подробную информацию о том, где находится ошибка в файле.
Затем вы можете выполнить пробный запуск конфигурации DNS, который покажет, какие изменения будут внесены, фактически не внося их:
Вы должны получить примерно такой вывод:
Примечание: Следующая команда внесет изменения в ваши записи DNS и, возможно, в другие настройки. На всякий случай сделаете резервную копию существующей конфигурации DNS, а также убедитесь, что у вас есть возможность откатить настройки, если это будет необходимо.
Наконец, вы можете загрузить изменения:
Примечание: В некоторых случаях OctoDNS откажется от внесения изменений, если их будет очень много. Это функция автоматической защиты от случайных неправильных настроек. Если вы столкнулись с таким отказом, вы можете повторно запустить octodns-sync, используя опцию –force, но убедитесь, что вы готовы к этому.
Вы увидите вывод, подобный тому, что видели при пробном прогоне, но с новым фрагментом:
Если сейчас вы проверите настройки DNS своего домена в панели управления провайдера, вы увидите все свои изменения.
Вы также можете проверить создание записи, запустив DNS-запрос для вашего домена или делегированной зоны с помощью команды dig.
В выводе будет IP-адрес и соответствующая запись DNS из зоны, развернутой с помощью OctoDNS. На обновление записей DNS может уйти некоторое время, поэтому вам, возможно, придется подождать и запустить эту команду позже.
Итак, вы выполнили локальную проверку синтаксиса в конфигурации DNS, затем развернули файл на действующем провайдере DNS и проверили, что изменения были внесены успешно.
Запрос бесплатного SSL сертификата через Certificate Manager
Конечно, в общем случае вопрос установки SSL сертификата для статического сайта весьма спорен. Мы в большей степени будем его использовать в целях демонстрации.
- В разделе Security, Identity & Compliance откройте секцию Certificate Manager
- Нажмите кнопку “Request a certificate” и укажите имя своего домена в *.mystaticsite77.ru и mystaticsite77.ru, а затем нажмите кнопку “Review and request“.
- Подтвердите запрос сертификата и AWS попытается отправить вам электронное письмо для подтверждения запроса. Нажав на стрелку, можно отобразить список email, на которые должен быть отправлен запрос.Это, пожалуй, самый «трудный» шаг, т.к. у вас должен быть доступ к любому из ящиков в списке. Как правило, это ящик, указанный во WHOIS домена (я использую адрес privacyguardian.org для защиты данных WHOIS).
- После получения письма от AWS, нажмите на ссылку в письме для подтверждения запроса на выпуск SSL сертификата. Имейте в виду, что AWS отправит два письма (для *.mystaticsite77.ru и mystaticsite77.ru ), нужно подтвердить их оба.
CloudFront – настройка CDN и привязка HTTPS
CloudFront позволит нам не только привязать к сайту бесплатный SSL-сертификат, но и позволяет использовать для доступа к сайту протокол HTTP/2, который во всех тестах показывает производительность намного выше, чем HTTP. Кроме того, большая распределенная сеть CDN CloudFront еще более увеличивает скорость доступа к нашему сайту из разных точек мира.
-
- В разделе Networking & Content Delivery выберите CloudFront.
- Нажмите на кнопку Create Distribution, а затем в разделе Web distribution нажмите кнопку Get Started
- Я задал такие настройки (остальные можно оставить по-умолчанию):
Origin: длинный URL сайта, предоставляемый S3.Viewer Protocol Policy: Redirect HTTP to HTTPSCompress Objects Automatically: YesCNAMEs: www.mystaticsite77.ruCustom SSL Certificate: выберите созданный ранее SSL сертификат.Default Root Object: index.html
Затем нажмите Create Distribution
Примечание: По умолчанию CloudFront покажет список источников и предложит использовать S3 Bucket. Вам нужно будет сменить S3 Bucket, выбрав вместо него S3 URL (Endpoint S3 bucket). К примеру, http://www.mystaticsite77.ru.s3-website-us-east-1.amazonaws.com
Генерация данных в сети CloudFront займет довольно продолжительное время – от 30 минут до нескольких часов.
Оригинальный ответ
Для этого Nettica должна использовать специальное решение для перенаправления, вот проблема:
Можно создать псевдоним CNAME, например для , однако DNS не предоставляет официальной поддержки для псевдонимов подкаталога, такого как , в этом примере.
Жаль, что AWS, кажется, просто не делает это по умолчанию при нажатии https://myaccount.signin.aws.Amazon.com/ (я только что попробовал), потому что это решило бы вашу проблему сразу и имело бы большой смысл в первую очередь; кроме того, это должно быть довольно легко настроить на их конце.
По этой причине некоторые поставщики DNS, по-видимому, внедрили собственное решение, позволяющее перенаправлять в подкаталоги; Рискну предположить, что они в основном упрощают создание псевдонима CNAME для своего собственного домена и снова перенаправляют оттуда к конечному месту назначения с помощью немедленного .
Таким образом, для достижения того же результата вам понадобится HTTP-служба, выполняющая эти перенаправления, что, конечно, не является простым решением, на которое можно надеяться. Возможно/Надеюсь, кто-то еще может придумать более разумный подход.
2: Настройка OctoDNS
Теперь нужно создать конфигурационные файлы для OctoDNS и подключить инструмент к вашему провайдеру DNS, чтобы он мог начать вносить изменения в записи.
Примечание: В этом мануале мы сосредоточимся на базовой настройке OctoDNS; однако в среде производства рекомендуется хранить конфигурацию OctoDNS в системе управления версиями (VCS), например, в Git. Так вы получите полный контроль версий, интеграцию с CI/CD для тестирования, плавный откат развертываний и много других преимуществ.
Для начала нужно настроить файл config.yaml, который определяет DNS зоны для OctoDNS и позволяет ему пройти аутентификацию у DNS провайдера и вносить изменения.
Формат config.yaml немного отличается в зависимости от DNS провайдера. Пожалуйста, проверьте в официальной документации OctoDNS, чтобы найти конфигурацию для вашего провайдера. По этой ссылке сведения о конфигурации представлены в виде комментариев в фактическом коде Python для вашего провайдера, а ссылка на этот код находится в столбце Provider. Найдя код Python для своего провайдера, вы можете найти и соответствующий комментарий к коду – он находится непосредственно под class ProviderNameProvider. Например:
Перейдите в каталог ~/octodns/config:
Создайте файл config.yaml:
Добавьте в файл скопированный образец конфигурации для вашего провайдера. Например:
Примечание: Ваши конфигурации будут отличаться, если вы используете другого провайдера.
Этот файл помогает OctoDNS понять, к каким DNS-провайдерам вы хотите подключиться и какими DNS-зонами этих провайдеров он должен управлять.
Затем вам нужно настроить аутентификацию для вашего DNS-провайдера. Обычно для этого используется ключ API или токен OAuth.
Если вы не хотите хранить свой токен доступа в виде простого текста в конфигурационном файле, вы можете передать его как переменную среды при запуске программы. Чтобы сделать это, нужно использовать следующую строку token: в config.yaml:
Затем перед запуском OctoDNS установите в соответствующей переменной среды ваш токен доступа, и OctoDNS прочитает его оттуда при запуске:
Если у вас несколько разных DNS провайдеров – например, для нескольких доменных имен или делегированных зон DNS – вы можете определить их все в одном файле config.yaml.
Итак, вы настроили исходный конфигурационный файл OctoDNS, чтобы программа могла проходить аутентификацию у вашего DNS-провайдера и вносить изменения. Затем нужно создать конфигурацию для ваших зон DNS.
Шаг 3. Включите статический хостинг веб-сайтов и укажите правила маршрутизации.
- В окне свойств откройте настройки «Статический хостинг сайтов».
- Выберите опцию «Включить хостинг сайтов».
- Введите значение для «Индексного документа». Этот объект (документ) никогда не будет обслуживаться S3, и вам никогда не придется загружать его. Просто используйте любое имя, которое вы хотите.
- Откройте настройки для «Изменить правила перенаправления».
-
Вставьте следующий фрагмент XML полностью.
Если вам интересно, что делает вышеуказанный XML, посетите документацию . Бонусная техника (не описанная здесь) — это перенаправление на определенные страницы хоста назначения, например, . Прочтите об элементе , если вам нужна эта функциональность.
4: Добавление других DNS-записей
Теперь вы можете заполнить файл удобным набором записей DNS для вашего веб-сайта или сервиса, используя язык YAML.
В отличие от традиционных файлов зон BIND, куда записи DNS вносятся в простом построчном формате, записи DNS в OctoDNS определяются как ключи и подключи YAML с рядом связанных значений (как показано в разделе 3).
Ключом верхнего уровня обычно является ‘name’, что по сути представляет идентификатор записи. Примеры DNS ‘name’: www, subdomain1 и mail. В OctoDNS есть два специальных имени: пара одинарных кавычек ” – для корневой записи (обычно обозначается как «@»);’*’ – для групповых записей. Обязательным значением каждого ключа (записи DNS) является type. Он определяет тип записи DNS в этом ключе верхнего уровня YAML. type поддерживает все стандартные типы записей DNS, включая A, AAAA, MX, TXT, NS, CNAME. Полный список доступных типов вы найдете здесь.
Значения для ваших записей DNS определяются либо в ключах верхнего уровня (если у вас только одно значение), либо в виде списка (если у вас есть несколько значений, например, несколько IP- или MX-адресов).
К примеру, чтобы определить одно значение, вы можете использовать такую конфигурацию:
Чтобы определить несколько значений для одной записи, используйте:
Синтаксис настройки DNS-записей немного отличается для каждого типа. Ниже мы приведем примеры некоторых наиболее распространенных типов.
Цель: направить на адрес IPv4.
Синтаксис:
Пример:
Цель: направить на адрес IPv6.
Синтаксис:
Пример:
Цель: Сделать домен/поддомен алиасом другого домена.
Синтаксис:
Пример:
Записи MX
Цель: направить электронную почту на определенные серверы/адреса.
Синтаксис:
Обратите внимание, если в значении MX присутствуют точки, нужно обязательно поставить точку в конце. Пример:
Пример:
Записи TXT
Цель: добавить произвольный простой текст (часто используется для конфигураций без собственного выделенного типа записи).
Синтаксис:
Пример:
Чтобы добавить DNS записи для вашего домена или делегированной зоны DNS, откройте конфигурационный файл DNS в редакторе:
Теперь вы можете начать заполнение своей зоны DNS, используя показанный выше синтаксис, а также этот раздел официальной документации OctoDNS.
Для справки приводим следующий блок кода. Он содержит полный список конфигураций для базовой настройки DNS:
После завершения начальной настройки DNS сохраните и закройте файл.
Теперь давайте протестируем конфигурацию и развернем ее.
Задача
Используя только инструменты, доступные в Amazon S3 и Amazon Route 53, создайте перенаправление URL, которое автоматически перенаправляет http://url-redirect-example.vivekmchawla.com на страницу входа в консоль AWS с псевдонимом «MyAccount» , расположенный по адресу https://myaccount.signin.aws.Amazon.com/console/ .
Это руководство научит вас настраивать переадресацию URL на любой URL, а не только на Amazon. Вы узнаете, как настроить переадресацию в определенные папки (например, «/ console» в моем примере) и как изменить протокол перенаправления с HTTP на HTTPS (или наоборот).
Обновление
Хотя мой оригинальный ответ, приведенный ниже, все еще действителен и может быть полезен, чтобы понять причину, по которой пересылка URL-адресов на основе DNS недоступна через Amazon Route 53 из коробки, я настоятельно рекомендую проверить, — Вивек М. Чавла совершенно умный косвенное решение через представленную тем временем поддержку перенаправления веб-сайтов в Amazon S3 и, таким образом, достижение автономного сервера меньше и, следовательно, бесплатное решение в рамках AWS.
Внедрение автоматизированного решения для создания таких перенаправлений оставлено читателю в качестве упражнения, но, пожалуйста, отдайте дань эпическому ответу Vivek, опубликовав свое решение;)
Заключение
Теперь вы умеете устанавливать и настраивать OctoDNS, а также выполнять настройку DNS для вашего провайдера.
Вы можете управлять изменениями конфигурации DNS и тестировать их в безопасной среде, прежде чем развертывать их в производство.
Если вы хотите продолжить изучение этого вопроса, попробуйте интегрировать OctoDNS в конвейер CI/CD, что позволит вам проводить углубленные тесты и лучше контролировать развертывание в рабочей среде. Вы также можете изучить интеграцию OctoDNS в процессы сборки и развертывания инфраструктуры, что позволит вам развертывать серверы и автоматически добавлять их в DNS.
- Сравнение инструментов непрерывной интеграции: Jenkins, GitLab CI, Buildbot, Drone, и Concourse
- Создание плейбука Ansible
- Создание манифестов Puppet
- Написание рецептов Chef
DNSOctoDNSPythonUbuntuUbuntu 18.04