100% D.
aws_instance.example.ebs_block_device.*.volume_id and aws_instance.example.ebs_block_device[*].volume_id are equivalent and will both refer to the volume_id field for all of the EBS block devices that are attached to the aws_instance resource with the name example.
The * syntax is known as the "splat" operator and can be used to indicate that the preceding attribute should be repeated for each element in a list. It can be used with both the . and [] notation.
For example, suppose you have an aws_instance resource named example that has two EBS block devices attached to it, with volume_id values of vol-12345678 and vol-87654321. You could use the * operator like this:
aws_instance.example.ebs_block_device.*.volume_id
# This will evaluate to ["vol-12345678", "vol-87654321"]
aws_instance.example.ebs_block_device[*].volume_id
# This will also evaluate to ["vol-12345678", "vol-87654321"]
In both cases, the volume_id field is being accessed for each element in the ebs_block_device list, and the resulting value is a list of the volume_id values for each element.
A is almost right and better and more modern if there is no extra dot
You can add an output and validate each of the expressions:
output "ebs-volume-ids" {
value = aws_instance.example.ebs_block_device["sda2"].volume_id
}
All of them are invalid expression
Based on this https://developer.hashicorp.com/terraform/language/expressions/references
The arguments of the ebs_block_device nested blocks can be accessed using a splat expression. For example, to obtain a list of all of the device_name values, use aws_instance.example.ebs_block_device[*].device_name.
D. aws_instance.example.ebs_block_device.*.volume_id
To reference the Volume IDs associated with the ebs_block_device blocks in the given aws_instance resource, you can use the .* syntax to reference all elements of the list. The ebs_block_device blocks are represented as a list in the aws_instance resource, and each block has a volume_id attribute that you can reference.
Answer is D
> aws_instance.example.ebs_block_device.*.volume_id
tolist([
"vol-123457",
"vol-43437834743348",
])
> aws_instance.example.ebs_block_device.[*].volume_id
â•·
│ Error: Invalid attribute name
│
│ on <console-input> line 1:
│ (source code not available)
│
│ An attribute name is required after a dot.
╵
resource "aws_instance" "example" {
ami = "ami-0f15e0a4c8d3ee5fe"
instance_type = "t2.micro"
ebs_block_device {
device_name = "/dev/sda1"
volume_size = "16"
}
ebs_block_device {
device_name = "/dev/sda2"
volume_size = "20"
}
}
output "device-list" {
value = aws_instance.example.ebs_block_device[*].volume_id
}
A as written fails. A without the period after device works
│ 24: value = aws_instance.example.ebs_block_device.[*].volume_id
│ An attribute name is required after a dot.
B fails
│ 24: value = aws_instance.example.ebs_block_device.volume_id
│ Block type "ebs_block_device" is represented by a set of objects, and set elements do not have addressable keys. To find elements matching
C fails (even though there is a closing bracket)
│ 24: value = aws_instance.example.ebs_block_device[sda2,sda3].volume_id
│ The index operator must end with a closing bracket ("]").
D works as written
A voting comment increases the vote count for the chosen answer by one.
Upvoting a comment with a selected answer will also increase the vote count towards that answer by one.
So if you see a comment that you already agree with, you can upvote it instead of posting a new comment.
KJ_Rollings
Highly Voted 1Â year, 6Â months agofedeX
Highly Voted 1Â year, 10Â months agokennywuu
Most Recent 10Â months, 3Â weeks agoTigerInTheCloud
11Â months, 1Â week agoTigerInTheCloud
11Â months, 1Â week agoTyler2023
1Â year agoMauroSoli
1Â year, 1Â month agoamehim
1Â year, 1Â month agovj_dhaksh
1Â year, 5Â months agoNunyabiznes
1Â year, 8Â months agolordoftheringsnewavatar
1Â year, 8Â months agoalexsandroe
1Â year, 9Â months agoawsguys
1Â year, 9Â months agogekkehenk
1Â year, 10Â months agoresnef
1Â year, 10Â months agoAB7088
1Â year, 11Â months agoBaburTurk
1Â year, 11Â months agosecdaddy
1Â year, 11Â months ago