FAQ - AWS SDK for Go v2

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

FAQ

SDK의 HTTP 클라이언트를 구성하려면 어떻게 해야 합니까? 지침이나 모범 사례가 있습니까?

특정 워크로드에 가장 효과적인 방식으로 HTTP 워크플로를 구성하는 방법에 대한 지침을 고객에게 제공할 수 없습니다. 이에 대한 답은 다변수 방정식의 결과물이며, 입력 요소는 다음을 포함하지만 이에 국한되지 않습니다.

  • 애플리케이션의 네트워크 공간(TPS, 처리량 등)

  • 사용 중인 서비스

  • 배포의 컴퓨팅 특성

  • 배포의 지리적 특성

  • 원하는 애플리케이션 동작 또는 애플리케이션 자체의 요구 사항(SLA, 타이밍 등)

작업 제한 시간을 구성하려면 어떻게 해야 합니까?

이전 질문과 마찬가지로 이는 종속적입니다. 여기서 고려해야 할 요소는 다음과 같습니다.

  • HTTP 클라이언트 구성과 관련된 위의 모든 요소

  • 자체 애플리케이션 타이밍 또는 SLA 제약 조건(예: 다른 소비자에게 트래픽을 제공하는 경우)

이 질문에 대한 답변은 업스트림 동작에 대한 순수한 경험적 관찰을 기반으로 해서는 안 됩니다. 예: "이 작업을 1,000번 호출했습니다. 최대 5초가 걸렸으므로 안전 계수가 2배~10초인 시간을 기준으로 제한 시간을 설정하겠습니다." 환경 조건이 변경될 수 있고, 서비스가 일시적으로 저하될 수 있으며, 이러한 유형의 가정은 경고 없이 잘못될 수 있습니다.

SDK의 요청이 시간 초과되거나 너무 오래 걸리는데, 이 문제를 해결하려면 어떻게 해야 합니까?

네트워크에 소요된 시간이 길어 작업 호출이 연장되거나 제한 시간이 초과되면 지원할 수 없습니다. SDK의 ‘네트워크 시간’은 다음 중 하나로 정의됩니다.

  • SDK 클라이언트의 HTTPClient.Do() 메서드에 소요된 시간

  • 호출자에게 전달된 HTTP 응답 본문의 Read()에서 소요된 시간(예: GetObject)

작업 지연 시간 또는 제한 시간으로 인해 문제가 발생하는 경우, 첫 번째 조치는 SDK 작업 수명 주기의 원격 측정을 확보하여 네트워크에 소요된 시간과 작업의 주변 오버헤드 간의 타이밍 분석을 결정하는 것입니다. 이를 달성할 수 있는 재사용 가능한 코드 조각이 포함된 타이밍 SDK 작업에 대한 가이드를 참조하세요.

read: connection reset 오류를 해결하려면 어떻게 해야 합니까?

SDK는 기본적으로 connection reset 패턴과 일치하는 모든 오류를 재시도합니다. 여기에는 작업의 HTTP 응답이 완전히 사용되고 모델링된 결과 유형으로 역직렬화되는 대부분의 작업에 대한 오류 처리가 포함됩니다.

그러나 이 오류는 여전히 재시도 루프 외부의 컨텍스트에서 발생할 수 있습니다. 특정 서비스 작업은 API의 HTTP 응답 본문을 직접 호출자에게 전달하여 io.ReadCloser(예: GetObject의 객체 페이로드)를 통해 네트워크에서 직접 사용할 수 있습니다. 응답 본문에서 Read를 수행할 때 이 오류가 발생할 수 있습니다.

이 오류는 호스트, 서비스 또는 중개자(예: NAT 게이트웨이, 프록시, 로드 밸런서)가 응답을 읽으려고 시도하는 동안 연결을 종료했음을 나타냅니다.

이는 다음과 같은 여러 가지 이유로 발생할 수 있습니다.

  • 응답 자체가 수신된 후(서비스 작업이 호출된 후) 일정 시간 동안 응답 본문을 사용하지 않았습니다. 이러한 유형의 작업에 대해 가능한 한 빨리 HTTP 응답 본문을 사용하는 것이 좋습니다.

  • 이전에 수신한 응답 본문을 닫지 않았습니다. 이로 인해 특정 플랫폼에서 연결이 재설정될 수 있습니다. 콘텐츠를 사용하는지 여부에 관계없이 작업의 응답에 제공된 io.ReadCloser 인스턴스를 모두 닫아야 합니다.

그 외에도 네트워크 엣지에서 영향을 받는 연결에 대해 tcpdump를 실행해 봅니다(예: 제어하는 프록시 이후). AWS 엔드포인트가 TCP RST를 전송하는 것으로 보이는 경우 AWS 지원 콘솔을 사용하여 문제가 되는 서비스에 대한 사례를 열어야 합니다. 문제가 발생한 시점의 요청 ID와 특정 타임스탬프를 제공할 준비를 합니다.

SDK에서 HTTP 프록시를 사용할 때 "잘못된 서명" 오류가 발생하는 이유는 무엇입니까?

AWS 서비스에 대한 서명 알고리즘(일반적으로 sigv4)은 직렬화된 요청의 헤더, 특히 접두사가 인 대부분의 헤더에 연결됩니다X-. 프록시는 SDK가 계산한 서명을 효과적으로 해제하는 추가 전달 정보(종종 X-Forwarded-For 헤더를 통해)를 추가하여 발신 요청을 수정하는 경향이 있습니다.

HTTP 프록시를 사용하고 있고 서명 오류가 발생하는 경우 프록시에서 나가는 것처럼 보이는 요청을 캡처하고 차이가 있는지 확인해야 합니다.