Обычно в провайдерах Terraform есть два типа источников данных: единичные и множественные, такие как aws_ami
против aws_ami_ids
, причем множественное число обычно просто возвращает списокидентификаторов ресурсов и единственного, предлагающего больше информации о каждом конкретном ресурсе.
К сожалению, поставщик AWS еще не реализовал множественный источник данных для томов EBS, поэтому вы ограничены только единичным aws_ebs_volume
источник данных и не может просто динамически возвращать все тома EBS, соответствующие некоторым критериям (например, это GP2).
В качестве кратковременного исправления, и если вы действительно хотите использовать Terraform для управления созданиемснимки напрямую, вы можете использовать внешний источник данных , чтобы получить список томов EBS за пределами Terraform.
Быстрый пример этого может выглядеть примерно так (не проверено):
data "external" "all_gp2_ebs_volumes" {
# Should run something like:
# `aws ec2 describe-volumes --query 'Volumes[].VolumeId' --filters Name=volume-type,Values=gp2`
# but return the result in a way that the data source needs it.
program = ["python", "${path.module}/get-all-gp2-ebs-volumes.py"]
}
resource "aws_ebs_snapshot" "ebs_snapshot" {
count = "${length(data.external.all_gp2_ebs_volumes.result.ids)}
volume_id = "${data.external.all_gp2_ebs_volumes.result.ids[count.index]}"
}
Если ограничение на 2 часа для AWS DLM или AWS Backup не является для вас настоящим препятствиемПо какой-то причине я бы использовал их.Уже есть aws_dlm_lifecycle_policy
ресурс для настройки этого через Terraform, а затем эта проблема отслеживает создание необходимых ресурсов резервного копирования AWS.
Другой вариант будетвызвать запрос функции в трекере проблем для источника данных aws_ebs_volume_ids
(я не смог найти существующий запрос функции из быстрого просмотра).