Террафом Является ли технология инфраструктуры-как кода, обеспечивающая способ описания облачной инфраструктуры, таких как ведра 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 Ready4m34s 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»