'eu-west-1'리전의 s3 이벤트 (파일 생성)에서 트리거되는 AWS 람다를 개발했습니다. 이 람다는이를 트리거 한 "csv"파일을 읽고 처리합니다 (따라서 존재합니다!). 총 실행 시간은 최대 4 초입니다. 파일은 약 10 초마다 도착하며 항상 몇 주 동안 완벽하게 작동했습니다. 오늘, 20 분 동안 "FileNotFoundError"예외는 람다가 그것을 트리거 한 파일을 읽을 때 체계적으로 오류를 일으켰습니다. 몇 분 후 오류를 생성 한 파일을 수동으로 다시 업로드하면 람다가 성공적으로 실행됩니다.
다음은 람다 코드의 샘플입니다.
import pandas as pd
import boto3
...
def lambda_handler(event, context):
for record in event['Records']:
bucket_name = record['s3']['bucket']['name']
source_key = unquote_plus(record['s3']['object']['key'])
df = pd.read_csv(f"s3://{bucket_name}/{source_key}", sep=',', index_col=0) # Returns sometimes "FileNotFoundError"
...
다음은 람다 실행에 대해 반환 된 오류 로그입니다.
[ERROR] FileNotFoundError: frefin-bitbot-prd-202714940105-eu-west-1-data/data/collection/kraken/order_book/depth-100/compilation/xxbtzusd/timeframe-10/shift-0/XXBTZUSD_1599718540_1599718550_10_0.csv
Traceback (most recent call last):
File "/var/task/entrypoint.py", line 96, in lambda_handler
df = pd.read_csv(f"s3://{bucket_name}/{source_key}", sep=',', index_col=0)
File "/var/task/pandas/io/parsers.py", line 686, in read_csv
return _read(filepath_or_buffer, kwds)
File "/var/task/pandas/io/parsers.py", line 435, in _read
filepath_or_buffer, encoding, compression
File "/var/task/pandas/io/common.py", line 222, in get_filepath_or_buffer
filepath_or_buffer, mode=mode or "rb", **(storage_options or
{}
)
File "/var/task/fsspec/core.py", line 133, in open
out = self.__enter__()
File "/var/task/fsspec/core.py", line 101, in __enter__
f = self.fs.open(self.path, mode=mode)
File "/var/task/fsspec/spec.py", line 844, in open
**kwargs
File "/var/task/s3fs/core.py", line 378, in _open
autocommit=autocommit, requester_pays=requester_pays)
File "/var/task/s3fs/core.py", line 1097, in __init__
cache_type=cache_type)
File "/var/task/fsspec/spec.py", line 1134, in __init__
self.details = fs.info(path)
File "/var/task/s3fs/core.py", line 527, in info
if self.version_aware or (key and self._ls_from_cache(path) is None) or refresh:
File "/var/task/fsspec/spec.py", line 321, in _ls_from_cache
raise FileNotFoundError(path)
그것에 대해 두 가지 질문이 있습니다.
미리 감사드립니다
이 상황을 가장 잘 관리하는 방법은 무엇입니까?
왜 그런 일이 일어 났는지에 대한 설명은 없지만, 어떻게 대처할 것인지에 대한 아이디어가 있거나 최소한 그러한 상황을 관리하려고 노력합니다. 함수에서 오류 재시도 및 지수 백 오프 를 구현할 수 있습니다 . 오류가 발생하면이를 포착하고 다른 지연으로 몇 번 재 시도합니다.
백 오프가 도움이되지 않고 실패가 검역 된 경우 이러한 오류를 유발하는 "불량"S3 이벤트를 캡처하도록 함수에 배달 못한 편지 대기열 을 설정할 수 있습니다. 이렇게하면 자동으로 응답 할 수 있습니다 (예 : 알림 받기 및 문제 해결).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다