python - S3 PutObject 静默失败?
问题描述
我一直在尝试使用 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 将对象放入存储桶的权限?
解决方案
我也没有错误,但我使用的是 .NET Core SDK。原来我的问题是功能在它能够将文件放入 S3 之前完成。在 .NET SDK 中,PutObject 调用是异步的 (PutObjectAsync),即使我在等待它完成,但由于我拥有的功能层,我没有正确执行该操作。
对于在 S3 中没有错误且没有文件的任何人,请在文件实际上传到 S3 之前检查您的函数是否未完成。
推荐阅读
- nginx - URL的nginx位置proxy_pass
- python - 如何使用 Python elasticsearch_dsl 在分析器中包含 shingle elasticsearch 过滤器
- python - 如何通过 Python 列表避免访问节点
- excel - 如果满足多个条件,则选择语句
- sql - 文本名称上的 SQL 连接表(而不是按 id)
- abaqus - 在 Abaqus 中的 *Instance entry 中计算平移和旋转轴和角度
- javascript - 使用 vuex mapGetters 在用户的状态 obj 中进行迭代
- python - 在我的 Python 脚本中从 Delphi DLL 获取 PChar 参数
- c++ - 如何使用 ndk-build.cmd 构建 Android .so 文件
- node.js - 为什么等待后的布尔赋值会触发原子更新错误?