0

当我尝试测试用 Python 3.7 boto3 AWS SDK 编写的以下 lambda 函数时,我遇到了以下代码行(lambda 代码块中的最后一行)的问题。lambda 函数删除 S3 存储桶中的对象,迭代存储桶中的每个对象。 

client.Object(bucket, key).delete()

当我保存并运行代码时,我在上述行中遇到的错误,也是下面 lambda 函数代码块中的最后一行,如下所示。请求帮助。

“errorMessage”:“预期的字符串或类似字节的对象”,“errorType”:“TypeError”

【Lambda函数代码块】

import boto3
import json
import uuid
import csv

def lambda_handler(event, context):

   recordId = str(uuid.uuid4())
   print (recordId)
   client = boto3.resource(
       's3',
   region_name='us-east-1',
       aws_access_key_id='XXXXXXXXXXXXXXX' ,
       aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
   )    

   bucket = client.Bucket('my_bucket')

   dynamodb = boto3.resource('dynamodb')

   table = dynamodb.Table('my_dynamo')

   for obj in bucket.objects.all():
        key = obj.key
        body = obj.get()['Body'].read()
        data = body.decode("utf-8") 
        data1 = data.split('\n')

        client.Object(bucket, key).delete()
4

3 回答 3

1

在上面的代码中,您使用存储桶对象进行删除。你需要更换

 client.Object(bucket, key).delete()

 client.Object(bucket.name, key).delete()

由于存储桶名称和密钥应该是字符串

于 2019-12-31T08:12:05.327 回答
0

我已经使用客户端进行删除。不是资源。这工作正常。你可以试试这个。

client_s3 = boto3.client('s3')
res = client_s3.list_objects(Bucket=bucket_name)
for list_key in res['Contents']:
    client_s3.delete_object(Bucket=bucket_name, Key=list_key['Key'])

如果您需要获取任何其他详细信息,这是 res['Contents'] 的结构:

'Key': 'string',
'LastModified': datetime(2015, 1, 1),
'ETag': 'string',
'Size': 123,
'StorageClass':'STANDARD'|'REDUCED_REDUNDANCY'|'GLACIER'|'STANDARD_IA'|'ONEZONE_IA'|'INTELLIGENT_TIERING'|'DEEP_ARCHIVE',
'Owner': {
          'DisplayName': 'string',
          'ID': 'string'
}
于 2019-12-31T07:03:39.147 回答
0
import boto3

bucketName = "your bucketname"
s3 = boto3.resource('s3')
s3.Object(bucketName, key).delete()
于 2019-12-31T08:49:58.090 回答