Фон
Тенденция к размещению статических сайтов на Amazon S3 становится очень популярной. Этот подход был принят многими организациями из-за его преимуществ перед традиционным серверным хостингом. Статические веб-сайты — это веб-сайты, которым не требуется среда выполнения, такая как JRE, .NET и т. Д., И в основном они основаны на HTML, CSS, JS и других статических ресурсах (аудио / видеофайлы, документы и т. Д.). AWS предоставляет все необходимые сервисы и инструменты, которые позволяют очень легко создавать статические веб-сайты и управлять ими в облаке AWS.
Как и другие облачные хостинги, капиталовложений нет. Тем не менее, для размещения статического веб-сайта существуют незначительные эксплуатационные расходы. Вы можете найти больше преимуществ здесь .
Сначала мы обсудим некоторые из основных архитектурных компонентов системы. Это обсуждение поможет вам понять все строительные блоки и работу системы. Архитектура, которую вы выберете для своего сайта, будет полностью зависеть от ваших требований. В конце блога мы также предоставим пошаговое руководство по созданию статического веб-сайта на AWS.
Архитектура
S3
Первым обязательным обслуживанием является S3. Это безопасная и долговечная служба хранения объектов, которая позволяет хранить ваши файлы в облачных хранилищах, называемых сегментами. С каждым файлом внутри корзины связан уникальный URL-адрес, который можно использовать для доступа к нему, если у пользователя есть права доступа. В качестве первого шага вам необходимо загрузить все содержимое статического веб-сайта в корзину S3. Включив веб-хостинг и сделав ведро общедоступным, вы сможете обслуживать контент вашего сайта. Более подробную информацию можно найти здесь .
Route53
Когда вы разместите свой веб-сайт на S3, у вас будет конечная точка веб-сайта по умолчанию для региона AWS, которую вы сможете напрямую использовать для доступа к веб-сайту. У вас также есть возможность сопоставить свой пользовательский домен с указанием конечной точки статического веб-сайта по умолчанию, и именно здесь Route53 вступает в игру. Подробности о том, как использовать Route53 для этой цели, можно найти здесь.
Cognito (необязательно)
Чтобы обеспечить механизм аутентификации для вашего сайта, вы можете использовать AWS Cognito. Вы можете создать пул пользователей и предоставить логин пользователям в этом пуле. Пулы пользователей Cognito предлагают функциональные возможности для поставщиков федеративных удостоверений (например, входа в систему через Facebook и Google), восстановления пароля и безопасности авторизации пользователей в облаке.
Разработка микросервисов (с использованием Lambda, API Gateway и RDS)
Вы можете разрабатывать микросервисы, используя комбинацию API Gateway и AWS Lambda. Эти микросервисы могут быть использованы непосредственно вашим сайтом для получения и отправки данных из источника данных. Следовательно, ваш статический веб-сайт также может иметь функциональность динамической веб-страницы. Например, в случае события (например, нажатие кнопки, отправка формы и т. Д.) Вы можете использовать Jquery Ajax для вызова микросервиса для загрузки данных и отображения на веб-странице.
Вы можете создавать микросервисы для полных операций CRUD и многое другое с помощью этих сервисов на своем веб-сайте, чтобы сделать ваш сайт полностью динамичным. Точно так же вы можете создавать микросервисы, которые взаимодействуют с другими сервисами AWS, такими как SES, в случае, если вы хотите отправлять уведомления по электронной почте через веб-сайт.
По сути, вы используете AWS SDK для написания лямбда-функций, которые обеспечивают функциональность для вашего микросервиса. Через Lambda вы можете общаться с любым сервисом AWS. API Gateway интегрируется с Lambda, чтобы предоставить вам конечную точку API.
Пошаговое руководство
Основные конфигурации
-
Перейдите в консоль S3 и создайте новое ведро с настройками по умолчанию
-
Перейдите в свойства вашего ведра и выберите опцию « Статический хостинг сайтов».
-
Включите опцию « Использовать это ведро для размещения веб-сайта ».
-
Укажите имена HTML, которые будут отображаться в качестве домашней страницы, и HTML-файл, который будет отображаться в случае возникновения ошибки на вашем сайте.
При необходимости укажите правила перенаправления, если вы хотите направить запросы условно в соответствии с конкретными именами ключей объекта, префиксами в запросе или кодами ответа на какой-либо другой объект в том же сегменте или на внешний URL-адрес.
Теперь перейдите в раздел « Права » вашего сегмента и добавьте в раздел « Политика сегментов» следующее:
{
"Version":"2018-07-15",
"Statement":[{
"Sid":"PublicReadForGetBucketObjects",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::your-bucket-name/*"
]
}
]
}
Замените ваше ведро-имя с именем вашего ведра.
Чтобы ваш статический веб-сайт S3 мог отвечать на запросы, такие как GET и POST, поступающие от внешнего приложения, размещенного в определенном домене, вам необходимо настроить CORS в настройках вашего сегмента. Чтобы сделать это, добавьте следующее в раздел конфигурации CORS Полномочий:
<!-- Sample policy -->
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Загрузите свой код. Для этого руководства создайте два простых файла HTML с именами index.html и error.html и загрузите их в корзину.
Чтобы запустить и протестировать сайт, конечную точку можно получить из Свойства > Статический хостинг сайта.
Пополните свой сайт, добавив динамическое поведение
Вы можете использовать комбинацию HTML5 и CSS3 для графического обогащения вашего сайта. Вы также можете использовать Jquery Ajax для вызова API (микросервис) и динамического извлечения данных из источника данных и отображения их на своем веб-сайте. Точно так же, вызывая конечные точки API с помощью Ajax, вы можете хранить любые данные пользователя в своем источнике данных, как и любое другое веб-приложение. Если ваше требование состоит в том, чтобы использовать AWS только для всех ваших потребностей разработки, вы можете использовать комбинацию API Gateway и Lambda для создания API, учебное руководство по которому можно найти здесь .
Настройки CORS в конечных точках шлюза API
Важно отметить, что при разработке API (микросервисов) с использованием API Gateway и Lambda обязательно выполните следующее:
-
Включите CORS в шлюзе API во время создания нового ресурса.
-
При написании лямбда-функции (которую вы будете интегрировать с конечной точкой API Gateway для обеспечения функциональности вашей микросервисной службе), обязательно добавьте дополнительный параметр в заголовок ответа с именем Access-Control-Allow-Origin со значением «* »
Если вы придерживаетесь учебника, который я упоминал ранее для разработки микросервисов , для этой цели вы можете наблюдать следующую строку кода в примере обработчика функций, приведенном в этом учебнике:
headerJson.put("Access-Control-Allow-Origin", "*");
Заключение
Если ваш веб-сайт в основном информационный, не ожидает слишком больших изменений и цель состоит в том, чтобы обеспечить простое управление и низкую стоимость, тогда S3 должен быть вашим первым выбором. Кроме того, использование сервисно-ориентированной архитектуры, как показано выше, позволяет динамически отображать данные и отправлять данные обратно в любой источник данных, что дает вам возможность заставить ваш веб-сайт выполнять многие функции.