디버그에 Dashbird 사용: Lambda 구성 오류

Lambda 구성 오류는 가장 일반적인 오류 메시지 중 하나입니다. 이것은 이상하지 않습니다. 우리는 AWS 오류 메시지가 특별히 상세하지 않다는 것을 알고 있습니다.일반적으로, "encoding not enabled"이나 "흐름이 실패하고 있습니다"와 같은 모호한 오류 메시지가 발생할 수 있습니다. 이것은 서비스가 상하문에 따라 완전히 닫힐 수 있음을 의미할 수 있습니다.
Lambda 설정 오류는 매우 보편적이다.너는 너의 Lambda 함수에 몇 십 개의 설정 속성을 설정할 수 있다. 만약 그것들의 전체 내용을 모른다면, 모든 것이 원흉일 수도 있다.

"Lambda 구성 오류"는 무엇을 의미합니까?


이 오류에는 여러 가지 이유가 있을 수 있지만, 이것은 단지 Lambda 서비스가 프로세서 함수에 도달할 수 없다는 것을 의미할 뿐이다.
Lambda는 function as a service(FaaS) 제품으로 위탁 관리를 간소화하려고 한다.가상 머신과 컨테이너는 상태를 유지하는 장기적으로 실행되는 서버이지만FaaS는 상태를 삭제하고 함수 하나만 실행합니다.이 함수는 입력을 받아 출력을 생성하거나 부작용을 일으킨다.
Lambda를 사용하려면 지원되는 프로그래밍 언어 함수를 제공해야 합니다.이 함수를 잃어버리거나 다른 문제로 접근할 수 없으면, 결국 무서운 Lambda 설정 오류가 발생합니다.

어떻게 고쳐야 합니까?


이 오류에는 여러 가지 원인이 있을 수 있지만, 모두 경로 문제로 귀결될 수 있다.
IaC(Infrastructure Code) 도구를 사용하여 Lambda 함수를 생성하는 경우 함수 경로를 제공해야 합니다.그렇지 않으면 라마다는 사건이 발생했을 때 무엇을 실행해야 할지 모른다.

Lambda는 함수 정의를 어떻게 찾습니까?


AWS SAM의 예를 살펴보겠습니다.
AWSTemplateFormatVersion :  '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: nodejs14.x
Handler: index.handler
CodeUri: ./lambda-code
MyFunction 리소스에는 런타임, 프로세서 및 코드 URI 등 세 가지 속성이 있습니다.
실행 시 AWS Lambda에서 사용하는 프로그래밍 언어는 무엇입니까?나머지 두 개, Handler와CodeUri는 실제 함수 코드를 어디서 찾을 수 있는지 알려준다.
Lambda 함수를 지원하는 거의 모든 IaC 도구는 이 두 속성을 사용합니다.
CodeUri는 서비스 코드 파일의 위치를 알려줍니다.AWS SAM의 경우 함수 정의가 포함된 파일이 있는 디렉토리의 경로입니다.이것은 샘이 제공한 편의일 뿐이다.결국 Lambda는 로컬 기기에서 코드를 불러올 수 없다.이것은 클라우드에 있어야 합니다. S3 메모리 통에 업로드된 ZIP 압축 파일에 있어야 합니다.따라서 통상적으로 CodeUri는 로컬 내용이 아닌 클라우드에 있는 이 ZIP 압축 파일을 가리킨다.
위의 예에서 CodeUri는/lambda 코드이기 때문에 AWS SAM은 그 중의 모든 파일을 ZIP 압축 파일로 포장하여 S3 메모리 통에 업로드합니다.
다음 섹션은 Handler 속성으로, CodeUri가 끝나는 곳부터 시작합니다.CodeUri가 Lambda를 ZIP 파일로 가리킵니다.이제 Lambda는 파일에서 함수를 구현한 위치를 파악해야 합니다.함수의 크기에 따라 최종적으로 이 압축 파일에 상당히 많은 파일을 포함할 수 있습니다.
노드의 Lambda 함수를 사용하는 Handler 속성에서 가장 일반적인 경로입니다.js가 실행될 때 인덱스일 수도 있습니다.한들러.점 앞의 모든 내용은 파일 경로이고 점 뒤의 문자열은 이 파일에서 내보낸 함수의 이름입니다.노드js 개발자는 색인을 사용합니다.js 파일은 응용 프로그램 항목 파일이기 때문에 인덱스부터 흔히 볼 수 있습니다.
프로젝트가/홈/user/dev/project에 있다고 가정하십시오.이것은 AWS SAM 템플릿 yaml 파일이/home/user/dev/project/template에 있음을 의미합니다.yml
템플릿의 CodeUri는 Lambda 함수 코드가/lambda 코드입니다. 따라서 AWS SAM은/home/user/dev/project/lambda 코드의 내용을 ZIP 파일에 연결하여 S3 bucket에 업로드합니다.
템플릿의 Handler 속성은 프로세서가 색인에 있음을 나타냅니다.Lambda가 ZIP 아카이브의 루트 디렉토리에서 색인을 찾을 수 있도록 처리합니다.js 파일.노드js Lambda가 실행될 때 handler라는 이름을 찾아 내보내고 함수로 실행하며 이벤트 데이터를 입력으로 전달합니다.
만약 이 두 속성 중 어떤 내용이 올바르지 않다면, AWS Lambda는 파일을 찾을 수 없고, "Lambda 설정 오류"를 던질 수 없습니다.이것은 양쪽에 입력 오류, 파일 이름과 디렉터리 이름, 그리고 각자의 속성 설정이 있음을 의미할 수 있다.

결론


Lambda 오류가 항상 눈에 띄는 것은 아니지만, 대부분 고치기 어렵지 않다. Lambda 설정 오류는 예외가 아니라 규칙이다.네가 할 수 있는 가장 좋은 일은 네가 선택한 IaC 도구를 익히는 것이다.로컬 Lambda 소스를 찾는 방법, 패키지를 구성하는 방법, 업로드하는 방법에 대해 알아봅니다.
마지막으로 AWS에 배치된 모든 내용은 CloudFormation 템플릿 파일에 정의되거나 IaC 도구에서 생성됩니다. 이 도구는 ZIP 압축 파일이 있는 S3 저장소를 가리킵니다.
마지막 수단으로 만약 당신이 정말 무슨 일이 일어났는지, 이 람바다 설정 오류를 어떻게 감지하거나 복구하는지 모른다면, 클라우드 포메이션에 업로드된 템플릿을 찾아서 그것을 가리키는 S3 버킷의 내용과 비교해 보세요.

문제가 어디에 있는지 알고 싶으시면 Well-Architected Insights feature을 통해 현재 설정이 시스템 전체에 미치는 영향, 어떤 영향을 미치는지, 어떻게 대처해야 하는지를 빠르고 쉽게 알 수 있습니다.  Try it out for yourself .
자세히 보기:
AWS Lambda Error Handling Step Functions
AWS Lambda Logging: Error Types
AWS Lambda configuration error

좋은 웹페이지 즐겨찾기