В этом руководстве мы будем использовать Terraform для предоставления сервера Jenkins в AWS.

Фон

Сценарий

Ваша команда использовала сервер Jenkins локально для конвейера CI/CD и теперь хочет перенести его в облако. Вам было поручено настроить сервер Jenkins на AWS.

Требования

  • Сервер Jenkins должен быть развернут на экземпляре EC2.
  • Экземпляр EC2 должен быть доступен через Интернет через порт 8080.
  • Только вы должны иметь доступ к экземпляру EC2 через SSH.
  • Используйте Terraform для инфраструктуры в качестве кода

Как мы выполним эту задачу с помощью Terraform?

  1. Создайте сеть VPC
  2. Создайте интернет-шлюз и подключите его к VPC с помощью таблицы маршрутизации.
  3. Создайте общедоступную подсеть и свяжите ее с таблицей маршрутов.
  4. Создайте группу безопасности для экземпляра EC2
  5. Создайте сценарий для автоматизации установки Jenkins в экземпляре EC2.
  6. Создайте экземпляр EC2 и прикрепите к нему эластичный IP-адрес и пару ключей.
  7. Убедитесь, что все работает

Предпосылки

Настройка каталога проекта

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

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.