S3 PutObject静默失败?

时间:2019-02-25 20:42:08

标签: python python-3.x amazon-web-services amazon-s3

我一直试图使用S3.Object.put()方法以编程方式将SNS消息上传到S3存储桶,如下所示:

bucket_resource=boto3.resource('s3')
bucket_client = boto3.client('s3')
body = subject + message
object = bucket_resource.Object(bucket_name, folder+'/'+fn)
object.put(Body=body)

这没有用,所以我尝试了以下尝试将对象上传到特定的S3存储桶。

body = subject + message
folder = datetime.datetime.today().strftime('%Y-%m-%d')
fn = datetime.datetime.today().strftime('%H:%M:%S')
key = folder_name + '/' + fn
bucket_resource = s3.Bucket(bucket_name)
bucket.upload_file(body, key)

但是,这两种方法都无提示地失败。我没有收到任何拒绝访问,错误消息等信息,但也没有将消息上传到存储桶。我不确定每次调用该功能后会发生什么情况,并且不希望对以编程方式成功将文件上传到存储桶的人员提供任何指导。

注意: 我有存储桶策略,我的帐户是唯一可以将对象放入存储桶的帐户。我是否需要一个附录才能授予Lambda将对象放入存储桶的权限?

2 个答案:

答案 0 :(得分:0)

有关处理python中的错误的信息,请参见here

基本上围绕sdk调用try / catch异常,类似于:

import boto3
from botocore.exceptions import ClientError, ParamValidationError

try:
    bucket_resource=boto3.resource('s3')
    bucket_client = boto3.client('s3')
    body = subject + message
    object = bucket_resource.Object(bucket_name, folder+'/'+fn)
    object.put(Body=body)
except s3.exceptions.<fill in>:
    print("known error occured")
except ClientError as e:
    print("Unexpected error: %s" % e)

This is the link the original poster provided,它显示了您可以为S3客户端捕获的可能的异常

答案 1 :(得分:0)

对我来说也没有错误,但是我正在使用.NET Core SDK。原来我的问题是函数能够在将文件放入S3之前完成处理。在.NET SDK中,PutObject调用是异步(PutObjectAsync),即使我一直在等待它完成,但由于我所拥有的功能层次,事实证明我没有正确执行此操作。

对于在S3中没有错误且没有文件而苦苦挣扎的任何人,请在文件实际上传到S3之前检查您的功能没有完成。