Skip to content

yandex-cloud-examples/yc-object-storage-cdn-static-site

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Размещение статического сайта в Yandex Cloud

Этот репозиторий содержит демонстрационные примеры для статьи Развертывание статического веб-сайта в отказоустойчивой конфигурации в Yandex Cloud. В статье рассматриваются сильные и слабые стороны различных вариантов размещения статического сайта (лендинга) в инфраструктуре Yandex Cloud.

Демонстрационный пример представляет собой статический сайт и форму регистрации. В результате заполнения формы введенные пользователем данные отправляются в письме на заданный адрес электронной почты.

Создание инфраструктуры и развертывание сайта

Все операции по развертыванию инфраструктуры и приложения выполняются с помощью файлов конфигурации Terraform. При изменении файлов конфигурации Terraform автоматически определяет, какая часть конфигурации уже развернута и не требует изменений, какие ресурсы следует создать, а какие — изменить или удалить.

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигурации, содержащих описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Business Source License.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Планируемый расход ресурсов

Для развертывания инфраструктуры, описанной в статье, используются компоненты следующих сервисов Yandex Cloud:

Для вариантов решения Бакет Yandex Object Storage с публичным доступом и раздачей контента через Yandex Cloud CDN и Бакет Yandex Object Storage без публичного доступа с Yandex API Gateway и раздачей контента через Yandex Cloud CDN расходы на потребление сервисов в тестовом режиме (установка — проверка — удаление) укладываются в рамки уровня нетарифицируемого использования (Free Tier), за исключением услуги хостинга публичной зоны Cloud DNS (расходы менее 2 рублей в сутки, подробнее в разделе Правила тарификации для Cloud DNS).

Для варианта решения Бакет Yandex Object Storage без публичного доступа с Yandex Application Load Balancer к расходам добавляется стоимость использования L7-балансировщика. Подробнее в разделе Правила тарификации для Yandex Application Load Balancer.

Состав репозитория

Создание инфраструктуры состоит из двух этапов:

  1. Создание общих объектов: DNS-зона, служебные DNS-записи, сертификат Let's Encrypt, почтовый адрес Yandex Cloud Postbox для рассылок.

  2. Создание инфраструктуры для варианта решения из сценария.

    Одновременно можно создать инфраструктуру только для одного варианта решения. Прежде чем развертывать инфраструктуру для какого-либо варианта, убедитесь, что ресурсы, созданные для других вариантов решения, были удалены.

Подготовка

Чтобы создать инфраструктуру для вариантов решений из статьи с помощью Terraform, выполните следующие шаги:

  1. Установите Terraform, получите данные для аутентификации и настройте провайдер.

  2. Клонируйте этот репозиторий:

    git clone git@github.com:yandex-cloud-examples/yc-object-storage-cdn-static-site.git
  3. Перейдите в каталог репозитория:

    cd yc-object-storage-cdn-static-site
  4. В файле bootstrap/terraform.tfvars задайте пользовательские параметры:

    • folder_idидентификатор каталога.

    • site_domain — доменное имя, по которому будет доступен развернутый сайт: допускается использование доменных имен второго уровня и выше.

      Для успешного создания инфраструктуры необходимо, чтобы домен более низкого уровня был делегирован сервису Yandex Cloud DNS.

      Например:

      • если приложение будет опубликовано на домене staticsite.yc.example.com, в Yandex Cloud DNS должна быть делегирована зона yc.example.com или example.com;
      • если приложение будет опубликовано на домене my.example.com, то делегировать нужно домен example.com.
    • email_recipient — адрес получателя сообщений о регистрации.

    • dns_origin — имя доменной зоны, делегированной в Yandex Cloud DNS.

      Если делегируется домен третьего уровня и выше (например, my.example.com, my.new.example.com, my.other.new.example.com и т.д.), в переменной dns_origin укажите имя делегируемого домена. Если делегируется домен второго уровня (например, example.com), то задавать эту переменную не нужно.

    Пример файла bootstrap/terraform.tfvars

    folder_id       = "b1gt6g8ht345********"
    site_domain     = "my.example.com"
    email_recipient = "myemail@example.com"
    dns_origin      = "example.com" # Имя делегируемого домена, требуется указать если делегируется домен третьего уровня и выше

Создание общей части инфраструктуры

  1. Инициализируйте Terraform в каталоге bootstrap:

    terraform -chdir=bootstrap/ init
  2. Проверьте корректность конфигурационных файлов с помощью команды:

    terraform -chdir=bootstrap/ validate

    Если конфигурация корректна, Terraform выведет сообщение:

    Success! The configuration is valid.
    
  3. Создайте IAM-токен для авторизации провайдера Terraform в Yandex Cloud:

    YC_TOKEN=$(yc iam create-token) && export YC_TOKEN
  4. Посмотрите список и параметры ресурсов, которые будут созданы при развертывании инфраструктуры:

    terraform -chdir=bootstrap/ plan

    В терминале будет выведен список запланированных к созданию ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  5. Разверните инфраструктуру:

    terraform -chdir=bootstrap/ apply

    В процессе выполнения команды Terraform запросит подтверждение создания инфраструктуры: в терминале введите слово yes и нажмите Enter.

  6. Дождитесь завершения создания всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Apply complete! Resources: 57 added, 0 changed, 0 destroyed.
    
    Outputs:
    ...
    
  7. После создания инфраструктуры дождитесь перехода SSL-сертификата в состояние Issued. На это может потребоваться до 40 минут.

Бакет Yandex Object Storage с публичным доступом и раздачей контента через Yandex Cloud CDN

  1. Создайте IAM-токен для авторизации провайдера Terraform в Yandex Cloud:

    YC_TOKEN=$(yc iam create-token) && export YC_TOKEN
  2. Инициализируйте Terraform в каталоге cdn-s3:

    terraform -chdir=cdn-s3/ init
  3. Проверьте корректность конфигурационных файлов и посмотрите список ресурсов, планируемых к созданию, с помощью команд:

    terraform -chdir=cdn-s3/ validate
    terraform -chdir=cdn-s3/ plan
  4. Разверните инфраструктуру:

    terraform -chdir=cdn-s3/ apply

    В процессе выполнения команды Terraform запросит подтверждение создания инфраструктуры: в терминале введите слово yes и нажмите Enter.

  5. Дождитесь завершения создания всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Apply complete! Resources: 57 added, 0 changed, 0 destroyed.
    
    Outputs:
    ...
    
  6. Убедитесь в работоспособности сайта. Для этого в браузере откройте сайт по адресу, который был указан в параметре site_domain. Например: https://my.example.com.

    После создания инфраструктуры может дополнительно потребоваться до 30 минут, чтобы внесенные изменения применились в Yandex Cloud CDN и сайт стал доступен.

  7. Заполните форму случайными данными и нажмите кнопку, чтобы отправить их.

  8. Убедитесь, что письмо с уведомлением о регистрации доставлено на адрес, указанный в параметре email_recipient.

  9. Убедитесь, что сайт недоступен по служебным адресам бакета, таким как http://storage.yandexcloud.net/my.example.com.

    Подробнее о служебных адресах бакета читайте в разделах URL бакета и Хостинг статических сайтов.

  10. Удалите созданные ранее ресурсы:

    terraform -chdir=cdn-s3/ destroy

    В процессе выполнения команды Terraform запросит подтверждение удаления инфраструктуры: в терминале введите слово yes и нажмите Enter.

  11. Дождитесь завершения удаления всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Destroy complete! Resources: 57 destroyed.
    

Бакет Yandex Object Storage без публичного доступа с Yandex API Gateway и раздачей контента через Yandex Cloud CDN

  1. Создайте IAM-токен для авторизации провайдера Terraform в Yandex Cloud:

    YC_TOKEN=$(yc iam create-token) && export YC_TOKEN
  2. Инициализируйте Terraform в каталоге cdn-apigw-s3:

    terraform -chdir=cdn-apigw-s3/ init
  3. Проверьте корректность конфигурационных файлов и посмотрите список ресурсов, планируемых к созданию, с помощью команд:

    terraform -chdir=cdn-apigw-s3/ validate
    terraform -chdir=cdn-apigw-s3/ plan
  4. Разверните инфраструктуру:

    terraform -chdir=cdn-apigw-s3/ apply

    В процессе выполнения команды Terraform запросит подтверждение создания инфраструктуры: в терминале введите слово yes и нажмите Enter.

  5. Дождитесь завершения создания всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Apply complete! Resources: 57 added, 0 changed, 0 destroyed.
    
    Outputs:
    ...
    
  6. Убедитесь в работоспособности сайта. Для этого в браузере откройте сайт по адресу, который был указан в параметре site_domain. Например: https://my.example.com.

    После создания инфраструктуры может дополнительно потребоваться до 30 минут, чтобы внесенные изменения применились в Yandex Cloud CDN и сайт стал доступен.

  7. Заполните форму случайными данными и нажмите кнопку, чтобы отправить их.

  8. Убедитесь, что письмо с уведомлением о регистрации доставлено на адрес, указанный в параметре email_recipient.

  9. Убедитесь, что сайт недоступен по служебным адресам бакета, таким как http://secretbucket-xxxxx.storage.yandexcloud.net.

    Подробнее о служебных адресах бакета читайте в разделе URL бакета.

  10. Удалите созданные ранее ресурсы:

    terraform -chdir=cdn-apigw-s3/ destroy

    В процессе выполнения команды Terraform запросит подтверждение удаления инфраструктуры: в терминале введите слово yes и нажмите Enter.

  11. Дождитесь завершения удаления всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Destroy complete! Resources: 57 destroyed.
    

Бакет Yandex Object Storage без публичного доступа с Yandex Application Load Balancer

  1. Создайте IAM-токен для авторизации провайдера Terraform в Yandex Cloud:

    YC_TOKEN=$(yc iam create-token) && export YC_TOKEN
  2. Инициализируйте Terraform в каталоге alb-s3-pe:

    terraform -chdir=alb-s3-pe/ init
  3. Проверьте корректность конфигурационных файлов и посмотрите список ресурсов, планируемых к созданию, с помощью команд:

    terraform -chdir=alb-s3-pe/ validate
    terraform -chdir=alb-s3-pe/ plan
  4. Разверните инфраструктуру:

    terraform -chdir=alb-s3-pe/ apply

    В процессе выполнения команды Terraform запросит подтверждение создания инфраструктуры: в терминале введите слово yes и нажмите Enter.

  5. Дождитесь завершения создания всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Apply complete! Resources: 57 added, 0 changed, 0 destroyed.
    
    Outputs:
    ...
    
  6. Убедитесь в работоспособности сайта. Для этого в браузере откройте сайт по адресу, который был указан в параметре site_domain. Например: https://my.example.com.

    После создания инфраструктуры может дополнительно потребоваться до 10 минут, чтобы внесенные изменения применились в DNS.

  7. Заполните форму случайными данными и нажмите кнопку, чтобы отправить их.

  8. Убедитесь, что письмо с уведомлением о регистрации доставлено на адрес, указанный в параметре email_recipient.

  9. Убедитесь, что сайт недоступен по служебным адресам бакета, таким как http://secretbucket-xxxxx.storage.yandexcloud.net.

    Подробнее о служебных адресах бакета читайте в разделе URL бакета.

  10. Удалите созданные ранее ресурсы:

    terraform -chdir=alb-s3-pe/ destroy

    В процессе выполнения команды Terraform запросит подтверждение удаления инфраструктуры: в терминале введите слово yes и нажмите Enter.

  11. Дождитесь завершения удаления всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Destroy complete! Resources: 57 destroyed.
    

Освобождение общих ресурсов

  1. Удалите созданные ранее ресурсы:

    terraform -chdir=bootstrap/ destroy

    В процессе выполнения команды Terraform запросит подтверждение удаления инфраструктуры: в терминале введите слово yes и нажмите Enter.

  2. Дождитесь завершения удаления всех ресурсов. В случае успеха вывод Terraform не будет содержать ошибок и завершится финальным уведомлением:

    Destroy complete! Resources: 57 destroyed.
    

About

Пример развертывания статического сайта на базе сервисов Object Storage и CDN.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors