AWS 람다:작업 시간 초과
우리는 학교 프로젝트에서 AWS Lambda에서 실행되는 Java 코드를 작성하라는 요청을 받았습니다.특정 URL의 소스 코드를 취득하여 S3 버킷에 업로드합니다.Java 코드가 AWS Lambda에서 실행되고 있어야 합니다.
Java의 String 변수에 소스 코드를 가져옵니다.다음으로 /tmp 디렉토리의 파일에 String을 쓰려고 하는 while loop이 있습니다.그런 다음 S3에 파일을 업로드한다.
모든 것이 동작하지만 특정 URL이1개밖에 없습니다.지금까지 문제를 추적하고 있습니다.
try {
BufferedWriter out = new BufferedWriter(new FileWriter("/tmp/url.txt"));
out.write(source_code); //Replace with the string
//you are trying to write
out.close();
}
catch (IOException e) {
System.out.println("Exception ");
}
가장 이상한 것은, 내가 로컬로 코드를 테스트하면 모든 것이 작동한다는 것이다.파일은 컴퓨터의 /tmp 디렉토리에 작성되어 S3 버킷에 업로드 됩니다.그러나 Lambda에서 코드를 실행하면 다음과 같은 오류가 발생합니다.
Task timed out after 15.00 seconds
이 경우 Lambda가 임시 디렉토리에 파일을 쓰지 못하고 다른 사용자와 함께 작동하는 이유를 알고 계십니까?
Amazon Lambda는 이벤트에 반응하는 이벤트 구동 시스템으로 사용하도록 설계되었습니다.흐름은 다음과 같습니다.
- Lambda를 트리거하는 무언가가 발생함(Amazon S3로의 업로드, Amazon Kinesis 스트림으로 들어오는 데이터, Lambda 함수를 직접 호출하는 애플리케이션 등)
- 람다 함수가 생성되고 트리거 이벤트의 데이터가 전달됩니다.
- 람다 함수가 실행됩니다.
람다 함수는 최대 실행 시간 15분으로 제한됩니다(이는 원래 5분 타임아웃에서 최근 증가).실제 한계는 람다 함수가 생성될 때 구성됩니다.Lambda 함수는 큰 응용 프로그램이 아닌 작고 빠른 기능을 의미하기 때문에 한계가 있습니다.
가 「이렇게 하다」라고 .Task timed out after 15.00 seconds
이는 AWS가 15초의 런타임에 도달하면 의도적으로 작업을 중지시켰다는 것을 의미합니다.이 함수는 당시 함수가 수행하던 작업이나 처리 중인 파일과는 관련이 없습니다.
수정 방법: 람다 함수의 구성 페이지에서 시간 초과 설정을 늘립니다.
타임아웃을 15초로 설정한 것 같습니다.이 스크린샷에 설명된 대로 타임아웃을 늘릴 수 있으며 람다 설정에 따라 실행할 수 있는 최대 시간은 15분입니다.
작업이 로컬에서 정상적으로 동작했지만 람다에서 타임아웃된 경우 람다 인스턴스에 할당된 메모리를 늘려야 했기 때문입니다.
를 사용하고 때, 이 아웃의 .async
비동기 기능의 핸들러에 따라 패턴이 다르다는 점에 주의해 주십시오.
대신
exports.handler = function (event, context, callback) {
callback(null, {
statusCode: 200,
body: JSON.stringify({/* return stuff here */})
});
};
그건…
exports.handler = async function (event, context) {
return {
statusCode: 200,
body: JSON.stringify({/* return stuff here */})
};
};
람다 함수의 타임아웃을 최대 15분까지 늘리거나 람다 함수에 대한 메모리 할당을 늘려 빠르게 만들 수 있습니다.메모리를 최대 3008MB까지 늘릴 수 있습니다.최소값은 128MB입니다.다음과 같습니다. 람다 함수에 대용량 메모리 할당을 할당하면 람다 함수를 실행하는 데 걸리는 시간이 단축되고 그 반대의 경우도 마찬가지입니다.메모리를 많이 할당하면 람다 함수를 실행할 때마다 비용이 더 많이 듭니다.람다 함수에 할당된 타임아웃 시간과 메모리와의 균형을 파악해야 합니다.대용량 메모리만 할당하지 마십시오.그러면 결과를 바로 확인할 수 있고 비용 및 요구 사항도 분석할 수 있습니다.변경 타임아웃 및 메모리 할당에 그림이 첨부되어 있습니다.[ Lambda function ]-> [ Configuration ]-> [ Basic Setting ]를 선택하여 설정을 검색합니다.
AWS-SDK를 기능 본체 외부에 배치하여 문제를 해결했습니다.
var AWS = require("aws-sdk");
exports.handler = function(event, context, callback)
{
//var AWS = require("aws-sdk"); //Error: Task timed out after 3.00 seconds
var docClient = new AWS.DynamoDB.DocumentClient();
console.log("Lambda starts");
...
최근에 AWS Lambda 기능으로 작업하기 위해 POC 작업을 하고 있었습니다.저도 같은 문제에 직면해 있었습니다(15.01초 후에 태스크가 타임아웃 되었습니다).메모리 할당을 늘리면 문제가 해결됩니다.몇 초 안에 반응을 얻을 수 있는 게 장점이에요.그래서, 나는 오류가 조금 오해의 소지가 있다고 생각한다.장애의 정확한 근본 원인을 제공해야 합니다.
저도 같은 문제에 직면했지만 간헐적으로 발생하고 있었습니다.Insights n XRay를 사용하여 디버깅하는 데 훨씬 더 많은 시간을 허비했지만 아무런 성과도 얻지 못했습니다.
마지막으로 VPC에 2개의 서브넷이 있고 프라이빗 퍼블릭이 있습니다.그래서 개인 서브넷만 유지하고 다른 서브넷은 제거했습니다.
그리고 Voila!!
더 이상 실패하지 않아..하지만 그 이유는 아직 알 수 없지만, 계속 알려드릴 것입니다.단일 서브넷에서 lamda를 실행해 보십시오.
먼저 /tmp/에 쓰는 이유는 무엇입니까?람다 함수가 실행되는 위치에 글을 쓰십니까?
그러나 더 좋은 방법은 문자열을 S3 파일로 쓰고 싶다면 S3Object를 생성하여 AWS S3에 직접 쓰는 것입니다.예시를 보여주는 게시물은 다음과 같습니다.https://stackoverflow.com/a/29844224/358013
언급URL : https://stackoverflow.com/questions/43577746/aws-lambda-task-timed-out
'programing' 카테고리의 다른 글
오래된 데이터를 잃지 않고 FileOutputStream을 사용하여 데이터를 쓰는 방법 (0) | 2022.11.03 |
---|---|
캐시 회선 크기에 맞게 조정하는 방법 및 시기 (0) | 2022.11.03 |
Carbon을 사용하여 다른 시간대에서 UTC 가져오기 (0) | 2022.11.03 |
Chrome 콘솔에서 VueX 작업/변환 오류 (0) | 2022.11.03 |
연관 배열 개체의 JavaScript foreach 루프 (0) | 2022.11.03 |