В этом руководстве мы будем использовать Terraform для предоставления сервера Jenkins в AWS.
Фон
Сценарий
Ваша команда использовала сервер Jenkins локально для конвейера CI/CD и теперь хочет перенести его в облако. Вам было поручено настроить сервер Jenkins на AWS.
Требования
- Сервер Jenkins должен быть развернут на экземпляре EC2.
- Экземпляр EC2 должен быть доступен через Интернет через порт 8080.
- Только вы должны иметь доступ к экземпляру EC2 через SSH.
- Используйте Terraform для инфраструктуры в качестве кода
Как мы выполним эту задачу с помощью Terraform?
- Создайте сеть VPC
- Создайте интернет-шлюз и подключите его к VPC с помощью таблицы маршрутизации.
- Создайте общедоступную подсеть и свяжите ее с таблицей маршрутов.
- Создайте группу безопасности для экземпляра EC2
- Создайте сценарий для автоматизации установки Jenkins в экземпляре EC2.
- Создайте экземпляр EC2 и прикрепите к нему эластичный IP-адрес и пару ключей.
- Убедитесь, что все работает
Предпосылки
Настройка каталога проекта
Во-первых, нам нужно настроить наш каталог. Вот как это будет выглядеть, когда все сказано и сделано.
terraform-jenkins/ ├─ main.tf ├─ outputs.tf ├─ secrets.tfvars ├─ modules/ │ ├─ compute/ │ │ ├─ main.tf │ │ ├─ outputs.tf │ │ ├─ install_jenkins.sh │ ├─ security_group/ │ │ ├─ main.tf │ │ ├─ outputs.tf │ ├─ vpc/ │ │ ├─ main.tf │ │ ├─ outputs.tf
Вы можете запустить следующую команду, чтобы создать структуру каталогов сверху:
mkdir -p terraform-jenkins/modules/{compute,security_group,vpc} && cd terraform-jenkins && touch main.tf outputs.tf secrets.tfvars && cd modules/compute && touch main.tf outputs.tf install_jenkins.sh && cd ../security_group && touch main.tf outputs.tf && cd ../vpc && touch main.tf outputs.tf
Откройте папку terraform-jenkins в своей любимой среде IDE. Теперь давайте начнем с заполнения нашего файла переменных и секретов.
Переменные и секреты
Откройте variables.tf и заполните его следующим кодом:
Теперь откройте secrets.tfvars
и заполните его следующим:
my_ip="0.0.0.0" // replace 0.0.0.0 with your IP address
Настройка Терраформ
Теперь, когда переменные и секреты созданы, мы можем начать работать над нашими модулями.
Шаг первый — создайте VPC
Откройте файл ./modules/vpc/main.tf
и заполните его следующим кодом:
Шаг второй — создайте интернет-шлюз и подключите его к VPC с помощью таблицы маршрутизации.
Теперь, когда VPC создан, нам нужно предоставить ему доступ к Интернету. Мы создадим интернет-шлюз и таблицу маршрутов. Внутри файла ./modules/vpc/main.tf
добавьте следующее:
Шаг третий — создайте общедоступную подсеть и свяжите ее с таблицей маршрутов.
Теперь, когда у нас есть таблица маршрутов и интернет-шлюз, у VPC есть доступ к Интернету. Теперь все, что нам нужно сделать, это создать нашу общедоступную подсеть и связать ее с нашей общедоступной таблицей маршрутов, чтобы она могла иметь доступ к Интернету. Внутри файла ./modules/vpc/main.tf
добавьте следующий код:
Вот и все с настройкой нашего VPC. Осталось сделать еще одну последнюю вещь — создать несколько выходных данных. Откройте файл./modules/vpc/outputs.tf
и добавьте следующий код:
Шаг четвертый. Создайте группу безопасности для экземпляра EC2.
Наш VPC настроен и настроен. Теперь давайте перейдем к группе безопасности для нашего экземпляра EC2. Откройте файл ./modules/security_group/main.tf
и добавьте следующий код:
Вот и все, что нужно для создания нашей группы безопасности, теперь давайте добавим вывод в наш файл ./modules/security_group/outputs.tf
:
Шаг пятый — создайте сценарий для автоматизации установки Jenkins на экземпляре EC2.
Прежде чем мы начнем работать с экземпляром EC2, давайте создадим скрипт bash, который мы собираемся использовать для автоматизации установки Jenkins. Мы собираемся прикрепить это к экземпляру EC2 в качестве пользовательских данных, которые будут выполняться во время создания экземпляра EC2. Откройте ./modules/compute/install_jenkins.sh
и добавьте следующий код:
Шаг шестой. Создайте экземпляр EC2 и прикрепите к нему эластичный IP-адрес и пару ключей.
Прежде чем мы углубимся в создание экземпляра EC2 и Elastic IP, давайте быстро создадим нашу пару ключей. Выполните следующую команду, чтобы создать пару ключей:
ssh-keygen -t rsa -b 4096 -m pem -f tutorial_kp && mv tutorial_kp.pub modules/compute/tutorial_kp.pub && mv tutorial_kp tutorial_kp.pem && chmod 400 tutorial_kp.pem
Сладкий. Теперь, когда пара ключей создана, давайте создадим экземпляр EC2 и Elastic IP. Откройте ./modules/compute/main.tf
и добавьте следующий код:
Мы почти закончили! Давайте создадим вывод в нашем ./modules/compute/outputs.tf
файле. Этот вывод выведет общедоступный IP-адрес нашего экземпляра EC2.
Шаг 7 — Убедитесь, что все работает
Давайте инициализируем наш проект terraform.
terraform init
Теперь давайте запустим наш проект terraform.
terraform apply -var-file="secrets.tfvars"
При появлении запроса введите: Да
В случае успеха вы должны увидеть что-то вроде этого:
Сладкий! Этот IP-адрес с надписью «jenkins_public_ip» является IP-адресом нашего сервера Jenkins. Давайте посмотрим, сможем ли мы подключиться по SSH к нашему экземпляру EC2.
ssh -i tutorial_kp.pem ubuntu@$(terraform output -raw jenkins_public_ip)
И мы внутри! Давайте проверим и посмотрим, был ли запущен наш скрипт пользовательских данных.
curl http://169.254.169.254/latest/user-data
И точно, это было! Теперь давайте посмотрим, сможем ли мы получить доступ к серверу Jenkins из нашего веб-браузера. Введите IP-адрес в адресную строку, а затем: 8080.
И вуаля, вот оно! Если вы хотите получить пароль администратора от экземпляра EC2, вернитесь к терминалу и выполните следующее:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Это даст вам пароль администратора для сервера Jenkins и позволит вам продолжить процесс установки.
Срывать
Чтобы убедиться, что AWS не взимает с вас ненужных платежей, выполните следующую команду:
terraform destroy -var-file="secrets.tfvars"
При появлении запроса введите: Да
Если у вас возникли какие-либо проблемы во время выполнения этого руководства, вы можете сравнить свой код с репозиторием GitHub здесь: https://github.com/dispact/terraform-jenkins.
Поздравляем!
Уууу, ты сделал это! Из этого руководства вы узнали, как использовать Terraform и усиленную инфраструктуру в качестве кода для создания сервера Jenkins на экземпляре EC2 внутри пользовательского VPC на AWS.