许多场景需要您使用 JSON 格式的数据,并且您希望提取并处理数据,然后将其保存到表中以供将来使用
在本文中,我们将讨论使用 Lambda 函数将 JSON 格式的数据从 S3 存储桶加载到 DynamoDB 表
下面的架构显示我们正在使用 3 个 AWS 服务
以下服务的简要说明作为茶点:
我们将逐步完成部署上图的步骤和配置
1-使用以下配置创建 Lambda 函数
从头开始的作者
函数名称:ParserDemo
运行时:Python 3.1x
其余保留默认
创建 Lambda 后,您需要修改超时配置和执行角色,如下所示:
我编写了这个Python代码来执行逻辑
import json import boto3 s3_client = boto3.client('s3') dynamodb = boto3.resource('dynamodb') def lambda_handler(event, context): bucket_name = event['Records'][0]['s3']['bucket']['name'] # Getting the bucket name from the event triggered by S3 object_key = event['Records'][0]['s3']['object']['key'] # Getting the Key of the item when the data is uploaded to S3 print(f"Bucket: {bucket_name}, Key: {object_key}") response = s3_client.get_object( Bucket=bucket_name, Key=object_key ) # We will convert the streamed data into bytes json_data = response['Body'].read() string_formatted = json_data.decode('UTF-8') #Converting data into string dict_format_data = json.loads(string_formatted) #Converting Data into Dictionary # Inserting Data Into DynamoDB table = dynamodb.Table('DemoTable') if isinstance(dict_format_data, list): #check if the file contains single record for record in dict_format_data: table.put_item(Item=record) elif isinstance(dict_format_data, dict): # check if the file contains multiple records table.put_item(Item=data) else: raise ValueError("Not Supported Format") # Raise error if nothing matched
2- 创建 S3 存储桶
BucketName:使用唯一的名称
将其余配置保留为默认值
将创建的 S3 存储桶作为触发器添加到 lambda 函数,如下所示:
3- 使用以下配置在 DynamoDB 中创建表
表名称:DemoTable
分区键:UserId
桌子设置:定制
容量模式:已配置
为了节省成本,将预配置容量单位配置为低值读/写(1 或 2 个单位)
现在设置已准备就绪,您可以通过将文件上传到 S3 来测试它,然后您将找到在 DynamoDB 表上创建的项目以及您上传到文件中的记录。
Lambda 函数的 CloudWatch Logs
DynamoDB 项目
我希望您觉得这很有趣,如果您有任何意见,请告诉我。
S3 API
DynamoDB API
AWS 服务的 boto3 实践
以上是使用 Lambda 函数从 So DynamoDB 解析和加载数据的详细内容。更多信息请关注PHP中文网其他相关文章!