Amazon ECS 장애 주입 엔드포인트

Amazon ECS 장애 주입 엔드포인트 (fault injection endpoints)

Amazon ECS 컨테이너 에이전트는 컨테이너 에이전트 API 엔드포인트와 상호작용하는 방법을 제공하기 위해 Amazon ECS 태스크의 컨테이너에 ECS_AGENT_URI 환경 변수를 자동으로 주입합니다. 이 글에서는 장애 주입에 사용하는 세 가지 엔드포인트에 대해 알아봅니다.

출처: 문서

본문

Amazon ECS 컨테이너 에이전트는 컨테이너 에이전트 API 엔드포인트와 상호작용하는 방법을 제공하기 위해 Amazon ECS 태스크의 컨테이너에 ECS_AGENT_URI 환경 변수를 자동으로 주입합니다. 각 엔드포인트에는 /start, /stop, /status 엔드포인트가 포함됩니다.

엔드포인트는 장애 주입(fault injection)을 활성화한 태스크의 요청만 수락하며, 각 엔드포인트는 컨테이너당 5초에 1회 요청의 속도 제한이 있습니다. 이 제한을 초과하면 오류가 발생합니다.

참고: 장애 주입 엔드포인트를 사용하려면 Amazon ECS 에이전트 버전 1.88.0 이상이 필요합니다.

장애 주입에 사용하는 세 가지 엔드포인트는 다음과 같습니다:

  • 네트워크 블랙홀 포트 엔드포인트(Network blackhole port endpoint)
  • 네트워크 패킷 손실 엔드포인트(Network packet loss endpoint)
  • 네트워크 지연 엔드포인트(Network latency endpoint)

성공적인 요청은 /start 엔드포인트를 호출하면 응답 코드 200과 running 메시지를, /stop 엔드포인트는 stopped를, /status 엔드포인트는 running 또는 not-running을 반환합니다.

{
    "Status": <string>
}

실패한 요청은 다음 오류 코드 중 하나를 반환합니다:

  • 400 — 잘못된 요청(Bad request)
  • 409 — 장애 주입 요청이 실행 중인 다른 장애와 충돌
  • 429 — 요청이 스로틀링됨
  • 500 — 서버에 예기치 않은 오류 발생
{
	"Error":  <string message>
}

참고: 한 번에 네트워크 지연 장애 하나 또는 네트워크 패킷 손실 장애 하나만 주입할 수 있습니다. 하나 이상 주입하려고 하면 요청이 거부됩니다.

네트워크 블랙홀 포트 엔드포인트 (Network blackhole port endpoint)

{ECS_AGENT_URI}/fault/v1/network-blackhole-port 엔드포인트는 태스크의 네트워크 네임스페이스에서 특정 포트와 프로토콜의 인바운드 또는 아웃바운드 트래픽을 드롭하며 두 가지 모드와 호환됩니다:

  • awsvpc — 변경 사항이 태스크 네트워크 네임스페이스에 적용됩니다.
  • host — 변경 사항이 컨테이너 인스턴스의 기본 네트워크 네임스페이스에 적용됩니다.

{ECS_AGENT_URI}/fault/v1/network-blackhole-port/start

이 엔드포인트는 네트워크 블랙홀 포트 장애 주입을 시작하며 다음 파라미터가 있습니다:

  • Port — 블랙홀 포트 장애 주입에 사용할 지정 포트. Type: Integer, Required: Yes
  • Protocol — 블랙홀 포트 장애 주입에 사용할 프로토콜. Type: String, Valid values: tcp | udp, Required: Yes
  • TrafficType — 장애 주입이 사용하는 트래픽 유형. Type: String, Valid values: ingress | egress, Required: Yes
  • SourcesToFilter — 장애로부터 보호되는 IPv4 또는 IPv6 주소 또는 CIDR 블록의 JSON 배열. Type: Array of strings, Required: No

start 엔드포인트 사용 예시 요청(빨간 값을 자신의 값으로 바꾸세요):

Endpoint: ${ECS_AGENT_URI}/fault/v1/network-blackhole-port/start

Http method:POST

Request payload:
{
    "Port": 1234,
    "Protocol": "tcp|udp",
    "TrafficType": "ingress|egress"
    "SourcesToFilter": ["${IP1}", "${IP2}", ...],
}

{ECS_AGENT_URI}/fault/v1/network-blackhole-port/stop

이 엔드포인트는 요청에 지정된 장애를 중지합니다. 이 엔드포인트에는 다음 파라미터가 있습니다:

  • Port — 중지해야 할 장애의 영향을 받는 포트. Type: Integer, Required: Yes
  • Protocol — 장애를 중지하는 데 사용할 프로토콜. Type: String, Valid values: tcp | udp, Required: Yes
  • TrafficType — 장애 주입이 사용하는 트래픽 유형. Type: String, Valid values: ingress | egress, Required: Yes

stop 엔드포인트 사용 예시 요청:

Endpoint: ${ECS_AGENT_URI}/fault/v1/network-blackhole-port/stop

Http method: POST

Request payload:
{
    "Port": 1234,
    "Protocol": "tcp|udp",
    "TrafficType": "ingress|egress", 
}

{ECS_AGENT_URI}/fault/v1/network-blackhole-port/status

이 엔드포인트는 장애 주입의 상태를 확인하는 데 사용됩니다. 이 엔드포인트에는 다음 파라미터가 있습니다:

  • Port — 장애 상태를 확인할 영향을 받는 포트. Type: Integer, Required: Yes
  • Protocol — 장애 상태 확인 시 사용할 프로토콜. Type: String, Valid values: tcp | udp, Required: Yes
  • TrafficType — 장애 주입이 사용하는 트래픽 유형. Type: String, Valid values: ingress | egress, Required: Yes

status 엔드포인트 사용 예시 요청:

Endpoint: ${ECS_AGENT_URI}/fault/v1/network-blackhole-port/status

Http method: POST

Request payload:
{
   "Port": 1234,
   "Protocol": "tcp|udp",
   "TrafficType": "ingress|egress",
}

네트워크 지연 엔드포인트 (Network latency endpoint)

{ECS_AGENT_URI}/fault/v1/network-latency 엔드포인트는 특정 소스로의 트래픽에 대해 태스크의 네트워크 인터페이스에 지연(delay)과 지터(jitter)를 추가합니다. 엔드포인트는 두 가지 모드와 호환됩니다:

  • awsvpc — 변경 사항이 태스크 네트워크 인터페이스에 적용됩니다.
  • host — 변경 사항이 기본 네트워크 인터페이스에 적용됩니다.

{ECS_AGENT_URI}/fault/v1/network-latency/start

이 /start 엔드포인트는 네트워크 지연 장애 주입을 시작하며 다음 파라미터가 있습니다:

  • DelayMilliseconds — 장애 주입에 사용할 네트워크 인터페이스에 추가할 지연의 밀리초 수. Type: Integer, Required: Yes
  • JitterMilliseconds — 장애 주입에 사용할 네트워크 인터페이스에 추가할 지터의 밀리초 수. Type: Integer, Required: Yes
  • Sources — 장애 주입에 사용할 대상인 IPv4 또는 IPv6 주소 또는 CIDR 블록의 JSON 배열. Type: Array of strings, Required: Yes
  • SourcesToFilter — 장애로부터 보호되는 IPv4 또는 IPv6 주소 또는 CIDR 블록의 JSON 배열. SourcesToFilter는 Sources보다 우선합니다. Type: Array of strings, Required: No

/start 엔드포인트 사용 예시 요청:

Endpoint: ${ECS_AGENT_URI}/fault/v1/network-latency/start

Http method: POST

Request payload:
{
    "DelayMilliseconds": 123,
    "JitterMilliseconds": 123,
    "Sources": ["${IP1}", "${IP2}", ...],
    "SourcesToFilter": ["${IP1}", "${IP2}", ...],
}

{ECS_AGENT_URI}/fault/v1/network-latency/stop 및 /status

{ECS_AGENT_URI}/fault/v1/network-latency/stop 엔드포인트는 장애를 중지하고, {ECS_AGENT_URI}/fault/v1/network-latency/status는 장애 상태를 확인합니다.

다음은 /stop과 /status 엔드포인트 사용 예시 요청 두 개입니다. 둘 다 POST HTTP 메서드를 사용합니다.

Endpoint: ${ECS_AGENT_URI}/fault/v1/network-latency/stop
Endpoint: ${ECS_AGENT_URI}/fault/v1/network-latency/status

네트워크 패킷 손실 엔드포인트 (Network packet loss endpoint)

{ECS_AGENT_URI}/fault/v1/network-packet-loss 엔드포인트는 주어진 네트워크 인터페이스에 패킷 손실을 추가합니다. 이 엔드포인트는 두 가지 모드와 호환됩니다:

  • awsvpc — 변경 사항이 태스크 네트워크 인터페이스에 적용됩니다.
  • host — 변경 사항이 기본 네트워크 인터페이스에 적용됩니다.

{ECS_AGENT_URI}/fault/v1/network-packet-loss/start

이 /start 엔드포인트는 네트워크 패킷 손실 장애 주입을 시작하며 다음 파라미터가 있습니다:

  • LossPercent — 패킷 손실 비율. Type: Integer, Required: Yes
  • Sources — 장애 주입 테스트에 사용할 IPv4 또는 IPv6 주소 또는 CIDR 블록의 JSON 배열. Type: Array of strings, Required: Yes
  • SourcesToFilter — 장애로부터 보호되는 IPv4 또는 IPv6 주소 또는 CIDR 블록의 JSON 배열. SourcesToFilter는 Sources보다 우선합니다. Type: Array of strings, Required: No

start 엔드포인트 사용 예시 요청:

Endpoint: ${ECS_AGENT_URI}/fault/v1/network-packet-loss/start

Http method: POST

{
    "LossPercent": 6,  
    "Sources": ["${IP1}", "${IP2}", ...],
    "SourcesToFilter": ["${IP1}", "${IP2}", ...],
}

{ECS_AGENT_URI}/fault/v1/network-packet-loss/stop 및 /status

{ECS_AGENT_URI}/fault/v1/network-packet-loss/stop 엔드포인트는 장애를 중지하고, {ECS_AGENT_URI}/fault/v1/network-packet-loss/status는 장애 상태를 확인합니다. 한 번에 각 유형의 장애 하나만 지원됩니다.

다음은 /stop과 /status 엔드포인트 사용 예시 요청 두 개입니다. 둘 다 POST HTTP 메서드를 사용합니다.

Endpoint: ${ECS_AGENT_URI}/fault/v1/network-packet-loss/stop
Endpoint: ${ECS_AGENT_URI}/fault/v1/network-packet-loss/status

더 알아보기 (Learn more)

  • 장애 주입 및 Amazon ECS 장애 주입 활성화에 대한 자세한 내용은 AWS 개발자 가이드의 관련 문서를 참고하세요.