Hi,
iterating on local data struct (map of objects):
locals {
dr_ec2_instances = {
"bastionaws1" = {
"instance_id_orig" = "i-00000000000000001"
"ami_virtualization_type" = "hvm"
"ami_architecture" = "x86_64"
"ami_ena_support" = true
"ami_rbd_device_name" = "/dev/sda1"
}
"bastionaws2" = {
"instance_id_orig" = "i-00000000000000002"
"ami_virtualization_type" = "hvm"
"ami_architecture" = "x86_64"
"ami_ena_support" = false
"ami_rbd_device_name" = "/dev/sdb1"
}
}
}
data "aws_ebs_snapshot" "dr_snap" {
for_each = {
for key, val in local.dr_ec2_instances:
key => val
if var.dr_env
}
provider = aws.alias
most_recent = true
owners = ["self"]
filter {
name = "status"
values = ["completed"]
}
filter {
name = "tag:Name"
values = ["rbd_${each.key}*"]
}
}
I extract snapshot map of objects like this
(data.aws_ebs_snapshot.dr_snap) = {
"bastionaws1" = {
...
"id" = "snap-0000000000000000a"
"most_recent" = true
"snapshot_id" = "snap-0000000000000000a"
"state" = "completed"
"tags" = tomap({
...
})
"volume_size" = 8
}
"bastionaws2" = {
...
"id" = "snap-0000000000000000b"
"most_recent" = true
"snapshot_id" = "snap-0000000000000000b"
"state" = "completed"
"tags" = tomap({
...
})
"volume_size" = 8
}
}
Iterating on snap map of objects I can create base AMI from which to create ec2
resource "aws_ami" "dr" {
for_each = {
for key, val in data.aws_ebs_snapshot.dr_snap:
key => val
if var.dr_env
}
provider = aws.alias
name = "DR Site instance AMI (${each.key})"
description = each.value.description
virtualization_type = "hvm"
architecture = "x86_64"
ena_support = true
root_device_name = "/dev/sda1"
tags = {
...
}
ebs_block_device {
device_name = "/dev/sda1"
volume_type = "gp3"
iops = 3000
throughput = 125
snapshot_id = data.aws_ebs_snapshot.dr_snap[each.key].id
delete_on_termination = true
}
}
I can’t find a method to add key/value to (data.aws_ebs_snapshot.dr_snap) to customize ami instead of using static data like: virtualization_type
, architecture
, ena_support
, etc.
e.g. merge dr_ec2_instances
with (data.aws_ebs_snapshot.dr_snap)
using this new data struct in for_each loop in resource "aws_ami" "dr"
.
Static data impose to divide and repeat the process for omogeneous groups of destination AMI.