Рубрики
Uncategorized

Использование террафора, чтобы сделать мою многочисленную боковую проекты «забрать и играть»

Terraform — это технология инфраструктуры — как код, обеспечивающая способ описания облачной инфраструктуры … Помечено террафором, боковыми продуктами, дежопами, AWS.

Террафом Является ли технология инфраструктуры-как кода, обеспечивающая способ описания облачной инфраструктуры, таких как ведра AWS S3 и очереди SQS в качестве кодовых объектов и управление полным жизненным циклом этой инфраструктуры AWS программно. Это совсем недавно достигло этапы версии 1.0. Как Гит Обучение террафом непросто и использование террафора не весело, но это так очевидно, лучше, чем альтернатив, что он стал «безрезультатно» в моем специализирующемся инструкторе программного обеспечения. Мне пришлось выучить террафом для работы и широко использовать его, но я также сейчас также прилагаю усилия, чтобы использовать его с одного дня в любом боковом проекте, который работает в облаке.

Thundergolfer/Пример-Базель-Монорепо это публичный репозиторий, где у меня есть Инфраструктура/ Папка верхнего уровня со всеми террафом проекта, и есть хотя бы несколько частных репозиториев, где я делаю то же самое. Хотя некоторые могут иметь реакцию, что усилия, участвующие в письменном виде и поддержании террафора для нескольких боковых проектов, является излишним, целесообразное предложение Terraform действительно хорошо подходит для моих потребностей в боковых проектах.

Две наиболее важные преимущества террафора для боковых проектов являются декларативные спецификации ресурсов и их взаимосвязанные и их взаимосвязанные процессоры, а также быстрый рабочий процесс выношенности. Я разрабатываю побочные проекты в SPURTS и часто заняты остальной частью своей жизни, оставляя бокового проекта в одиночку месяцами. Если я настроил ресурсы AWS проекта в веб-интерфейсе веб-интерфейса, известный как «Нажмите OPS» Подход, а затем бросил проект некоторое время, я бы определенно был потерян по возвращении. Я должен был нажать на довольно неприятный веб-интерфейс веб-интерфейса AWS, ищет групп безопасности и политики безопасности S3, и главное, что я должен был понять, какие ресурсы отсутствовали, потому что они были слишком дороги, чтобы оставить вокруг ничего не делать. Почти все современные разработчики имеют опыт случайно ухода на дорогой экземпляр EC2, чтобы сидеть на холостом ходу. Без террафора я нахожу эту ситуацию гораздо более вероятно, произойдет. С Террафом, я могу быстро настроить скрипт, который может удалить и воссоздать настроить всю облачную инфраструктуру проекта около 10 минут, по существу никаких усилий. Такой скрипт используется так:

# Destroy all expensive AWS resources.
# Takes ~10 minutes because some resource, such as EKS clusters, are slow to delete.
./scripts/cloud.sh down
# Recreate the project's infrastructure
# Takes ~10 minutes because some resources, such as EKS clusters or ALBs, are slow to create.
./scripts/cloud.sh up

На выходных я могу использовать этот вид сценария в нескольких боковых проектах, вращающихся вверх и вращающихся дорогих ресурсов, таких как кластеры EKS, балансировщики нагрузки на приложение, Apache Spark Clusters и VMS с поддержкой GPU.

Это экономит деньги, но даже лучше сохраняет черт возьми, и трудится, которые будут вовлечены, если у меня не было установки Terraform и вместо этого пришлось «щелкнуть OPS» через инфраструктуру.

Чтобы дать правильное тестирование моего утверждения о том, что в инвестициях в результате выкидывающихся линейных инвестиций в Террафору окупается, я вернулся в частное репо, которое я не тронул более шести месяцев, И пошли о вращании кластера Kubernetes и отправляя одно из приложений репо в кластер для выполнения. У него нет скрипта с Cloud.sh вниз или Cloud.sh вверх доступны, но используя инструкции Readme, я записал путь назад, а затем территория Я смог раскрутить кластер и запустить приложение чуть более 20 минут, и 13 минут этого просто ждали AWS для создания ресурсов. 🏎

Вот спущенный ~ 22 минуты, с 16:21 до 16:43 вечера. Для некоторого контекста этот побочный проект обеспокоен получать практические возможности с различными системами пакетно-трубопровода или рабочих процессов, используемых в данной технике (думайте, что Spotify’s Luigi, Flyte, Apache Airflow, Kedro и т. Д.).

Начните ⏱ ~ 4:21 вечера

# 4:21PM - Begin
$ cd infrastructure/aws/k8s && terragrunt apply
...
aws_eks_cluster.demo: Still creating... [10s elapsed]
aws_eks_cluster.demo: Still creating... [20s elapsed]
...
# Go get a ☕️
aws_eks_cluster.demo: Still creating... [4m10s elapsed]
...
# Finished! ✅
$ export REGION="us-east-2" && export CLUSTER_NAME="foobar-demo-cluster" && aws eks --region "${REGION}" update-kubeconfig --name ${CLUSTER_NAME}
# 4:34 - Test cluster access
$ kubectl get nodes
NAME                                      STATUS   ROLES    AGE     VERSION
ip-10-0-0-65.us-east-2.compute.internal   Ready       4m34s   v1.18.9-eks-d1db3c

13 минут спустя … ⏱ ~ 16:35 вечера

Мне пришлось немного ждать AWS, но теперь кластер активен. Давайте установим некоторые основные функциональные возможности кластера:

# 4:35PM
# Apply some YAMl
kubectl apply -f dashboard/
kubectl apply -f metrics-server/
# Now let's spin up Luigi, a batch pipeline management system
$ cd (git rev-parse --show-toplevel) && cd workflows_and_pipelines/luigi
$ kubectl apply -f k8s-objects/
# Done. Now let's create a cronjob that runs a basic Luigi pipeline every 15 mins
$ cd k8s-objects/workflow_cronjobs/
$ kubectl apply -f hello_luigi.yaml
$ kubectl create job --from=cronjob/hello-luigi-wf adhoc-run
# Check that it's all been created

YAML приложен ⏱ ~ 16:41

Сладкий, теперь я запустил трубопровод Luigi в кластере свежих кубератусов. (Я провел некоторое время, прочитал заметки в моих readmes, чтобы проверить, что все правильно сделаю, поэтому есть разрыв во времени между командами)

# 4:41PM
$ kubectl get pods
NAME                      READY   STATUS      RESTARTS   AGE
adhoc-run-kc2tp           0/1     Completed   0          7s
luigid-5689dfd84d-tl7dt   1/1     Running     0          2m4s
$ kubectl logs adhoc-run-kc2tp
DEBUG: Checking if demo.HelloWorldTask(foo=249) is complete
/tmp/Bazel.runfiles_w_tfrz7e/runfiles/pypi/pypi__luigi/luigi/worker.py:409: UserWarning: Task demo.HelloWorldTask(foo=249) without outputs has no custom complete() method
  is_complete = task.complete()
INFO: Informed scheduler that task   demo.HelloWorldTask_249_fab3ce8be8   has status   PENDING
INFO: Done scheduling tasks
INFO: Running Worker with 1 processes
DEBUG: Asking scheduler for work...
DEBUG: Pending tasks: 1
INFO: [pid 7] Worker Worker(salt=264513973, workers=1, host=adhoc-run-kc2tp, username=root, pid=7) running   demo.HelloWorldTask(foo=249)
INFO: [pid 7] Worker Worker(salt=264513973, workers=1, host=adhoc-run-kc2tp, username=root, pid=7) done      demo.HelloWorldTask(foo=249)
DEBUG: 1 running tasks, waiting for next task to finish
INFO: Informed scheduler that task   demo.HelloWorldTask_249_fab3ce8be8   has status   DONE
DEBUG: Asking scheduler for work...
DEBUG: Done
DEBUG: There are no more tasks to run at this time
INFO: Worker Worker(salt=264513973, workers=1, host=adhoc-run-kc2tp, username=root, pid=7) was stopped. Shutting down Keep-Alive thread
INFO:
===== Luigi Execution Summary =====

Scheduled 1 tasks of which:
* 1 ran successfully:
    - 1 demo.HelloWorldTask(foo=249)

This progress looks :) because there were no failed tasks or missing dependencies

===== Luigi Execution Summary =====

HelloWorldTask says: Hello world!
foo equals 249

Сделано ⏱ ~ 4:43 вечера

Итак, чтобы получить сумму, я пошел от того, что у меня ничего не настроил в AWS, чтобы иметь кластер Kubernetes с основными метриками и приборной панелью, правильным IAM-связанным ServieSeacount Поддержка плавного опыта IAM в K8S и Луиджи Развернуто, чтобы я мог запустить рабочий процесс Luigi, используя Ad-Hoc Run of A Cronjob. . Это вполне замечательно для меня. Все это заняло Часы Чтобы выяснить и определить, когда я впервые сделал это, более шести месяцев назад.

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

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

$ terragrunt destroy
...
...
Plan: 0 to add, 0 to change, 19 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes
# --- WAIT FOR AWS TO TEAR DOWN ---
# Done! 💯

Дополнять вашу террафору с хорошими нотами

Террафом не может захватить все О вашей настройке окружающей среды, поэтому я стремлюсь записать любые нетривиальные детали, либо в комментариях вокруг террафора или в readmes.

Вот несколько примеров:

# These values are a real pain to get at the moment. Hopefully Terraform makes it easier in future.
# https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc_verify-thumbprint.html
thumbprint_list = [
  # ⚠️ This value *might* need to be updated whenever cluster is destroyed and recreated.
  # ⚠️ Any IAM Roles using the OIDC outputs do need to be updated.
  # ⚠️ See README.md in this folder.
  "9988776655aabbcc0b539foobar6bb7f3b02e22da2b1122334455aabbcc"
] 

И в этом Readme.md У меня есть:

⚠️ **NOTE:** Setting this up is a pain, but worth it. IAM-linked ServiceAccounts are much nicer to use than having the cluster role do _everything_
              or have the cluster role-assume into other roles.

**Setup:**           

1. `aws eks describe-cluster --name workflows-and-pipelines-demo-cluster --query "cluster.identity.oidc.issuer" --output text`

2. Follow the "AWS Management Console" instructions here: https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html

Через шесть месяцев очень легко заблудиться в своей собственной работе и хочется рвать волосы. Идея состоит в том, что эти комментарии для меня правильно, когда я ударил «подожди, что дальше?» момент или «а?» момент и нуждается в руководстве.

Убежденный?

После осуществления этой системы в одной из моих боковых проектов, я, безусловно, убежден. KUBERNETES — это 500 фунтов гориллы системы, я является регулярной головной болью, а Луиджи Spotify достаточно сложна, но примерно за 20 минут я смог получить все это настроить до такой степени, что я мог бы запустить какой-то базовый код, который я написал полгода и полдюжины боковых проектов назад. Я действительно думаю, что это не мозговой с точки зрения обслуживания по боковым проектам и управлению затратами.

Первоначально опубликовано: https://thundergolfer.com/devops/side-projects/software-engineering/2021/02/24/using-terraform-in-sside-projects/

Оригинал: «https://dev.to/thundergolfer/using-terraform-to-make-my-many-side-projects-pick-up-and-play-aca»