AWS에 대한 외부 함수 문제 해결하기

이 항목에서는 AWS의 외부 함수에 대한 문제 해결 정보를 제공합니다.

이 항목의 내용:

플랫폼과는 무관한 런타임 문제

데이터 타입 반환 값이 예상 반환 값과 일치하지 않음

인자를 외부 함수로 전달하거나 외부 함수에서 전달할 때, 데이터 타입이 적절한지 확인하십시오. 전송된 값이 수신 중인 데이터 타입에 맞지 않으면 다른 방식으로 값이 잘리거나 손상될 수 있습니다.

자세한 내용은 외부 함수에 대한 인자가 원격 서비스에서 구문 분석한 인자와 일치하도록 하기 섹션을 참조하십시오.

오류: 행 번호가 잘못됨

가능한 원인

각 배치 내에서 반환하는 행 번호는 0에서 시작해 단조 증가하는 정수여야 합니다. 입력 행 번호 역시 이 규칙을 따라야 하며, 각 출력 행은 해당 입력 행과 일치해야 합니다. 예를 들어, 출력 행 0의 출력은 입력 행 0의 입력과 일치해야 합니다.

가능한 해결책

반환하는 행 번호가 수신한 행 번호와 똑같고 각 출력 값이 해당 입력의 행 번호를 사용하는지 확인합니다. 이 방법이 효과가 없으면 입력 행 번호가 정확하지 않을 수 있거나 행을 올바른 순서로 반환하지 않았을 수 있습니다.

다음으로, 출력 행 번호가 0에서 시작해 1씩 증가하고 순서가 올바른지 확인합니다.

데이터 입력 및 출력 형식에 대한 자세한 내용은 원격 서비스 입력 및 출력 데이터 타입 을 참조하십시오.

오류: 《JSON 구문 분석 중 오류: 잘못된 응답》

가능한 원인

가장 가능성이 큰 원인은 원격 서비스에서 반환되는 JSON(예: AWS Lambda Function)이 올바르게 생성되지 않았기 때문입니다.

가능한 해결책

외부 함수가 수신된 각 입력 행에 대해 하나의 내부 배열이 반환되는 배열로 구성된 배열을 반환하는지 확인합니다. Snowflake에서 받는 데이터 타입 에서 출력 형식에 대한 설명을 살펴보십시오.

오류: 반환된 값의 형식이 JSON이 아닙니다.

가능한 원인

반환 값은 값 안에 큰따옴표를 포함합니다.

가능한 해결책

JSON 문자열은 큰따옴표로 구분되지만, 대부분의 경우 문자열 자체는 따옴표로 시작하고 끝나면 안 됩니다. 포함된 큰따옴표가 올바르지 않은 경우에는 제거하십시오.

오류: 함수가 잘못된 수의 행을 수신함

가능한 원인

원격 서비스가 수신한 것보다 많거나 적은 행을 반환하려고 했습니다. 함수가 명목상 스칼라이더라도, event 매개 변수의 body 필드에서 여러 행을 수신할 수도 있으며 수신한 개수만큼의 행을 정확히 반환해야 합니다.

가능한 해결책

원격 서비스가 수신하는 행마다 하나의 행을 반환하도록 합니다.

AWS에 특정한 문제

엔드포인트가 Lambda 프록시 통합을 사용하는 동안 API Gateway가 오류 502를 반환함

가능한 원인

Lambda 함수에 다음과 같은 문제가 발생했을 수 있습니다.

  • 시간 초과.

  • 예외 발생.

  • 다른 형태로 실패.

가능한 해결책

Lambda 또는 API Gateway 로그가 제공되는 경우 로그를 살펴보십시오.

Lambda 함수의 소스 코드가 제공되는 경우 Lambda 함수의 코드를 분석하고 디버그하십시오. 어떤 경우에는 더 간단한 컨텍스트(AWS 외부)에서 해당 코드의 복사본을 실행하면 디버그에 도움이 될 수도 있습니다.

Lambda 함수로 전송된 데이터가 Lambda 함수가 예상하는 형식인지 확인합니다. 성공 여부를 확인하기 위해 더 작고 단순한 데이터 세트를 보낼 수도 있습니다.

한 번에 데이터를 너무 많이 보내지 않도록 잘 확인하십시오.

어떤 경우에는 제한 시간을 늘리면 문제가 해결될 수도 있는데, 특히 Lambda 함수에 많은 CPU 리소스가 필요하거나 Lambda 함수 자체가 다른 원격 서비스를 호출하는 바람에 더 많은 시간이 필요한 경우에 그렇습니다.

Amazon AWS Lambda Function 내부의 HTTP POST 메서드에서 요청 본문을 읽을 수 없음

가능한 원인

Lambda 프록시 통합을 활성화하지 않았을 수 있습니다.

가능한 해결책

Lambda 프록시 통합을 활성화하십시오.

자세한 내용은 API Gateway 엔드포인트 만들기 의 절차를 참조하십시오.

AWS_ROLE을 맡는 동안 오류가 발생함

전체 메시지 텍스트는 다음과 같습니다.

SQL execution error: Error assuming AWS_ROLE. Please verify the role and externalId are
configured correctly in your AWS policy.
가능한 원인
  • 자신의 역할에 대한 AWS 트러스트 관계 정책에서 AWS ARN이 올바르지 않습니다. 가능한 원인으로는 다음과 같은 것이 있습니다.

    • 올바로 설정하지 않았습니다.

    • 설정하긴 했지만, Snowflake의 DESCRIBE INTEGRATION 명령에서 볼 수 있는 사용자 ARN 대신 AWS 역할(잘못된 역할)의 ARN을 사용했습니다. 《API_AWS_ROLE_ARN》 필드의 값이 아닌 워크시트에 있는 API_AWS_IAM_USER_ARN 필드의 값을 사용해야 합니다.

  • AWS 트러스트 관계 정책에서 std:ExternalId 가 올바르지 않습니다. 가능한 원인으로는 다음과 같은 것이 있습니다.

    • 올바로 설정하지 않았습니다.

    • API 통합 오브젝트를 다시 만들었습니다. API 오브젝트를 다시 만들면 외부 ID가 변경됩니다.

오류: 403 〈{《메시지》:》사용자: <ARN>이 execute-api:Invoke를 수행할 권한이 없음》}〉

전체 메시지 텍스트는 다음과 같습니다.

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: <ARN> is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
가능한 원인
  • API Gateway 리소스 정책에 다음과 같은 것이 있습니다.

    • 잘못된 IAM 역할 ARN.

    • 잘못 맡은 역할.

    • 잘못된 메서드 요청 ARN.

  • IAM 역할에 올바른 정책이 연결되어 있지 않습니다.

가능한 해결책
  • Amazon API 게이트웨어 엔드포인트 보호하기 의 리소스 정책 템플릿을 따랐는지 확인하십시오. 특히, 리소스 정책으로 다음을 수행했는지 확인하십시오.

    • <12-digit number> 를 이름이 Your AWS account ID 인 워크시트 필드의 값으로 바꾸었습니다.

    • <external_function_role> 을 워크시트의 New IAM Role Name 필드에 있는 값으로 바꾸었습니다.

    • Resource 필드의 method_request_ARN 을 워크시트의 Method Request ARN 필드의 값으로 바꾸었습니다. 맨 끝에 슬래시가 없어야 합니다.

  • IAM 역할에 올바른 권한 정책이 연결되어 있는지 확인해야 할 경우, 아래 단계를 따라 역할의 권한 정책 목록을 찾을 수 있습니다.

    1. AWS에서 IAM(ID 및 액세스 관리)으로 이동하여 역할을 선택합니다.

    2. 역할에 대한 Summary 를 확인합니다.

    3. Permissions 탭을 클릭합니다.

    4. 필요한 정책이 Permissions policies 목록에 있는지 확인합니다.

  • 호출되는 엔드포인트가 API Gateway에 설정된 스테이지가 아니라 리소스인지 확인하십시오.

오류: 403 〈{《메시지》:》사용자: 익명의 사용자가 execute-api:Invoke를 수행할 권한이 없음》}〉

전체 메시지 텍스트는 다음과 같습니다.

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
가능한 원인

한 가지 가능한 원인은 API Gateway에 대한 인증을 구성할 때 Method Request 가 리소스에 대한 AWS_IAM 인증이 필요함을 지정하지 않았을 수 있다는 점입니다.

가능한 해결책

Amazon API Gateway 보안 지침을 따르지 않았다면 지금 지침에 따라 AWS_IAM 인증을 지정하십시오.

JSON 응답 구문 분석 중 오류 발생 … 오류: 최상위 JSON 오브젝트에 《데이터》 JSON 배열 요소가 포함되어야 함

전체 메시지 텍스트는 다음과 같습니다.

Error parsing JSON response for external function ... Error: top-level JSON object must contain "data" JSON array element
가능한 원인
  • API Gateway 리소스에서 POST 명령에 대해 Lambda 프록시 통합을 지정하지 않았을 수 있습니다.

가능한 해결책
  • API Gateway 리소스에 대한 Lambda 프록시 통합을 지정합니다.

    Lambda 프록시 통합에 대한 자세한 내용은 API Gateway 엔드포인트 만들기 의 절차를 참조하십시오.

원격 서비스 오류: 403 〈{《메시지》:》금지됨》}〉;으로 인해 외부 함수 EXT_FUNC에 대한 요청 실패

가능한 원인

프록시 서비스에는 일반적으로 인증 또는 청구를 위해 API 키 가 필요했습니다. API 키가 없거나 잘못되었습니다.

가능한 해결책

ALTER API INTEGRATION 명령을 사용하여 올바른 API 키를 지정하십시오.

CloudFormation 스택 생성에 실패함

AWS CloudFormation 템플릿을 사용하여 외부 함수를 만드는 경우에 이 오류가 발생할 수 있습니다.

가능한 원인

CloudFormation 템플릿에 지정된 리소스를 만드는 데 필요한 권한이 없습니다.

가능한 해결책

스택에 대한 Events 탭을 확인하여 오류 세부 정보를 보십시오.

또한, 추가 문제 해결 팁은 AWS 외부 함수 문제 해결 페이지를 참조하십시오.