使用测试事件运行aws lambda上载文件(python)
我想创建lambda函数,将csv文件上传到s3 bucket。为了进行性能测试,我正在尝试配置测试事件(使用s3_put defaul模板只输入我的bucket名称和新文件名) 测试事件使用测试事件运行aws lambda上载文件(python),python,amazon-web-services,aws-lambda,Python,Amazon Web Services,Aws Lambda,我想创建lambda函数,将csv文件上传到s3 bucket。为了进行性能测试,我正在尝试配置测试事件(使用s3_put defaul模板只输入我的bucket名称和新文件名) 测试事件 { "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion": "eu-central-1", "eventTime": "1970-01-01T00:00:
{
"Records": [
{
"eventVersion": "2.0",
"eventSource": "aws:s3",
"awsRegion": "eu-central-1",
"eventTime": "1970-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"responseElements": {
"x-amz-request-id": "EXAMPLE123456789",
"x-amz-id-2": "EXAMPLE123/5678abcder455relambdaisawesome/mnopqrdtygfwxyzABCDEFGH"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "testConfigRule",
"bucket": {
"name": "MY_BUCKET",
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"arn": "arn:aws:s3:::MY_BUCKET"
},
"object": {
"key": "MY_NEY_FILE_NAME",
"size": 1024,
"eTag": "01234567847647383cdef0123456789abcdef",
"sequencer": "0A1B2Cghfdjd3D4E5F678901"
}
}
}
]
}
lambda_函数.py
import os
import boto3
from botocore.exceptions import ClientError
SECRET_KEY = "XXXX"
ACCESS_KEY = "XXXX"
processed_folder = "drivers"
def lambda_handler(event, context):
"""Upload a file to an S3 bucket
"""
for record in event['Records']:
# Create some variables that make it easier to work with the data in the
# event record.
bucket = record['s3']['bucket']['name'
key = record['s3']['object']['key']
file_name = ????
s3_client = boto3.client('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)
try:
response = s3_client.upload_file(file_name, bucket, key)
except ClientError as e:
logging.error(e)
return False
return True
由于明显的原因,我得到了一个错误“name”file\u name“没有定义”
如何将文件添加到配置中?S3中的文件名位于“键”组件中 例如,文件名为“mountains.jpg”的Bucket“images”文件夹中名为“Resources”的文件的文件键为“images/mountains.jpg” 因此,为了提取文件名,您必须拆分文件名并从中提取
顺便说一下,test_事件的格式是在S3上添加文件时触发的事件格式。将文件添加到S3时是否触发lambda s3 fileupload函数接受bucketname、密钥和文件内容。
因此,理想情况下,您的文件名应该包含要上载的文件的内容。test\u事件只是lambda函数页面下拉列表中的默认示例。我所更改的只是名称bucket和文件名。据我所知,键值是s3中保存的文件的路径。我感兴趣的是如何指定我将要下载的文件的路径,例如,从Internet下载。为此,您只需将测试事件作为{filename:“yourfilename”}传递。(在下拉列表中选择HelloWorld模板)。在代码中,您可以通过事件[“filename”]访问文件名