«Мир меняется, нравится вам это или нет. Принимай участие или оставайся позади». ~Дэйв Уотерс
Как мы все знаем, мир движется с огромной скоростью, автоматизируя задачу настолько, насколько это возможно. Это может быть связано с сокращением затрат, сокращением человеческих ошибок, времени и людей, которым чертовски скучно выполнять повторяющиеся задачи. Что бы это ни было, мы должны адаптироваться к этой среде.
Вот статья, которая поможет вам развернуть полноценный веб-сервер в облаке 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
Надеюсь, вам понравился материал (:
Пожалуйста, предоставьте свои совместные идеи, предложения и ценные отзывы.
Продолжай учиться ! Продолжайте делиться!