В этой статье мы будем изучать инфраструктуру как код, подходы, преимущества, а затем узнаем основы Terraform Понимая некоторые из его оснований и полезных команд.
Мы также создадим базовый проект Terraform и предоставим некоторые ресурсы!
Что такое инфраструктура в качестве кода?
Инфраструктура как код (IAC) может быть определена как управление и обеспечение инфраструктуры посредством кода, а не через ручные процессы, такие как обеспечивающие ресурсы через AWS, консоль GCP и т. Д.
Подходы
Существует два подхода к инфраструктуре как код (IAC):
- Императив
С этим подходом мы определяем нашу желаемую конфигурацию как последовательность команд, выполненных в определенном порядке.
Например, используя сценарий Bash с использованием AWS CLI предоставить наши ресурсы.
- Декларативный
Декларативный подход определяет желаемое состояние системы, в том числе какие ресурсы вам нужны и любые свойства, которые они должны иметь.
Например, AWS CloudFormation , Terraform , Ansible , так далее.
Преимущества
Вот некоторые преимущества использования инфраструктуры в качестве кода (IAC):
- Последовательность
Цель IAC — устранить ручные процессы, которые помогают нам быстрее выполнять при этом согласованность в качестве нашей инфраструктуры развивается
- Простота
IAC позволяет нам раскрутить всю архитектуру инфраструктуры, выполняя несколько сценариев. Мы можем в значительной степени предоставить не только разработку, но и для постановки, производственных сред, что делает наш жизненный цикл разработки программного обеспечения (SDLC) намного проще.
- Повышенная эффективность
IAC сменяет власть обратно в руку разработчика. Поскольку обеспечение становится более надежным и автоматизированным, инженеры тратят меньше времени на выполнение ручной работы и больше времени выполнения более высоких задач.
- Минимизация риска
Представьте, что у вас есть инженер DevOps, который является единственным, кто знает вашу настройку инфраструктуры и ее входы. А теперь представьте, что инженер покидает вашу компанию.
Здесь IAC идеально подходит, потому что, поскольку новый инженер находится на борту, им не нужно тратить много времени на понимание того, как обеспечивается наша инфраструктура.
Что такое терраформ?
Ссылка: Terraform Docs
Terraform — это инфраструктура в качестве инструмента кода (IAC), который позволяет нам безопасно и эффективно создавать, изменять и версировать инфраструктуру.
Terraform использует язык Hashicorp (HCL) в качестве языка для определения ресурса независимо от использования поставщика.
Основы
Давайте посмотрим на некоторые основы и строительные блоки основного проекта Terraform.
Состояние
Terraform должен хранить утверждение о нашей инфраструктуре и конфигурации. Это состояние используется Terraform для сопоставления наших ресурсов с нашей конфигурацией и отслеживания метаданных.
Terraform также предоставляет множество вариантов того, как мы хотим хранить наш штат. Например, если мы работаем с несколькими людьми в команде, мы можем хранить наш штат в чем -то вроде AWS S3 или Consul, а не хранение на местном уровне
Провайдер
Поставщики — это в основном плагины, которые Terraform использует для взаимодействия с облачными поставщиками, такими как AWS, GCP, Azure и т. Д. Terraform имеет тонны поставщиков практически для любых потребностей в инфраструктуре, и его можно найти в реестр терраформ
Пример:
# AWS provider "aws" { region = "us-east-1" } # Google Cloud provider "google" { project = "example" region = "us-west1" }
Ресурс
Блоки ресурсов могут описать любой объект инфраструктуры, такой как вычислительный, сеть или любой компонент более высокого уровня
Пример:
resource "aws_apprunner_service" "some_name" { tags = { Name = "example-apprunner-service" } }
Источники данных
В то время как ресурс используется для управления новым компонентом инфраструктуры. Источники данных дают нам представление только для чтения в ранее существовавших ресурсах в нашей инфраструктуре, которые могли или не могли быть предоставлены самой терраформой.
Пример:
data "aws_ebs_volume" "ebs_volume" { most_recent = true filter { name = "volume-type" values = ["gp2"] } }
Модули
Модули Terraform — это контейнеры для нескольких ресурсов, которые используются вместе.
Представьте, что вы хотите предоставить Eks кластер Но, как мы знаем, это не так просто, как определение ресурса EKS, нам также понадобится VPC, подсети и список.
Таким образом, модули становятся хорошим способом организации вашей инфраструктуры, например, мы можем просто определить наши конкретные ресурсы EKS в модуле EKS!
Пример:
module "eks" { vpc = "..." instances = 10 }
Но подождите, еще не все!
Есть множество модулей и ресурсов, присутствующих на Реестр терраформ Таким образом, мы, вероятно, можем найти модуль, который соответствует нашим потребностям. Такие как готовые к использованию Модуль EKS
Вы также можете опубликовать свой собственный модуль, чтобы Реестр терраформ !
Функции
Terraform поставляется с тоннами функций из струнных функций, таких как Присоединяйтесь
, формат
Функции файловой системы.
Переменные
Переменные могут служить вводом для ресурсов, источников данных, модулей, функций и т. Д., А также помочь нам лучше организовать общую конфигурацию.
Пример:
variable "bucket_name" { type = string default = "example-value" }
Или же временная локальная переменная
Пример:
locals { random = "hello" }
Выход
Выход в терраформе помогает нам определить результаты, которые мы ожидаем, когда работает наш сценарий терраформ.
Пример:
output "service_endpoint" { value = aws_apprunner_service.service.domain_name }
Команды
Вот несколько важных команд Terraform, которые мы будем использовать:
Init Подготовьте и инициализируйте наш проект
План Показывает изменения, которые будут сделаны путем изменения конфигурации
Применить Применяет наши изменения
Уничтожить Разрушает все ресурсы в нашей конфигурации
Монтаж
Терраформ
Terraform CLI может быть установлен из здесь
Примечание: Hashicorp также предоставляет Terraform Docker Image , Если вам не нравится устанавливать дополнительные зависимости
AWS Access
Нам также нужен программный доступ и AWS CLI, настроенный с нашим AWS_ACCESS_KEY_ID
и AWS_SECRET_ACCESS_KEY
.
Вы можете обратиться к моей предыдущей статье, где я подробно рассказываю об установке AWS CLI
Настройка AWS CLI
Каран Пратап Сингх ・ 11 августа ・ 3 минуты прочитал
Руки вверх!
Достаточно теории, теперь давайте на самом деле используем то, что мы узнали, и что -то предоставим. Чтобы все было простым, мы будем обеспечивать ведро S3 на AWS
Я создаю Terraform
каталог с main.tf
файл.
$ mkdir terraform $ touch main.tf
Давайте определим нашего поставщика AWS в нашем предпочтительном регионе
provider "aws" { region = "us-east-1" }
Создайте переменную для нашего имени ведра.
Примечание. Убедитесь, что имя ведра уникально
variable "bucket_name" { type = string default = "sample-bucket" }
Определите наш aws_s3_bucket
ресурс
resource "aws_s3_bucket" "deploy_bucket" { bucket = var.bucket_name acl = "private" }
Добавьте немного вывода
output "s3_bucket_arn" { value = aws_s3_bucket.s3_bucket.arn }
Давайте инициализируем наш проект
Отлично, наш проект был инициализирован. Давайте спланируем наши изменения
$ terraform plan
Все кажется хорошим, давайте применим
$ terraform apply
Наконец, давайте очистим наши ресурсы
$ terraform destroy
Вывод
В этой статье мы рассмотрели инфраструктуру как код, ее подходы, преимущества наряду с Terraform. Я надеюсь, что это было полезно и, как всегда, не стесняйтесь протянуть руку Твиттер Если вы столкнетесь с какими -либо проблемами!
Оригинал: «https://dev.to/karanpratapsingh/introduction-to-infrastructure-as-code-with-terraform-4f29»