Consul로 ECS 서비스 연결하기

Consul로 ECS 서비스 연결하기 (Connect ECS services with Consul)

이 문서는 ECS에 등록한 작업(task)들을 Consul 서비스 메시에 연결하는 방법을 설명해 드릴게요. 사이드카 프록시와 애플리케이션을 설정해 서비스 간 요청을 라우팅하는 방법을 배울 수 있어요.

출처: 문서

본문

이 항목은 작업(task)을 Consul 서비스 메시에 등록한 후 작업 간 라우팅을 구성하는 방법을 설명합니다.

개요 (Overview)

작업이 서비스 메시를 통해 호출할 수 있게 하려면 다음 단계를 완료하세요:

  • 애플리케이션이 호출해야 하는 각 업스트림 서비스에 대해 사이드카 프록시가 다른 포트에서 수신하도록 구성합니다.
  • 애플리케이션이 지정된 포트의 사이드카 프록시에 요청을 보내도록 수정합니다.

요구 사항 (Requirements)

네트워크 주소를 바인딩하려면 먼저 Consul 서비스 메시가 ECS에 배포되어 있어야 합니다. 자세한 내용은 다음 항목을 참조하세요:

  • Terraform 모듈을 사용하여 ECS에 Consul 배포 [/consul/docs/deploy/workload/dataplane/ecs/terraform]
  • 수동으로 ECS에 Consul 배포 [/consul/docs/deploy/workload/dataplane/ecs/manual]

사이드카 프록시 구성 (Configure the sidecar proxy)

애플리케이션 구성에 upstreams 블록을 추가하고 다음 필드를 지정하세요:

  • [/consul/docs/connect/ecs#destinationname]destinationName: Consul 서비스 카탈로그에 등록된 업스트림 서비스의 이름을 지정합니다.
  • [/consul/docs/connect/ecs#localbindport]localBindPort: 프록시가 요청을 전달하는 포트를 지정합니다. 사용하지 않는 포트를 지정해야 하지만 업스트림 서비스 포트와 일치할 필요는 없습니다.

다음 예시에서 web이라는 애플리케이션에서 backend이라는 애플리케이션으로의 라우팅은 포트 8080을 통해 이루어집니다:

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

모든 업스트림 서비스를 upstream 구성에 포함해야 합니다.

애플리케이션 구성 (Configure your application)

컨테이너 정의에서 적절한 환경 변수를 사용하여 애플리케이션이 루프백 주소의 업스트림 서비스를 호출하도록 구성합니다.

다음 예시에서 web 애플리케이션은 BACKEND_URL 환경 변수로 요청을 보내 backend 서비스를 호출합니다.

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

더 알아보기 (Learn more)