Запрос данных с помощью источников данных
Используйте источники данных для получения информации о существующей инфраструктуре или внешних сервисах, создавая более динамичные и адаптивные конфигурации.
«Запрос данных с помощью источников данных» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Запрос данных с помощью источников данных
- Провижионеры local и remote exec
- Ресурсы Null и триггеры
- Использование внешних данных и шаблонов