0Pricing
DevOps Bootcamp · Урок

Запрос данных с помощью источников данных

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

«Запрос данных с помощью источников данных» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Что такое источники данных?

В Terraform часто требуется обращаться к существующей инфраструктуре или внешним данным, которыми не управляет текущая конфигурация.

Именно для этого предназначены источники данных! Они позволяют конфигурации Terraform получать сведения о уже подготовленных ресурсах или внешних службах.

Источники данных и ресурсы

Важно различать источники данных и ресурсы.

  • Ресурсы определяют инфраструктуру, которую Terraform будет создавать, обновлять или удалять.
  • Источники данных только получают сведения о существующей инфраструктуре или данных. Они ничего не создают и не изменяют.

Представляйте их как запросы к инфраструктуре, доступные только для чтения.

Практические сценарии использования

Источники данных особенно полезны для следующих задач:

  • Поиск ID существующей виртуальной частной сети (VPC).
  • Получение последнего образа Amazon Machine Image (AMI) для экземпляра EC2.
  • Получение секретов из службы управления секретами.
  • Поиск записей DNS или сетевых конфигураций.

Они делают конфигурации более динамичными и уменьшают количество жёстко заданных значений.

Определение источника данных

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

data "aws_vpc" "selected" {
  filter {
    name   = "tag:Name"
    values = ["my-existing-vpc"]
  }
}

Использование полученных данных

После получения сведений источником данных его атрибуты становятся доступными другим частям конфигурации. Обращаться к ним можно с помощью синтаксиса: data.<TYPE>.<NAME>.<ATTRIBUTE>.

Например, чтобы получить ID выбранной VPC:

output "vpc_id" {
  value = data.aws_vpc.selected.id
}

Получение последнего AMI

Одна из распространённых задач — поиск последнего образа Amazon Machine Image (AMI) для экземпляра EC2. Это позволяет не задавать ID AMI жёстко и делает конфигурацию более надёжной.

Вот как получить последний AMI Amazon Linux 2:

provider "aws" {
  region = "us-east-1"
}

data "aws_ami" "amazon_linux_2" {
  most_recent = true
  owners      = ["amazon"]

  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
}

output "latest_ami_id" {
  value = data.aws_ami.amazon_linux_2.id
}

Динамический документ политики S3

Источники данных предназначены не только для облачных ресурсов. Источник данных aws_iam_policy_document помогает структурированно создавать сложные политики IAM.

Он не создаёт политику, а формирует документ JSON, который затем можно применить к такому ресурсу, как корзина S3.

provider "aws" {
  region = "us-east-1"
}

data "aws_iam_policy_document" "s3_read_only_policy" {
  statement {
    principals {
      type        = "AWS"
      identifiers = ["arn:aws:iam::123456789012:user/example-user"]
    }
    actions = [
      "s3:GetObject",
      "s3:ListBucket"
    ]
    resources = [
      "arn:aws:s3:::my-example-bucket",
      "arn:aws:s3:::my-example-bucket/*"
    ]
  }
}

output "policy_json" {
  value = data.aws_iam_policy_document.s3_read_only_policy.json
}

Уточнение поиска

Многие источники данных поддерживают блоки фильтров. Они позволяют задать критерии для сужения результатов и гарантировать получение нужного ресурса или данных.

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

data "aws_instance" "web" {
  instance_state_names = ["running"]
  filter {
    name   = "tag:Environment"
    values = ["production"]
  }
  filter {
    name   = "instance-type"
    values = ["t2.micro", "t3.micro"]
  }
}

Рекомендации по работе с источниками данных

Чтобы конфигурации оставались понятными и эффективными:

  • Будьте точны: используйте фильтры, чтобы получать именно нужные данные и избегать неоднозначности.
  • Идемпотентность: источники данных по своей природе идемпотентны, то есть многократный запуск даёт один и тот же результат.
  • Сокращайте количество обращений: получайте данные только при необходимости, чтобы ускорить операции terraform plan.
  • Сочетайте с выходными значениями: используйте выходные значения, чтобы предоставлять полученные данные другим конфигурациям или пользователям.

Тест по источникам данных

Какие из следующих утверждений об источниках данных Terraform являются TRUE?

Итоги: получение данных

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

Эта мощная возможность помогает создавать динамичные, гибкие и надёжные конфигурации: вместо жёстко заданных значений они адаптируются к текущему состоянию среды. Помните: источники данных только читают данные и никогда не создают и не изменяют их!

Часто задаваемые вопросы

Урок «Запрос данных с помощью источников данных» бесплатный?

Да — полный текст урока «Запрос данных с помощью источников данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Запрос данных с помощью источников данных»?

Используйте источники данных для получения информации о существующей инфраструктуре или внешних сервисах, создавая более динамичные и адаптивные конфигурации. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Запрос данных с помощью источников данных»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Запрос данных с помощью источников данных
  2. Провижионеры local и remote exec
  3. Ресурсы Null и триггеры
  4. Использование внешних данных и шаблонов
← Назад к DevOps Bootcamp