# Configuring deletion protection

To prevent accidental deletion of a network load balancer, [enable deletion protection for it](#enable-deletion-protection).

You can [disable](#disable-deletion-protection) protection when you no longer need it.

## Enabling deletion protection {#enable-deletion-protection}

{% note warning %}

Even with balancer deletion protection enabled, one can still delete its listeners and target groups.

{% endnote %}

{% list tabs %}

- Management console {#console}

    1. In the [management console](https://console.yandex.cloud), select **Network Load Balancer**.
    1. To the right of your load balancer name, click ![horizontal-ellipsis](../../_assets/horizontal-ellipsis.svg) and select **Edit**.
    1. Enable the **Deletion protection** setting.
    1. Click **Save**.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    1. See the description of the CLI command for updating balancer attributes:

        ```bash
        yc load-balancer network-load-balancer update --help
        ```

    1. Enable deletion protection:

        ```bash
        yc load-balancer network-load-balancer update <load_balancer_name_or_ID> \
            --deletion-protection
        ```

        You can get the load balancer ID and name with the [list of network load balancers in the folder](load-balancer-list.md#list).

- Terraform {#tf}

    With [Terraform](https://www.terraform.io/), you can quickly create a cloud infrastructure in Yandex Cloud and manage it using configuration files. These files store the infrastructure description written in HashiCorp Configuration Language (HCL). If you change the configuration files, Terraform automatically detects which part of your configuration is already deployed, and what should be added or removed.
    
    Terraform is distributed under the [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE). The [Yandex Cloud provider for Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) is distributed under the [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) license.
    
    For more information about the provider resources, see the relevant documentation on the [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) website or [its mirror](../../terraform/index.md).

    If you do not have Terraform yet, [install it and configure the Yandex Cloud provider](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
    
    
    To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), [authenticate](../../terraform/authentication.md) using the appropriate method.

    1. Open the current configuration file describing the infrastructure.

    1. Add the `deletion_protection` parameter to the load balancer description:


       ```hcl
       resource "yandex_lb_network_load_balancer" "foo" {
         ...
         deletion_protection = true
         ...
       }
       ```

    1. Make sure the settings are correct.

       1. In the command line, navigate to the directory that contains the current Terraform configuration files defining the infrastructure.
       1. Run this command:
       
          ```bash
          terraform validate
          ```
       
          Terraform will show any errors found in your configuration files.

    1. Apply the changes.

       1. Run this command to view the planned changes:
       
          ```bash
          terraform plan
          ```
       
          If you described the configuration correctly, the terminal will display a list of the resources to update and their parameters. This is a verification step that does not apply changes to your resources.
       
       1. If everything looks correct, apply the changes:
          1. Run this command:
       
             ```bash
             terraform apply
             ```
       
          1. Confirm updating the resources.
          1. Wait for the operation to complete.

- API {#api}

    To enable deletion protection, use the [update](../api-ref/NetworkLoadBalancer/update.md) REST API method for the [NetworkLoadBalancer](../api-ref/NetworkLoadBalancer/index.md) resource or the [NetworkLoadBalancerService/Update](../api-ref/grpc/NetworkLoadBalancer/update.md) gRPC API call and provide the following in the request:

    * Name of the `deletionProtection` parameter in the `updateMask` parameter.
    * `true` in the `deletionProtection` parameter.

    {% note warning %}
    
    The API method will assign default values to all the parameters of the object you are modifying unless you explicitly provide them in your request. To avoid this, list the settings you want to change in the `updateMask` parameter as a single comma-separated string.
    
    {% endnote %}

{% endlist %}

## Disable deletion protection {#disable-deletion-protection}

{% list tabs %}

- Management console {#console}

    1. In the [management console](https://console.yandex.cloud), select **Network Load Balancer**.
    1. To the right of your load balancer name, click ![horizontal-ellipsis](../../_assets/horizontal-ellipsis.svg) and select **Edit**.
    1. Disable the **Deletion protection** setting.
    1. Click **Save**.

- CLI {#cli}

    If you do not have the Yandex Cloud CLI yet, [install and initialize it](../../cli/quickstart.md#install).

    The folder used by default is the one specified when [creating](../../cli/operations/profile/profile-create.md) the CLI profile. To change the default folder, use the `yc config set folder-id <folder_ID>` command. You can also specify a different folder for any command using `--folder-name` or `--folder-id`. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.

    1. See the description of the CLI command for updating balancer attributes:

        ```bash
        yc load-balancer network-load-balancer update --help
        ```

    1. Disable deletion protection:

        ```bash
        yc load-balancer network-load-balancer update <load_balancer_name_or_ID> \
            --deletion-protection=false
        ```

        You can get the load balancer ID and name with the [list of network load balancers in the folder](load-balancer-list.md#list).

- Terraform {#tf}

    With [Terraform](https://www.terraform.io/), you can quickly create a cloud infrastructure in Yandex Cloud and manage it using configuration files. These files store the infrastructure description written in HashiCorp Configuration Language (HCL). If you change the configuration files, Terraform automatically detects which part of your configuration is already deployed, and what should be added or removed.
    
    Terraform is distributed under the [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE). The [Yandex Cloud provider for Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) is distributed under the [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/) license.
    
    For more information about the provider resources, see the relevant documentation on the [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) website or [its mirror](../../terraform/index.md).

    If you do not have Terraform yet, [install it and configure the Yandex Cloud provider](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
    
    
    To manage infrastructure using Terraform under a service account or user accounts (a Yandex account, a federated account, or a local user), [authenticate](../../terraform/authentication.md) using the appropriate method.

    1. Open the current configuration file describing the infrastructure.

    1. In the load balancer description, change the `deletion_protection` value to `false`:


       ```hcl
       resource "yandex_lb_network_load_balancer" "foo" {
         ...
         deletion_protection = false
         ...
       }
       ```

    1. Make sure the settings are correct.

       1. In the command line, navigate to the directory that contains the current Terraform configuration files defining the infrastructure.
       1. Run this command:
       
          ```bash
          terraform validate
          ```
       
          Terraform will show any errors found in your configuration files.

    1. Apply the changes.

       1. Run this command to view the planned changes:
       
          ```bash
          terraform plan
          ```
       
          If you described the configuration correctly, the terminal will display a list of the resources to update and their parameters. This is a verification step that does not apply changes to your resources.
       
       1. If everything looks correct, apply the changes:
          1. Run this command:
       
             ```bash
             terraform apply
             ```
       
          1. Confirm updating the resources.
          1. Wait for the operation to complete.

- API {#api}

    To enable deletion protection, use the [update](../api-ref/NetworkLoadBalancer/update.md) REST API method for the [NetworkLoadBalancer](../api-ref/NetworkLoadBalancer/index.md) resource or the [NetworkLoadBalancerService/Update](../api-ref/grpc/NetworkLoadBalancer/update.md) gRPC API call and provide the following in the request:

    * Name of the `deletionProtection` parameter in the `updateMask` parameter.
    * `false` in the `deletionProtection` parameter.

    {% note warning %}
    
    The API method will assign default values to all the parameters of the object you are modifying unless you explicitly provide them in your request. To avoid this, list the settings you want to change in the `updateMask` parameter as a single comma-separated string.
    
    {% endnote %}

{% endlist %}