<질문>
file.csv를 S3 버킷에 놓을 때 내 람다 함수에서 아래 오류가 표시됩니다. 파일이 크지 않고 읽기 위해 파일을 열기 전에 60초 절전 모드를 추가했지만 어떤 이유로 파일에 추가 ".6CEdFe7C"가 추가되었습니다. 왜 그런 겁니까?
[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.6CEdFe7C"를 다운로드하려고 시도하는 이유는 무엇입니까? 함수가 트리거될 때 파일은 file.csv.xxxxx이지만 75행에 도달할 때까지 파일 이름이 file.csv로 바뀌었나 봅니다.
<답변1>
뿐/tmp
AWS Lambda에서 쓸 수 있는 것 같습니다.
따라서 다음과 같이 작동합니다.
filepath = '/tmp/' + key
참조:
- https://aws.amazon.com/blogs/compute/choosing-between-aws-lambda-data-storage-options-in-web-apps
- https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
<답변2>
에 따르면http://boto3.readthedocs.io/en/latest/guide/s3-example-download-file.html
예제에서는 클라우드 이름에 첫 번째 매개변수를 사용하고 다운로드할 로컬 경로에 두 번째 매개변수를 사용하는 방법을 보여줍니다.
한편,amazaon docs, 말한다
따라서 파일 생성을 위한 512MB가 있습니다. 다음은 람다 aws의 내 코드입니다. 나를 위해 매력처럼 작동합니다.
.download_file(Key=nombre_archivo,Filename='/tmp/{}'.format(nuevo_nombre))
<답변3>
나는 람다에 대한 코드를 업로드했을 때 깨달았다directly as a zip file
에만 쓸 수 있었다./tmp
폴더에서 코드를 업로드할 때S3
에 쓸 수 있었다.project root folder
도.
<답변4>
또한 C#의 경우 완벽하게 작동합니다.
using (var fileStream = File.Create("/tmp/" + fName))
{
str.Seek(0, SeekOrigin.Begin);
str.CopyTo(fileStream);
}
'개발 > Python' 카테고리의 다른 글
[파이썬] pandas DataFrame의 열에 대한 .str.split() 작업 후 마지막 열 가져오기 (0) | 2022.10.10 |
---|---|
[파이썬] Matplotlib에서 그리드 간격 변경 및 눈금 레이블 지정 (0) | 2022.10.10 |
[파이썬] 유니코드 정규화 (0) | 2022.10.09 |
[파이썬] POST를 사용한 Flask 예제 (0) | 2022.10.09 |