---
layout: docs
page_title: Connect ECS services with Consul
description: >-
  Consul documentation provides reference material for all features and options available in Consul.
---

# Connect ECS services with Consul

This topic describes how to configure routes between tasks after registering the tasks to Consul service mesh.

## Overview

To enable tasks to call through the service mesh, complete the following steps:

1. Configure the sidecar proxy to listen on a different port for each upstream service your application needs to call. 
1. Modify your application to make requests to the sidecar proxy on the specified port.

## Requirements

Consul service mesh must be deployed to ECS before you can bind a network address. For more information, refer to the following topics:

- [Deploy Consul to ECS using the Terraform module](/consul/docs/deploy/server/ecs)
- [Deploy Consul to ECS manually](/consul/docs/deploy/server/ecs/manual)

## Configure the sidecar proxy 

Add the `upstreams` block to your application configuration and specify the following fields:

- `destinationName`: Specifies the name of the upstream service as it is registered in the Consul service catalog.  
- `localBindPort`: Specifies the port that the proxy forwards requests to. You must specify an unused port but it does not need to match the upstream service port.

In the following example, the route from an application named `web` to an application named `backend` goes through port `8080`:

```hcl
module "web" {
  family = "web"
  upstreams = [
    {
      destinationName = "backend"
      localBindPort = 8080
    }
  ]
}
```

You must include all upstream services in the `upstream` configuration. 

## Configure your application 

Use an appropriate environment variable in your container definition to configure your application to call the upstream service at the loopback address. 

In the following example, the `web` application calls the `backend` service by sending requests to the
`BACKEND_URL` environment variable:

```hcl
module "web" {
  family = "web"
  upstreams = [
    {
      destinationName = "backend"
      localBindPort = 8080
    }
  ]
  container_definitions = [
    {
      name        = "web"
      environment = [
        {
          name  = "BACKEND_URL"
          value = "http://localhost:8080"
        }
      ]
      ...
    }
  ]
  ...
}
```