# Attaching a target group to a network load balancer

{% list tabs group=instructions %}

- Management console {#console}
  
  To attach a [target group](../concepts/target-resources.md) to a network load balancer:
  
  1. In the [management console](https://console.yandex.cloud), select the folder where you want to attach a target group to a load balancer.
  1. Navigate to **Network Load Balancer**.
  1. Next to the load balancer to which you want to attach a target group, click ![image](../../_assets/console-icons/ellipsis.svg) and select **Attach target group**.
  1. Select a target group or [create a new one](target-group-create.md).
  1. Configure health check settings.
  1. Click **Attach target group**.
  
- 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 attaching a target group to a network load balancer:
  
     ```bash
     yc load-balancer network-load-balancer attach-target-group --help
     ```

  1. Find out the ID or name of the load balancer by getting a [list of network load balancers in the folder](load-balancer-list.md#list).

  1. Attach a target group to your load balancer by specifying the group ID and health check settings in the appropriate command parameters:
  
     ```bash
     yc load-balancer network-load-balancer attach-target-group <load_balancer_name_or_ID> \
        --target-group target-group-id=<target_group_ID>,`
                      `healthcheck-name=<health_check_name>,`
                      `healthcheck-interval=<health_check_interval>s,`
                      `healthcheck-timeout=<response_timeout>s,`
                      `healthcheck-unhealthythreshold=<number_of_failed_checks_to_get_Unhealthy_status>,`
                      `healthcheck-healthythreshold=<number_of_successful_checks_to_get_Healthy_status>,`
                      `healthcheck-tcp-port=<TCP_port>,`
                      `healthcheck-http-port=<HTTP_port>,`
                      `healthcheck-http-path=<URL>
     ```

     Where:

     * `--target-group`: Target group parameters and [health check](../concepts/health-check.md) settings:
         * `target-group-id`: Target group ID.
     
           To find out the ID, [get](target-group-list.md#list) a list of target groups in the folder.
     
         * `healthcheck-name`: Health check name.
         * `healthcheck-interval`: Health check interval in seconds. The possible values range from `1s` to `60s`. The interval must be at least 1 second longer than the response timeout. 
         * `healthcheck-timeout`: Response timeout in seconds. The possible values range from `1s` to `60s`.
         * `healthcheck-unhealthythreshold`: Number of failed checks before traffic is no longer routed to the VM. The possible values range from `2` to `10`.
         * `healthcheck-healthythreshold`: Number of successful checks required to consider the VM ready to receive traffic. The possible values range from `2` to `10`.
         * `healthcheck-tcp-port`: Port for TCP health checks. The possible values range from `1` to `32,767`.
         * `healthcheck-http-port`: Port for HTTP health checks. The possible values range from `1` to `32,767`.
         * `healthcheck-http-path`: URL for HTTP health checks.
     
         You cannot specify both `healthcheck-tcp-port` and `healthcheck-http-port` at the same time.
     
         {% note warning %}
         
         Use the `<time_in_seconds>s` format, e.g., `20s`, for the `healthcheck-interval` and `healthcheck-timeout` values.
         
         {% endnote %}

     For more information about health check settings, see [Resource health check](../concepts/health-check.md).

- Terraform {#tf}

  1. Open the Terraform configuration file and add the `attached_target_group` section to the network load balancer description:

     ```hcl
     resource "yandex_lb_network_load_balancer" "foo" {
       name = "<load_balancer_name>"
       ...
       attached_target_group {
         target_group_id = "<target_group_ID>"
         healthcheck {
           name = "<health_check_name>"
           http_options {
             port = <port_number>
             path = "<URL>"
           }
         }
       }
       ...
     }
     ```

     Where:

     * `name`: Name of the network load balancer.
     * `attached_target_group`: Description of the network load balancer's target group settings:
        * `target_group_id`: Target group ID.

          To find out the ID, [get](target-group-list.md#list) a list of target groups in the folder.

        * `healthcheck`: Health check settings. Specify a name, a port number ranging from `1` to `32767`, and a path for health checks.

     For more information about the resources you can create with Terraform, see [this provider guide](../../terraform/resources/lb_network_load_balancer.md).

  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. Create a network load balancer.

     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 attach a target group to a network load balancer, use the [attachTargetGroup](../api-ref/NetworkLoadBalancer/attachTargetGroup.md) REST API method for the [NetworkLoadBalancer](../api-ref/NetworkLoadBalancer/index.md) resource or the [NetworkLoadBalancerService/AttachTargetGroup](../api-ref/grpc/NetworkLoadBalancer/attachTargetGroup.md) gRPC API call, providing the following in your request:

  * Load balancer ID, in the `networkLoadBalancerId` parameter.
  * Target group ID in the `attachedTargetGroup.targetGroupId` parameter.
  * Health check settings in the `attachedTargetGroup.healthChecks` parameter.

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

{% endlist %}