使用boto3从所有区域中检索清单
试图使用boto3从所有区域中检索清单
我 无
我也尝试了以下内容,但它不起作用。
感谢任何帮助,谢谢
if client.head_bucket(Bucket=bucket['Name'])['ResponseMetadata']['HTTPHeaders']['x-amz-bucket-region'] == 'us-east-1':
print ("bucketname %s " % s3_bucket.name)
代码
import json
import boto3
bucketlist = []
def lambda_handler(event, context):
# Get list of regions
ec2 = boto3.client('ec2')
regions = ec2.describe_regions().get('Regions',[] )
# Iterate over regions
for region in regions:
print ("*************** Checking region -- %s " % region['RegionName'])
reg=region['RegionName']
client = boto3.client('s3', region_name=reg)
response = client.list_buckets()
for bucket in response['Buckets']:
s3 = boto3.resource('s3', region_name=reg)
s3_bucket = s3.Bucket(bucket['Name'])
if client.head_bucket(Bucket=bucket['Name'])['ResponseMetadata']['HTTPHeaders']['x-amz-bucket-region'] == 'us-east-1':
print ("bucketname %s " % s3_bucket.name)
bucketlist.append(s3_bucket)
return {
"statusCode": 200
}
输出: buckets testbucket1
和testbucket2
仅在中可用us-east-1
区域
START RequestId: e22f6ac0-7bb9-4e2b-84d7-5512ce97acfa Version: $LATEST
*************** Checking region -- eu-north-1
bucketname testbucket1
bucketname testbucket2
*************** Checking region -- ap-south-1
bucketname testbucket1
bucketname testbucket2
[...]
*************** Checking region -- us-east-1
bucketname testbucket1
bucketname testbucket2
预期输出:
START RequestId: e22f6ac0-7bb9-4e2b-84d7-5512ce97acfa Version: $LATEST
*************** Checking region -- eu-north-1
*************** Checking region -- ap-south-1
*************** Checking region -- eu-west-3
*************** Checking region -- eu-west-2
*************** Checking region -- eu-west-1
*************** Checking region -- ap-northeast-3
*************** Checking region -- ap-northeast-2
*************** Checking region -- ap-northeast-1
*************** Checking region -- sa-east-1
*************** Checking region -- ca-central-1
*************** Checking region -- ap-southeast-1
*************** Checking region -- ap-southeast-2
*************** Checking region -- eu-central-1
*************** Checking region -- us-east-1
bucketname testbucket1
bucketname testbucket2
*************** Checking region -- us-east-2
*************** Checking region -- us-west-1
*************** Checking region -- us-west-2
I was trying to retrieve the list of buckets from all regions using boto3, however I am unable to list the buckets from the correct region
So far I have tried location['LocationConstraint']
, which comes up as None
I have also tried the following as well but it didn't work.
Any help is appreciated, thank you
if client.head_bucket(Bucket=bucket['Name'])['ResponseMetadata']['HTTPHeaders']['x-amz-bucket-region'] == 'us-east-1':
print ("bucketname %s " % s3_bucket.name)
Code
import json
import boto3
bucketlist = []
def lambda_handler(event, context):
# Get list of regions
ec2 = boto3.client('ec2')
regions = ec2.describe_regions().get('Regions',[] )
# Iterate over regions
for region in regions:
print ("*************** Checking region -- %s " % region['RegionName'])
reg=region['RegionName']
client = boto3.client('s3', region_name=reg)
response = client.list_buckets()
for bucket in response['Buckets']:
s3 = boto3.resource('s3', region_name=reg)
s3_bucket = s3.Bucket(bucket['Name'])
if client.head_bucket(Bucket=bucket['Name'])['ResponseMetadata']['HTTPHeaders']['x-amz-bucket-region'] == 'us-east-1':
print ("bucketname %s " % s3_bucket.name)
bucketlist.append(s3_bucket)
return {
"statusCode": 200
}
Output: The buckets testbucket1
and testbucket2
are only available in us-east-1
region
START RequestId: e22f6ac0-7bb9-4e2b-84d7-5512ce97acfa Version: $LATEST
*************** Checking region -- eu-north-1
bucketname testbucket1
bucketname testbucket2
*************** Checking region -- ap-south-1
bucketname testbucket1
bucketname testbucket2
[...]
*************** Checking region -- us-east-1
bucketname testbucket1
bucketname testbucket2
Expected Output:
START RequestId: e22f6ac0-7bb9-4e2b-84d7-5512ce97acfa Version: $LATEST
*************** Checking region -- eu-north-1
*************** Checking region -- ap-south-1
*************** Checking region -- eu-west-3
*************** Checking region -- eu-west-2
*************** Checking region -- eu-west-1
*************** Checking region -- ap-northeast-3
*************** Checking region -- ap-northeast-2
*************** Checking region -- ap-northeast-1
*************** Checking region -- sa-east-1
*************** Checking region -- ca-central-1
*************** Checking region -- ap-southeast-1
*************** Checking region -- ap-southeast-2
*************** Checking region -- eu-central-1
*************** Checking region -- us-east-1
bucketname testbucket1
bucketname testbucket2
*************** Checking region -- us-east-2
*************** Checking region -- us-west-1
*************** Checking region -- us-west-2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不必更改客户的区域。
list_buckets
返回帐户中的所有存储桶,无论它们的位置如何。这就是为什么您可以在代码中为每个区域获得相同的存储桶。您必须迭代
list_buckets
结果,然后使用 get_bucket_location 获得水桶的实际位置。例如:You don't have to change region for client.
list_buckets
returns all buckets in the account, regardless where they are located. That's why you get the same buckets for each region in your code.You have to iterate over
list_buckets
results, and use get_bucket_location to obtain the actual locations of your buckets. For example: