Skip to content
Merged
7 changes: 7 additions & 0 deletions .changelog/43722.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:bug
resource/aws_instance: Prevent destruction of resource when `disable_api_termination` is `true`
```

```release-note:enhancement
resource/aws_instance: Adds `force_destroy` argument that allows destruction even when `disable_api_termination` and `disable_api_stop` are `true`
```
15 changes: 10 additions & 5 deletions internal/service/ec2/ec2_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,11 @@ func resourceInstance() *schema.Resource {
return create.StringHashcode(buf.String())
},
},
names.AttrForceDestroy: {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"get_password_data": {
Type: schema.TypeBool,
Optional: true,
Expand Down Expand Up @@ -2232,12 +2237,12 @@ func resourceInstanceDelete(ctx context.Context, d *schema.ResourceData, meta an
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).EC2Client(ctx)

if err := disableInstanceAPITermination(ctx, conn, d.Id(), false); err != nil {
log.Printf("[WARN] attempting to terminate EC2 Instance (%s) despite error disabling API termination: %s", d.Id(), err)
}
if d.Get(names.AttrForceDestroy).(bool) {
if err := disableInstanceAPITermination(ctx, conn, d.Id(), false); err != nil {
log.Printf("[WARN] attempting to terminate EC2 Instance (%s) despite error disabling API termination: %s", d.Id(), err)
}

if v, ok := d.GetOk("disable_api_stop"); ok {
if err := disableInstanceAPIStop(ctx, conn, d.Id(), v.(bool)); err != nil {
if err := disableInstanceAPIStop(ctx, conn, d.Id(), false); err != nil {
log.Printf("[WARN] attempting to terminate EC2 Instance (%s) despite error disabling API stop: %s", d.Id(), err)
}
}
Expand Down
Loading
Loading