मेरे पास बाल्टी नामों की एक सूची है जिसे मुझे प्रोग्रामेटिक रूप से लॉगिंग सक्षम करने की आवश्यकता है। मैं boto3 और लैम्ब्डा का उपयोग कर रहा हूँ। मुझे जो चाहिए वह करने के लिए मुझे 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)

मेरी प्रक्रिया यह है कि मैं अपने पास मौजूद बाल्टियों की सूची पर पुनरावृति करना चाहता हूं और उनके लिए सक्षम_लॉगिंग करना चाहता हूं! पहले ही, आपका बहुत धन्यवाद।

0
aroe 3 सितंबर 2020, 18:49

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 पैरामीटर के साथ खेलना होगा और, यदि आवश्यक हो, तो आप अनुदान के लिए अन्य पैरामीटर निर्दिष्ट कर सकते हैं जैसा कि docs

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}/'
                    }
                }
            )
1
Andre.IDK 4 सितंबर 2020, 10:52