簡體   English   中英

使用Terraform和count()創建EBS快照

[英]Create EBS snapshot using Terraform and count()

我想為所有gp2類型的EBS卷創建快照。 我有以下代碼:

data "aws_ebs_volume" "ebs_volumes" {
  filter {
    name   = "volume-type"
    values = ["gp2"]
  }
}

resource "aws_ebs_snapshot" "ebs_snapshot" {
  count = "${length(data.aws_ebs_volume.ebs_volumes.ids)}"
  volume_id = "${element(data.ebs_volume.ebs_volumes.ids, count.index)}"
}

相反,我得到了以下錯誤:

terraform plan

Error: resource 'aws_ebs_snapshot.ebs_snapshot' config: unknown resource 'data.ebs_volume.ebs_volumes' referenced in variable data.ebs_volume.ebs_volumes.ids

由於我使用的是數據源,因此列表按data.aws_ebs_volume返回是動態的-不是靜態variable使用Terraform創建多個EBS卷的快照中所述

使用terraform show

data.aws_ebs_volume.ebs_volumes:
  id = vol-00b3eaaf04b9377cb
  arn = arn:aws:ec2:us-east-1:ACCOUNT_ID:volume/vol-00b3eaaf04b9377cb
  availability_zone = us-east-1c
  encrypted = false
  filter.# = 1
  filter.3737401200.name = volume-type
  filter.3737401200.values.# = 1
  filter.3737401200.values.0 = gp2
  iops = 100
  kms_key_id =
  most_recent = false
  size = 8
  snapshot_id = snap-01d81204beb02804b
  tags.% = 0
  volume_id = vol-00b3eaaf04b9377cb
  volume_type = gp2

Terraform提供程序中通常有兩種類型的數據源,單數形式和復數形式,例如aws_amiaws_ami_ids ,其中復數形式通常僅返回資源ID的列表,而單數形式則提供有關每個特定資源的更多信息。

不幸的是,AWS提供程序尚未為EBS卷實現多個數據源,因此您僅限於單個aws_ebs_volume數據源 ,並且不能僅動態返回符合某些條件的所有EBS卷(例如它們為GP2)。

作為短期修復,如果您確實要使用Terraform直接管理創建快照,則可以使用外部數據源來獲取Terraform之外的EBS卷的列表。

一個簡單的例子可能看起來像這樣(未經測試):

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]}"
}

除非出於某種原因對您的AWS DLMAWS Backup的2小時限制是真正的阻止者,否則我將使用這些限制。 已經有aws_dlm_lifecycle_policy資源可通過Terraform進行配置,然后此問題將跟蹤必要的AWS Backup資源的創建。

另一種替代方法是在問題跟蹤器上針對aws_ebs_volume_ids數據源提出功能請求(我無法通過快速查找找到現有的功能請求)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM