我如何使用 aws lambda 将文件写入 s3 (python)?
How could I use aws lambda to write file to s3 (python)?
我曾尝试使用 lambda 函数将文件写入 S3,然后测试显示 "succeeded",但我的 S3 存储桶中没有任何内容。发生了什么?有谁能给我一些建议或解决方案吗?非常感谢。这是我的代码。
import json
import boto3
def lambda_handler(event, context):
string = "dfghj"
file_name = "hello.txt"
lambda_path = "/tmp/" + file_name
s3_path = "/100001/20180223/" + file_name
with open(lambda_path, 'w+') as file:
file.write(string)
file.close()
s3 = boto3.resource('s3')
s3.meta.client.upload_file(lambda_path, 's3bucket', s3_path)
我已成功将数据流式传输到 S3,必须对其进行编码才能执行此操作:
import boto3
def lambda_handler(event, context):
string = "dfghj"
encoded_string = string.encode("utf-8")
bucket_name = "s3bucket"
file_name = "hello.txt"
s3_path = "100001/20180223/" + file_name
s3 = boto3.resource("s3")
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=encoded_string)
如果数据在一个文件中,你可以读取这个文件并发送:
with open(filename) as f:
string = f.read()
encoded_string = string.encode("utf-8")
我的回答与 Tim B 非常相似,但最重要的部分是
1.Go 到 S3 存储桶并创建一个要写入的存储桶
2.Follow below steps 否则你的 lambda 将因 permission/access 而失败。我也在这里为您复制并粘贴了 link 内容,以防万一他们更改 url / 将其移至其他页面。
一个。在 IAM 控制台中打开 roles page。
b。选择创建角色。
c。创建具有以下属性的角色。
-可信实体 – AWS Lambda。
-权限 – AWSLambdaExecute。
-角色名称 – lambda-s3-role.
AWSLambdaExecute 策略具有函数管理 Amazon S3 中的对象并将日志写入 CloudWatch Logs 所需的权限。
将其复制并粘贴到您的 Lambda python 函数中
import json, boto3,os, sys, uuid
from urllib.parse import unquote_plus
s3_client = boto3.client('s3')
def lambda_handler(event, context):
some_text = "test"
#put the bucket name you create in step 1
bucket_name = "my_buck_name"
file_name = "my_test_file.csv"
lambda_path = "/tmp/" + file_name
s3_path = "output/" + file_name
os.system('echo testing... >'+lambda_path)
s3 = boto3.resource("s3")
s3.meta.client.upload_file(lambda_path, bucket_name, file_name)
return {
'statusCode': 200,
'body': json.dumps('file is created in:'+s3_path)
}
我曾尝试使用 lambda 函数将文件写入 S3,然后测试显示 "succeeded",但我的 S3 存储桶中没有任何内容。发生了什么?有谁能给我一些建议或解决方案吗?非常感谢。这是我的代码。
import json
import boto3
def lambda_handler(event, context):
string = "dfghj"
file_name = "hello.txt"
lambda_path = "/tmp/" + file_name
s3_path = "/100001/20180223/" + file_name
with open(lambda_path, 'w+') as file:
file.write(string)
file.close()
s3 = boto3.resource('s3')
s3.meta.client.upload_file(lambda_path, 's3bucket', s3_path)
我已成功将数据流式传输到 S3,必须对其进行编码才能执行此操作:
import boto3
def lambda_handler(event, context):
string = "dfghj"
encoded_string = string.encode("utf-8")
bucket_name = "s3bucket"
file_name = "hello.txt"
s3_path = "100001/20180223/" + file_name
s3 = boto3.resource("s3")
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=encoded_string)
如果数据在一个文件中,你可以读取这个文件并发送:
with open(filename) as f:
string = f.read()
encoded_string = string.encode("utf-8")
我的回答与 Tim B 非常相似,但最重要的部分是
1.Go 到 S3 存储桶并创建一个要写入的存储桶
2.Follow below steps 否则你的 lambda 将因 permission/access 而失败。我也在这里为您复制并粘贴了 link 内容,以防万一他们更改 url / 将其移至其他页面。
一个。在 IAM 控制台中打开 roles page。
b。选择创建角色。
c。创建具有以下属性的角色。
-可信实体 – AWS Lambda。
-权限 – AWSLambdaExecute。
-角色名称 – lambda-s3-role.
AWSLambdaExecute 策略具有函数管理 Amazon S3 中的对象并将日志写入 CloudWatch Logs 所需的权限。
将其复制并粘贴到您的 Lambda python 函数中
import json, boto3,os, sys, uuid from urllib.parse import unquote_plus s3_client = boto3.client('s3') def lambda_handler(event, context): some_text = "test" #put the bucket name you create in step 1 bucket_name = "my_buck_name" file_name = "my_test_file.csv" lambda_path = "/tmp/" + file_name s3_path = "output/" + file_name os.system('echo testing... >'+lambda_path) s3 = boto3.resource("s3") s3.meta.client.upload_file(lambda_path, bucket_name, file_name) return { 'statusCode': 200, 'body': json.dumps('file is created in:'+s3_path) }