programing

람다를 사용하여 S3에서 데이터 읽기

batch 2023. 2. 25. 20:10
반응형

람다를 사용하여 S3에서 데이터 읽기

AWS의 S3 버킷에 json 파일 범위가 저장되어 있습니다.

AWS lambda python 서비스를 사용하여 이 json을 해석하고 해석 결과를 AWS RDS MySQL 데이터베이스로 보내고 싶습니다.

파싱과 데이터베이스 쓰기를 수행하기 위한 안정적인 python 스크립트를 가지고 있습니다.json 파일이 추가되었을 때 반복하기 위해 lambda 스크립트가 필요합니다.

각 json 파일에는 다음과 같은 단순한 목록이 포함되어 있습니다.results = [content]

의사 코드에서 원하는 것은 다음과 같습니다.

  1. S3 버킷에 접속합니다(jsondata)
  2. JSON 파일의 내용을 읽습니다(results)
  3. 이 데이터에 대해 스크립트를 실행합니다(results)

보유하고 있는 버킷을 다음 기준으로 나열할 수 있습니다.

import boto3

s3 = boto3.resource('s3')

for bucket in s3.buckets.all():
    print(bucket.name)

제공:

jsondata

그러나 결과를 읽기 위해 이 버킷에 액세스할 수 없습니다.

는 없는 것 같습니다.read또는load기능.

나는 이런 것을 원한다.

for bucket in s3.buckets.all():
   print(bucket.contents)

편집

제가 뭔가 오해를 하고 있어요.람다는 S3에서 파일을 읽는 대신 파일을 직접 다운로드해야 합니다.

여기서부터 lamda가 파일 자체에 액세스할 수 있는 다운로드 경로를 제공해야 할 것 같습니다.

import libraries

s3_client = boto3.client('s3')

def function to be executed:
   blah blah

def handler(event, context):
    for record in event['Records']:
        bucket = record['s3']['bucket']['name']
        key = record['s3']['object']['key'] 
        download_path = '/tmp/{}{}'.format(uuid.uuid4(), key)
        s3_client.download_file(bucket, key, download_path)
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
emailcontent = response['Body'].read().decode('utf-8')

를 사용하여 버킷 내의 모든 객체의 목록을 가져올 수 있습니다(또한 다음과 같은 대체 방법도 있습니다).filter,page_size그리고.limit니즈에 따라 다름)

이러한 메서드는 오브젝트가 포함된 반복기를 반환하므로 이 메서드에서 메서드를 사용할 수 있습니다.object.get파일을 가져옵니다.

언급URL : https://stackoverflow.com/questions/33782984/reading-data-from-s3-using-lambda

반응형