Azure의 외부 함수 문제 해결하기¶
이 항목에서는 Azure의 외부 함수에 대한 문제 해결 정보를 제공합니다.
이 항목의 내용:
플랫폼과는 무관한 런타임 문제¶
데이터 타입 반환 값이 예상 반환 값과 일치하지 않음¶
인자를 외부 함수로 전달하거나 외부 함수에서 전달할 때, 데이터 타입이 적절한지 확인하십시오. 전송된 값이 수신 중인 데이터 타입에 맞지 않으면 다른 방식으로 값이 잘리거나 손상될 수 있습니다.
자세한 내용은 외부 함수에 대한 인자가 원격 서비스에서 구문 분석한 인자와 일치하도록 하기 섹션을 참조하십시오.
오류: 행 번호가 잘못됨¶
- 가능한 원인:
각 배치 내에서 반환하는 행 번호는 0에서 시작해 단조 증가하는 정수여야 합니다. 입력 행 번호 역시 이 규칙을 따라야 하며, 각 출력 행은 해당 입력 행과 일치해야 합니다. 예를 들어, 출력 행 0의 출력은 입력 행 0의 입력과 일치해야 합니다.
- 가능한 해결책:
반환하는 행 번호가 수신한 행 번호와 똑같고 각 출력 값이 해당 입력의 행 번호를 사용하는지 확인합니다. 이 방법이 효과가 없으면 입력 행 번호가 정확하지 않을 수 있거나 행을 올바른 순서로 반환하지 않았을 수 있습니다.
다음으로, 출력 행 번호가 0에서 시작해 1씩 증가하고 순서가 올바른지 확인합니다.
데이터 입력 및 출력 형식에 대한 자세한 내용은 원격 서비스 입력 및 출력 데이터 타입 을 참조하십시오.
오류: “JSON 구문 분석 중 오류: 잘못된 응답”¶
- 가능한 원인:
가장 가능성이 큰 원인은 원격 서비스에서 반환되는 JSON(예: AWS Lambda Function)이 올바르게 생성되지 않았기 때문입니다.
- 가능한 해결책:
외부 함수가 수신된 각 입력 행에 대해 하나의 내부 배열이 반환되는 배열로 구성된 배열을 반환하는지 확인합니다. Snowflake에서 받는 데이터 타입 에서 출력 형식에 대한 설명을 살펴보십시오.
오류: 반환된 값의 형식이 JSON이 아닙니다.¶
- 가능한 원인:
반환 값은 값 안에 큰따옴표를 포함합니다.
- 가능한 해결책:
JSON 문자열은 큰따옴표로 구분되지만, 대부분의 경우 문자열 자체는 따옴표로 시작하고 끝나면 안 됩니다. 포함된 큰따옴표가 올바르지 않은 경우에는 제거하십시오.
오류: 함수가 잘못된 수의 행을 수신함¶
- 가능한 원인:
원격 서비스가 수신한 것보다 많거나 적은 행을 반환하려고 했습니다. 함수가 명목상 스칼라이더라도,
event
매개 변수의body
필드에서 여러 행을 수신할 수도 있으며 수신한 개수만큼의 행을 정확히 반환해야 합니다.- 가능한 해결책:
원격 서비스가 수신하는 행마다 하나의 행을 반환하도록 합니다.
Azure에 특정한 문제¶
Azure 함수를 만드는 동안 설정을 수정할 수 없음¶
- 가능한 원인:
Azure 함수를 만들 때 Authentication/Authorization 메뉴에서 함수의 설정을 수정하지 못할 수 있습니다.
다음 모든 사항이 참인 경우 이 문제가 발생할 수 있습니다.
Azure 함수가 Microsoft Windows가 아닌 Linux에서 실행 중입니다.
Azure 함수에 대해 Azure AD 인증/권한 부여를 사용할 계획입니다.
“프리미엄” 가격 책정 계층이 아닌 Azure의 “사용” 가격 책정 계층을 사용 중입니다.
Azure 함수에 대한 Linux 사용 계획에서 Azure AD 인증을 사용할 수 없습니다. Azure AD에서 인증하려면 앱 서비스 계획 또는 프리미엄 계획을 사용해야 합니다.
- 가능한 해결책:
Azure 함수를 다시 만들고 이 함수가 Linux가 아닌 Microsoft Windows에서 실행되도록 지정합니다.
Azure 함수에 대한 Azure AD 인증/권한 부여를 건너뛰는 대신, 다음 작업을 수행합니다.
6단계: Portal에서 프록시 서비스에 대한 Azure 보안 정책 만들기 에 설명되어 있는 대로 API 관리 인스턴스에 대한 JWT(JSON 웹 토큰) 유효성 검사 정책을 설정합니다.
IP 주소 제한을 사용하여 API Management 서비스 인스턴스의 연결만 허용하도록 원격 서비스를 제한합니다.
이 솔루션을 선택하는 경우 Azure AD 애플리케이션을 수동으로 만들어야 합니다. 자세한 내용은 Microsoft 설명서:
앱 등록 을 참조하십시오.
Azure AD 애플리케이션을 수동으로 생성하는 경우 추적 워크시트에
Azure Function AD app registration name
및Azure Function App AD Application ID
를 기록합니다.소비 가격 책정에서 프리미엄 가격 책정으로 전환하거나 앱 서비스 계획을 사용합니다. 자세한 내용은 Microsoft 설명서:
인증 공급자 구성하기 를 참조하십시오.
외부 함수 시간 초과¶
- 가능한 원인:
시간 초과가 발생할 수 있는 원인은 다양합니다. Azure에서 가능한 원인 중 하나는 Azure Functions 앱이 올바로 확장하도록 작성되지 않았다는 점입니다.
- 가능한 해결책:
확장 가능한 함수를 작성하기 위한 Azure 지침 을 따르고 있는지 확인하십시오.
확장성 및 성능 문제 해결에 대한 자세한 내용은 확장성 및 성능 문제 해결하기 를 참조하십시오.
오류: Azure Active Directory 액세스 토큰을 가져오지 못했습니다.¶
- 가능한 해결책:
다음 단계를 시도해보십시오.
Snowflake 서비스 주체에 Azure AD tenant에 대한 액세스 권한이 있는지 확인합니다.
Tenant ID와 Azure AD 애플리케이션 ID가 올바른지 확인합니다.
선행 및 후행 공백(예: 빈칸)을 포함한 공백은 ID 필드에서 중요합니다. 잘못된 선행 또는 후행 공백이 있는지 확인하십시오.
오류: 401 ‘{ “statusCode”: 401, “메시지”: “누락된 구독 키 때문에 액세스가 거부되었습니다…” }’¶
전체 오류 메시지 텍스트는 다음과 같습니다.
Request failed for external function <function_name>. Error: 401 '{ "statusCode": 401, "message":
"Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }'
- 가능한 원인:
API Management 서비스의 구독 요구 사항이 설정되어 있을 수 있습니다.
- 가능한 해결책:
API Management 서비스에 대한 구독 요구 사항을 해제해야 할 수 있습니다.
오류: 401 ‘{ “statusCode”: 401, “메시지”: “누락된 구독 키 때문에 액세스가 거부되었습니다.” }¶
- 가능한 원인:
프록시 서비스에는 일반적으로 인증 또는 청구를 위한 API 키 (일명 “구독 키”)가 필요합니다. 하지만 CREATE API INTEGRATION 명령의 API_KEY 절에는 아무런 API 키도 제공되지 않았습니다.
- 가능한 해결책:
ALTER API INTEGRATION 명령을 사용하여 유효한 API 키로 API 통합을 업데이트하십시오.
오류: 401 ‘{ “statusCode”: 401, “메시지”: “잘못된 구독 키 때문에 액세스가 거부되었습니다.” }’¶
- 가능한 원인:
프록시 서비스에는 일반적으로 인증 또는 청구를 위한 API 키 (일명 “구독 키”)가 필요합니다. 하지만 CREATE API INTEGRATION 명령의 API_KEY 절에 입력한 API 키가 유효하지 않습니다.
- 가능한 해결책:
ALTER API INTEGRATION 명령을 사용하여 유효한 API 키로 API 통합을 업데이트하십시오.
오류: 401 ‘{ “statusCode”: 401, “메시지”: “잘못된 JWT입니다.” }’¶
전체 오류 메시지 텍스트는 다음과 같습니다.
Request failed for external function <function_name>. Error: 401 '{ "statusCode": 401, "message": "Invalid JWT." }'
- 가능한 원인:
Azure API Management 서비스에서 보안 정책 설정을 마치지 않았을 수 있습니다. 예를 들어 다음과 같이 했을 수 있습니다.
JWT(JSON 웹 토큰)를 만들었지만 편집하지 않았습니다.
필수 클레임/값 중 하나 이상을 생략했습니다. 예를 들어 Snowflake에 대한 클레임은 지정했지만 원격 서비스(Azure 함수)에 대한 클레임은 지정하지 않았거나,
그 반대일 수 있습니다.
잘못된 공개 ID URL을 사용했을 수 있습니다.
- 가능한 해결책:
Azure API Management 서비스에서 보안 정책 설정을 마치십시오. 예를 들어 JWT를 검토하고 Snowflake에 대한 클레임과 원격 서비스(Azure 함수)에 대한 클레임을 포함한 필수 클레임/값을 포함했는지 확인하십시오.
유효한 공개 ID URL을 사용했는지 확인하십시오.
오류(원격 서비스): 401 ‘{ “statusCode”: 401, “메시지”: “잘못된 JWT입니다.” }’¶
전체 오류 메시지 텍스트는 다음과 같습니다.
Request failed for external function <function_name> with remote service error: 401 '{ "statusCode": 401, "message": "Invalid JWT." }'
- 가능한 원인:
ARM 템플릿을 사용한 경우 템플릿이 자동으로 생성한 JWT(JSON 웹 토큰)를 업데이트하지 않았을 수 있습니다.
- 가능한 해결책:
6단계: Portal에서 프록시 서비스에 대한 Azure 보안 정책 업데이트하기 에 설명되어 있는 대로 JWT를 업데이트하십시오.
오류: 500 …¶
- 가능한 원인:
Azure AD 앱에 대해 잘못된 옵션을 선택했을 수 있습니다.
잘못된 옵션: Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)
올바른 옵션: Accounts in this organizational directory only (Default Directory only - Single tenant)