diff --git a/builtin/providers/aws/resource_aws_ami.go b/builtin/providers/aws/resource_aws_ami.go index 621881036e..8b727e105f 100644 --- a/builtin/providers/aws/resource_aws_ami.go +++ b/builtin/providers/aws/resource_aws_ami.go @@ -174,13 +174,16 @@ func resourceAwsAmiRead(d *schema.ResourceData, meta interface{}) error { "delete_on_termination": *blockDev.Ebs.DeleteOnTermination, "encrypted": *blockDev.Ebs.Encrypted, "iops": 0, - "snapshot_id": *blockDev.Ebs.SnapshotId, "volume_size": int(*blockDev.Ebs.VolumeSize), "volume_type": *blockDev.Ebs.VolumeType, } if blockDev.Ebs.Iops != nil { ebsBlockDev["iops"] = int(*blockDev.Ebs.Iops) } + // The snapshot ID might not be set. + if blockDev.Ebs.SnapshotId != nil { + ebsBlockDev["snapshot_id"] = *blockDev.Ebs.SnapshotId + } ebsBlockDevs = append(ebsBlockDevs, ebsBlockDev) } else { ephemeralBlockDevs = append(ephemeralBlockDevs, map[string]interface{}{ diff --git a/builtin/providers/aws/resource_aws_ami_copy_test.go b/builtin/providers/aws/resource_aws_ami_copy_test.go index 029e9a5abd..0a64526d67 100644 --- a/builtin/providers/aws/resource_aws_ami_copy_test.go +++ b/builtin/providers/aws/resource_aws_ami_copy_test.go @@ -61,6 +61,9 @@ func TestAccAWSAMICopy(t *testing.T) { } for _, bdm := range image.BlockDeviceMappings { + // The snapshot ID might not be set, + // even for a block device that is an + // EBS volume. if bdm.Ebs != nil && bdm.Ebs.SnapshotId != nil { snapshots = append(snapshots, *bdm.Ebs.SnapshotId) }