使用 Lambda 从 S3 读取数据
Reading data from S3 using Lambda
我有一系列 json 文件存储在 AWS 上的 S3 存储桶中。
我希望使用 AWS lambda python 服务来解析这个 json 并将解析的结果发送到 AWS RDS MySQL 数据库。
我有一个稳定的 python 脚本用于解析和写入数据库。我需要 lambda 脚本来遍历 json 文件(添加时)。
每个json文件包含一个列表,简单的由results = [content]
组成
在伪代码中我想要的是:
- 连接到 S3 存储桶(
jsondata
)
- 读取JSON文件的内容(
results
)
- 为此数据执行我的脚本 (
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)
编辑
我误会了什么。 lambda 必须自行下载,而不是读取 S3 中的文件。
从 here 看来你必须给 lambda 一个下载路径,它可以从中访问文件本身
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)
您可以使用 bucket.objects.all()
获取存储桶中所有对象的列表(您还可以使用 filter
、page_size
和 limit
等替代方法,具体取决于你的需要)
这些方法 return 一个包含 S3.ObjectSummary
个对象的迭代器,您可以从那里使用方法 object.get
检索文件。
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
emailcontent = response['Body'].read().decode('utf-8')
我有一系列 json 文件存储在 AWS 上的 S3 存储桶中。
我希望使用 AWS lambda python 服务来解析这个 json 并将解析的结果发送到 AWS RDS MySQL 数据库。
我有一个稳定的 python 脚本用于解析和写入数据库。我需要 lambda 脚本来遍历 json 文件(添加时)。
每个json文件包含一个列表,简单的由results = [content]
在伪代码中我想要的是:
- 连接到 S3 存储桶(
jsondata
) - 读取JSON文件的内容(
results
) - 为此数据执行我的脚本 (
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)
编辑
我误会了什么。 lambda 必须自行下载,而不是读取 S3 中的文件。
从 here 看来你必须给 lambda 一个下载路径,它可以从中访问文件本身
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)
您可以使用 bucket.objects.all()
获取存储桶中所有对象的列表(您还可以使用 filter
、page_size
和 limit
等替代方法,具体取决于你的需要)
这些方法 return 一个包含 S3.ObjectSummary
个对象的迭代器,您可以从那里使用方法 object.get
检索文件。
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
emailcontent = response['Body'].read().decode('utf-8')