programing

S3에서 파일을 다운로드할 때 AWS Lambda에서 "읽기 전용 파일 시스템" 오류가 발생했습니다.

bestprogram 2023. 9. 19. 21:17

S3에서 파일을 다운로드할 때 AWS Lambda에서 "읽기 전용 파일 시스템" 오류가 발생했습니다.

S3 버킷에 file.csv를 떨어뜨렸을 때 lambda 함수에서 아래 오류가 나타납니다.파일 크기가 크지 않고 읽기 위해 파일을 열기 전에 60초 동안 절전 모드를 추가하기도 했지만 어떤 이유에서인지 파일에 ".6"이 추가로 포함되어 있습니다.여기에 "CEdFe7C"가 첨부되어 있습니다.왜 그런 것일까요?

[Errno 30] Read-only file system: u'/file.csv.6CEdFe7C': IOError
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 75, in lambda_handler
s3.download_file(bucket, key, filepath)
File "/var/runtime/boto3/s3/inject.py", line 104, in download_file
extra_args=ExtraArgs, callback=Callback)
File "/var/runtime/boto3/s3/transfer.py", line 670, in download_file
extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 685, in _download_file
self._get_object(bucket, key, filename, extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 709, in _get_object
extra_args, callback)
File "/var/runtime/boto3/s3/transfer.py", line 723, in _do_get_object
with self._osutil.open(filename, 'wb') as f:
File "/var/runtime/boto3/s3/transfer.py", line 332, in open
return open(filename, mode)
IOError: [Errno 30] Read-only file system: u'/file.csv.6CEdFe7C'

코드:

def lambda_handler(event, context):

    s3_response = {}
    counter = 0
    event_records = event.get("Records", [])

    s3_items = []
    for event_record in event_records:
        if "s3" in event_record:
            bucket = event_record["s3"]["bucket"]["name"]
            key = event_record["s3"]["object"]["key"]
            filepath = '/' + key
            print(bucket)
            print(key)
            print(filepath)
            s3.download_file(bucket, key, filepath)

위의 결과는 다음과 같습니다.

mytestbucket
file.csv
/file.csv
[Errno 30] Read-only file system: u'/file.csv.6CEdFe7C'

키/파일이 "file.csv"인 경우 s3.download_file 메서드는 왜 "file.csv.6"을 다운로드하려고 합니까?CEdFe7C?함수가 트리거되면 파일이 file.csv.xxxxxx인데 75번 줄에 도착할 때쯤이면 파일 이름이 file.csv로 바뀌게 되는 건가요?

오직./tmpAWS Lambda로 쓸 수 있는 것 같습니다.

따라서 다음과 같은 효과가 있습니다.

filepath = '/tmp/' + key

참조:

http://boto3.readthedocs.io/en/latest/guide/s3-example-download-file.html 에 의하면.

예제에서는 클라우드 이름에 대한 첫 번째 매개 변수와 다운로드할 로컬 경로에 대한 두 번째 매개 변수를 사용하는 방법을 보여 줍니다.

enter image description here

다른 말로, 아마존 문서들은 말합니다.

따라서 우리는 파일 생성을 위한 512MB를 보유하고 있습니다.람다와우에 대한 제 코드는 여기 있습니다. 매력적으로 작동합니다.

.download_file(Key=nombre_archivo,Filename='/tmp/{}'.format(nuevo_nombre))

람다에 대한 코드를 업로드했을 때 알아차렸습니다.directly as a zip file나는 오직 에만 편지를 쓸 수 있었습니다./tmpfolder, 그러나 업로드된 코드는S3나는 그에게 편지를 쓸 수 있었습니다.project root folder너무.

C#의 경우에도 완벽한 작업:

using (var fileStream = File.Create("/tmp/" + fName))
{
   str.Seek(0, SeekOrigin.Begin);
   str.CopyTo(fileStream);
}

언급URL : https://stackoverflow.com/questions/39383465/error-read-only-file-system-in-aws-lambda-when-downloading-a-file-from-s3