«Мир меняется, нравится вам это или нет. Принимай участие или оставайся позади». ~Дэйв Уотерс

Как мы все знаем, мир движется с огромной скоростью, автоматизируя задачу настолько, насколько это возможно. Это может быть связано с сокращением затрат, сокращением человеческих ошибок, времени и людей, которым чертовски скучно выполнять повторяющиеся задачи. Что бы это ни было, мы должны адаптироваться к этой среде.

Вот статья, которая поможет вам развернуть полноценный веб-сервер в облаке AWS с помощью Terraform с расширенными параметрами, такими как система доставки контента, расширенное хранилище без ручных усилий, сквозная автоматизация с помощью простого кода. Давайте начнем с грязных рук.

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

  • AWS EC2 (облако Amazon Elastic Compute Cloud)
  • AWS EBS (эластичное блочное хранилище)
  • AWS S3 (Amazon Simple Storage Service)
  • Amazon CloudFront (сеть доставки контента)
  • Терраформ
  • Гитхаб
  • Веб-сервер Apache

Первоначально нам нужно установить Terraform в нашей системе. Для процедуры установки Нажмите здесь!

Шаг 1. Создайте рабочий каталог и создайте файл с расширением .tf

mkdir mytera
notepad aws.tf

Выполните следующий шаг и добавьте код в файл aws.tf.

Шаг 2. Настройте поставщика AWS.

Здесь aws является поставщиком услуг, и мы собираемся развернуть наш веб-сервер в регионе ap-south-1. Профиль terauser — это имя пользователя, которое я создал и настроил в AWS AMI. Для создания профиля Нажмите здесь!

Шаг 3: Создание локального значения для хранения текущего идентификатора vpc

Здесь мой идентификатор vpc по умолчанию будет храниться в vpc_id. Так что его можно использовать по всему модулю.

Шаг 4: Создание пары ключей

  • Приведенный выше фрагмент кода (tls_private_key) создает защищенный закрытый ключ и кодирует его как PEM .
  • local_file сохранит закрытый ключ на вашем локальном компьютере для будущего доступа.
  • aws_key_pair создаст пару ключей с именем mywebserver в aws.

Шаг 5: Создайте группу безопасности с входящим трафиком HTTP, ssh и ICMP.

Здесь мы создаем группу безопасности с именем allow_http_ssh_in, которая создаст входящий доступ к протоколам http, ssh и ICMP(ping).

Шаг 6: Создайте экземпляр AWS с подготовленным веб-сервером

  • resource aws_instance создаст экземпляр aws с именем myinstance.
  • ami — идентификатор образа машины. Здесь я использовал RHEL 8. Подробный доступный список ami Нажмите здесь!
  • vpc_security_group_ids – это идентификатор группы безопасности, созданный на шаге 5.
  • connection будет подключаться к экземпляру по протоколу ssh как пользователь ec2 с ключами, которые мы создали на шаге 4.
  • provisioner «remote-exec»запустит удаленный скрипт в экземпляре aws, используя ключевое слово inline . Здесь мы устанавливаем httpd и git через инструмент yum и запускаем службы httpd.
  • Вышеуказанная установка и настройка (remote-exec) также могут быть выполнены с помощью ansible playbooks (рекомендуется) и прямых сценариев оболочки с использованием provisioner file.

Шаг 6. Создайте том EBS

  • Мы создаем том EBS (блочное хранилище) размером 1 гигабайт в той же зоне доступности .
  • Здесь наш девиз — подключить этот том к экземпляру aws для хранения файлов веб-сайтов и сделать его постоянным (даже если экземпляр выйдет из строя, наши файлы будут в большей безопасности в томе EBS).

Шаг 7. Присоединение тома EBS к экземпляру aws

  • Приведенный выше фрагмент кода прикрепит том EBS my_ebs_volume к экземпляру aws my_instance.
  • И он создаст раздел и смонтирует диск (том ebs) в каталог веб-сервера (/var/www/html).
  • Затем он клонирует код с GitHub и копирует его в (/var/www/html/) каталог.
  • Когда сервер выходит из строя, он автоматически размонтируется.

Шаг 8: Создание корзины S3

  • Amazon Simple Storage Service (Amazon S3) — это сервис хранения объектов, который предлагает лучшую в отрасли масштабируемость, доступность данных, безопасность и производительность.
  • Приведенный выше фрагмент кода создаст корзину s3 с именем "ubaidbucket"(Обратите внимание, что имя корзины S3 является глобально уникальным. , а пространство имен совместно используется всеми аккаунтами AWS. Поэтому укажите глобально уникальное имя) и управление доступом как общедоступное.
  • provisoner "local-exec" клонирует репозиторий git, содержащий изображения, на мой локальный компьютер в каталоге webrepo-image, чтобы его можно было загрузить в ковш S3.

Шаг 9: Загрузка изображения в корзину S3

  • Здесь мы загружаем изображения, хранящиеся в webrepo-image(локальный компьютер) в мою корзину s3 "ubaidbucket" .

Шаг 10: Создание локального значения для идентификатора источника s3

  • Здесь мы сохраняем URL-адрес изображения в переменной image_url и идентификатор источника s3 для его использования при создании облачного дистрибутива.

Шаг 11. Создание дистрибутива CloudFront и подключение его к корзине образов S3.

  • Amazon CloudFront — это сетевая служба быстрой доставки контента, которая безопасно доставляет данные, видео, приложения и API-интерфейсы клиентам по всему миру с малой задержкой и высокой скоростью передачи в удобной для разработчиков среде.

  • Будет создан облачный дистрибутив с geo_restriction none (эту функцию также можно использовать для ограничения доступа на основе местоположения).
  • После создания он подключится к экземпляру aws (myinstance) и скопирует URL-адрес облачного фронта в index.html.
  • Таким образом, пользователь получит объект (изображение, видео, данные, доставленные из своего периферийного местоположения с низкой задержкой и высокой скоростью.

Шаг 12: Разверните наш веб-сервер

Аплодисменты, вы сделали все необходимое, давайте выполним этот код

terraform init
terraform validate
terraform apply -auto-approve
  • terraform init установит все необходимые подключаемые модули для операции.
  • terraform validate проверит и подтвердит ваш код для проверки синтаксиса (необязательно)
  • terraform apply -auto-approveвыполнит ваш код в режиме автоматического утверждения.

Наконец, мы развернули наш веб-сервер с привилегированными функциями, такими как S3, CDN.

  • Здесь на веб-странице вы можете увидеть два изображения. Один хранится в томе ebs, а другой в S3.
  • Мы также можем хранить наш образ в томе EBS. Но рекомендуется хранить статические файлы, такие как изображения, видео, документы, в корзине S3 для более быстрого доступа, безопасности и масштабируемости, а также хранить файлы кода в томе EBS для более быстрого выполнения кода.

Если вы хотите удалить всю созданную среду, вы можете ввести следующую команду

terraform destroy -auto-approve

Еще идеи:

  • Этот код можно дополнительно улучшить, настроив, установив зависимости с помощью ansible.
  • Связываясь с Jenkins, мы можем автоматизировать задачу всякий раз, когда разработчик меняет код для новых обновлений, jenkins может автоматически развертывать код на сервере.
  • Вместо развертывания веб-сервера непосредственно на экземпляре aws мы можем развернуть его в контейнере докеров внутри экземпляра aws.

Полный код, написанный в файлеaws.tfНажмите здесь!

Для полных кодов веб-сервера в Github



Надеюсь, вам понравился материал (:

Пожалуйста, предоставьте свои совместные идеи, предложения и ценные отзывы.

Продолжай учиться ! Продолжайте делиться!