首页 > 解决方案 > 如何根据 lambda 处理程序中的后缀将文件复制到不同的存储桶

问题描述

如何将带有 csv 的文件复制到另一个存储桶中

我在 AWS 中有 3 个存储桶 a)test b)testjson c)testcsv

我已经上传 data.json 和 data.csv 到测试桶

上传文件后发生以下事情

  1. data.json 文件被复制到 testjson 存储桶

  2. data.csv 文件被复制到 testcsv 存储桶

  3. data.csv 必须插入到 dynamodb

  4. data.json 必须插入到 dynamodb

数据.json

{
"emp_id": "3",
"Name" : "Madk"
"Company": "FB"
}

数据.csv

emp_id,Name,Company
3,Madk,FB 

下面是将json放入dynamodb的第4个代码,它工作正常,我需要添加第一个第二个和第三个

import json
import boto3

s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    json_filename = event['Records'][0]['s3']['object']['key']
    json_object = s3_client.get_object(Bucket=bucket,Key=json_filename)
    jsonFileReader = json_object['Body'].read()
    jsonDict = json.loads(jsonFileReader)
    table = dynamodb.Table('employees')
    table.put_item(Item=jsonDict)
    
    return 'file uploaded'
    #print (bucket,json_filename)

在这个 lambda 处理程序中,我只需将 .json 复制到另一个存储桶中并将 .csv 复制到另一个存储桶中,我编写了将我的 json 添加到 dynamodb 的代码,同样我需要将 csv 文件中的内容添加到 dynamodb

标签: pythonamazon-web-servicesaws-lambda

解决方案


这只是设计模式,实现您的逻辑并在您遇到错误时发布

import json
import boto3

s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    filename = event['Records'][0]['s3']['object']['key']
    if(filename.split('.')[1].lower()=='json'):
        moveJSON(bucket,filename)
    elif(filename.split('.')[1].lower()=='csv'):
        moveCSV(bucket, filename)

def moveJSON(bucket, filename):
    #Implement your logic to move to test bucket
    #Implement your logic to move to testjson bucket
    #Below is your current logic to move to dynamodb
    json_object = s3_client.get_object(Bucket=bucket,Key=filename)
    jsonFileReader = json_object['Body'].read()
    jsonDict = json.loads(jsonFileReader)
    table = dynamodb.Table('employees')
    table.put_item(Item=jsonDict)    
    return 'file uploaded'

def moveCSV(bucket, filename):
    #Implement your logic to move to test bucket
    #Implement your logic to move to testcsv bucket
    #Implement your logic to move to dynamodb

推荐阅读