#python #aws-lambda #boto3
#python #aws-lambda #boto3
Вопрос:
У меня есть список имен корзин, которые мне нужны, чтобы включить ведение журнала программно. Я использую boto3 и lambda. Кажется, я не могу найти правильную функцию в boto3 / s3, чтобы делать то, что мне нужно, хотя я уверен, что это возможно. Вот мой код на данный момент:
import json
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
# TODO implement
# print("hanlder:event")
# print(event)
# bucketDump()
setBucketPolicy(bucketDump())
def bucketDump():
##This program lists all exsisting buckets within an aws account (Tommy's Personal Account)
response = s3.list_buckets()
buckets = []
for bucket in response['Buckets']:
value = bucket["Name"]
buckets.append(value)
return buckets
##setting a bucket policy
def setBucketPolicy(buckets):
for bucket in buckets:
value = s3.get_bucket_logging(bucket)
print(value)
##TODO if bucket in buckets does not have loggin enabled, enable it!
# print(bucket)
Мой процесс заключается в том, что я хочу повторить список имеющихся у меня корзин и включить для них ведение журнала! Заранее благодарю вас.
Комментарии:
1. boto3.amazonaws.com/v1/documentation/api/latest/reference/…
Ответ №1:
Как предложил @jordanm в комментарии под вашим вопросом, использование ресурса вместо клиента значительно упростит вашу жизнь, поскольку он предоставляет интерфейс более высокого уровня.
Если единственной целью bucketDump
вашего вопроса было получение всех сегментов в вашей учетной записи, то вы могли бы полностью удалить его и использовать стандартную функцию s3.buckets.all()
, которая уже возвращает итерацию сегментов (docs).
Предполагая, что вы хотите включить ведение журнала во всех ваших сегментах, для которых он еще не включен, и что вы хотите доставлять журналы из всех сегментов в одно и то же ведро, вы могли бы добавить параметр в ` функцию для указания этого сегмента. Предлагаемая ниже реализация позволит вести журнал и приведет к тому, что журналы будут организованы следующим образом:
- name_of_bucket_in_wich_to_store_logs
- bucket_name_1
- logs
- bucket_name_2
- logs
Если вы хотите организовать свои журналы по-другому, вам придется поиграть с параметрами TargetBucket
и TargetPrefix
, и, при необходимости, вы можете указать другие параметры для грантов, как подробно описано в документах.
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
# TODO implement
setBucketPolicy(target_bucket='name_of_bucket_in_wich_to_store_logs')
def setBucketPolicy(target_bucket: str):
for bucket in s3.buckets.all():
bucket_logging = s3.BucketLogging(bucket.name)
if not bucket_logging.logging_enabled:
bucket_logging.put(
BucketLoggingStatus={
'LoggingEnabled': {
'TargetBucket': target_bucket,
'TargetPrefix': f'{bucket.name}/'
}
}
)