【问题标题】:Boto3 S3 list_objects_v2 Not Returning Any ObjectsBoto3 S3 list_objects_v2 不返回任何对象
【发布时间】:2022-09-27 17:24:02
【问题描述】:

我正在使用 Boto3 尝试通过 AWS Lambda Python 脚本从 S3 存储桶中获取密钥列表。无论我尝试什么,存储桶都不会返回任何对象。

    import json, boto3, os

def getConfig():
    cfg = {
        \"aws_key_id\": os.getenv(\"AWS_KEY_ID\", \"\"),
        \"aws_secret\": os.getenv(\"AWS_SECRET\", \"\"),
    }
    return cfg

def lambda_handler(event, context):
    cfg = getConfig()
    bucket_name = \"zachs-taxi\"
    session = boto3.Session(
        aws_access_key_id=cfg.get(\'aws_key_id\'),
        aws_secret_access_key=cfg.get(\'aws_secret\')
        )
    s3 = session.client(\'s3\')

我尝试了以下两种方法,但都返回空:

    response = s3.list_objects_v2(
        Bucket=bucket_name)
    for content in response.get(\'Contents\', []):
        print(content[\'Key\'])

    paginator = s3.get_paginator(\"list_objects_v2\")
    for page in paginator.paginate(Bucket=bucket_name):
        for content in page.get(\'Contents\', ()):
            print(content[\'Key\'])

S3 存储桶是公开的,我可以访问它。里面有一个名为 content 的文件夹,该文件夹中有一个 .png 文件。

任何帮助,将不胜感激。谢谢!

  • 什么是实际的桶?如果它是公开的,你能分享它吗?
  • 边注:以防万一您不知道,通常不需要将凭证传递给 AWS Lambda 函数。只需将 IAM 角色分配给 Lambda 函数,boto3 就会自动获得访问 AWS 的凭据。不必创建session 对象。

标签: python amazon-web-services amazon-s3 boto3


【解决方案1】:

当我在自己的计算机上运行您的代码时(使用不同的存储桶名称),您的代码运行得非常好:

import boto3

bucket_name = "my-bucketname"

s3 = boto3.client('s3')

response = s3.list_objects_v2(Bucket=bucket_name)
for content in response.get('Contents', []):
    print(content['Key'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多