amazon web services - CloudWatch में लॉग(पाठ आउटपुट) के लिए AWS लैम्ब्डा फ़ंक्शन नहीं मिल सकता है




amazon-web-services aws-lambda (8)

लैम्ब्डा फ़ंक्शन के लिए लॉग स्ट्रीम बनाने और लॉग को क्लाउडवॉच पर प्रकाशित करने के लिए, लैम्ब्डा निष्पादन भूमिका के लिए निम्नलिखित अनुमतियाँ होनी चाहिए

मेरे पास ये अनुमति पहले से थी फिर भी यह काम नहीं किया।

बस अपना समय-समय एक सेकंड में बदलें और 'सेव एंड टेस्ट' बटन पर क्लिक करें, और आप क्लाउडवॉच में लॉग देखना शुरू कर देंगे।

मैंने टाइमआउट बदल दिया, सहेज लिया और लॉग अभी भी काम नहीं किया।

मैंने एक और भूमिका सौंपी और लॉग अभी भी काम नहीं किया।

जो मेरे लिए काम कर रहा था वह "एक कस्टम भूमिका बनाएँ" पर क्लिक कर रहा था, फिर "अनुमति दें"। यह वह था और लॉग उत्पन्न होने लगे थे, लेकिन जब से मैं एक नई भूमिका का उपयोग नहीं करना चाहता था, लेकिन मेरी मौजूदा भूमिका, मैंने बस अपनी मौजूदा भूमिका को बाद में सौंपा और यह काम किया। इसलिए तकनीकी रूप से मुझे मूल कॉन्फ़िगरेशन पर वापस लौटना चाहिए था जो काम नहीं करता था लेकिन अब यह काम करता है। जाओ पता लगाओ।

मैं एक लैम्बडा फ़ंक्शन सेट करने का प्रयास कर रहा हूं जो एक फ़ाइल को संसाधित करेगा जब इसे S3 बाल्टी पर अपलोड किया जाएगा। मुझे फ़ाइल अपलोड करते समय console.log के आउटपुट को देखने का एक तरीका चाहिए, लेकिन मैं यह पता नहीं लगा सकता कि अपने लैम्बडा फ़ंक्शन को क्लाउडवॉच से कैसे जोड़ा जाए।

मैंने इस context वस्तु को देखकर सोचा कि मेरा लॉग समूह /aws/lambda/wavToMp3 और लॉग स्ट्रीम 2016/05/23/[$LATEST]hex_code_redacted । इसलिए मैंने CloudWatch में उस समूह और स्ट्रीम को बनाया, फिर भी इसमें कुछ भी लॉग नहीं किया जा रहा है।


"राइट टू मेघवॉच लॉग का उपयोग कैसे करें" पर एक सेक्शन के साथ क्लाउडवॉच के साथ एडब्ल्यूएस लैंबडा की निगरानी करने के लिए एक राइटअप कहा जाता है। लगता है कि आपको पहले से ही अपना जवाब मिल गया था, लेकिन IAM विशिष्ट मुद्दों के बिना किसी के लिए, यह मदद कर सकता है।


अपनी नीति को अपडेट करने के बाद, ऐसा लगता है कि आपको नई नीतियों को पढ़ने के लिए नौकरी के सभी उदाहरणों को ताज़ा करने के लिए अपने फ़ंक्शन की सेटिंग्स को अपडेट करना होगा।

इसलिए यदि आप आईएएम में अपनी भूमिका नीति को अपडेट करने के बाद सिर्फ लैम्ब्डा कंसोल से 'टेस्ट' बटन पर क्लिक करते हैं, तो कैश्ड लैम्ब्डा के उदाहरणों में अभी भी पुरानी भूमिका अनुमतियाँ होंगी, इसलिए आपको अभी भी कोई लॉग लॉग क्लाउडवॉच लॉग्स में नहीं लिखा दिखाई देगा।

बस अपना समय-समय एक सेकंड में बदलें और 'सेव एंड टेस्ट' बटन पर क्लिक करें, और आप क्लाउडवॉच में लॉग देखना शुरू कर देंगे।


इस समस्या के लिए मैं क्लाउड स्क्रिप्ट में एक लॉग समूह बनाने की कोशिश कर रहा था: AWS :: लॉग्स :: लॉगग्रुप और फिर इस लॉग ग्रुप में लैम्ब्डा लॉग को पुश करने की कोशिश कर रहा था। : पी नोविस सावधान पढ़ने के बाद, मैंने पाया कि लैम्बडा उपर्युक्त प्रारूप के साथ अपना लॉग बनाता है: / aws / lambda / हमें इस लॉग समूह को नीति अनुमति प्रदान करने की आवश्यकता है, या संसाधन के साथ सिर्फ एक सामान्य अनुमति है: जैसे: aws लॉग ::: *

उम्मीद है की यह मदद करेगा


यह पहले से ही लॉग इन हो सकता है, हम बस वे लॉग नहीं पा सकते हैं जिनकी हम उम्मीद करते हैं ...

जैसे

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

GET /hello?world=1 प्रदर्शन करने के बाद; GET /hello?world=1 ,

स्थानीय कंसोल: (सरल और स्पष्ट, अच्छा!)

app.use(function simpleLogger (req, res, next) {
  console.info('[Logger]', req.method, req.originalUrl)
  next()
})

CloudWatch Logs: (क्या आप नीचे दिए गए सटीक लॉग को आसानी से पा सकते हैं?)

[Logger] GET /hello?world=1

निष्कर्ष: मूल लॉग का पता लगाने के लिए भी क्रिया।


लैम्ब्डा फ़ंक्शन के लिए लॉग स्ट्रीम बनाने और लॉग को क्लाउडवॉच पर प्रकाशित करने के लिए, लैम्ब्डा निष्पादन भूमिका के लिए निम्नलिखित अनुमतियाँ होनी चाहिए।

{
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                 "logs:CreateLogStream",
                 "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
} 

अधिक जानकारी के लिए कृपया निम्न AWS प्रलेखन देखें। http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role


सुनिश्चित करें कि आपके लाम्बा फ़ंक्शन "कॉन्फ़िगरेशन" में आपकी "मौजूदा भूमिका" का पूरा मार्ग है:

भूमिका: मौजूदा भूमिका का चयन करें मौजूदा भूमिका: सेवा-भूमिका / आपका नाम

किसी कारण के लिए, केवल आपकाRoleName टाइप करना कुछ सेवाओं (जैसे SES) के लिए काम करेगा, लेकिन CloudWatch के लिए नहीं।

इसके अलावा, आप किसी मौजूदा का उपयोग करने के बजाय एक नई भूमिका बनाने का प्रयास कर सकते हैं। यह उचित कॉन्फ़िगरेशन (उम्मीद) के साथ भूमिका बनाएगा।


स्पष्ट रूप से लॉगिंग के लिए एक और आवश्यकता लैम्ब्डा फ़ंक्शन को पूरा होने का संकेत देना चाहिए; उदाहरण के लिए पायथन संदर्भ में, हैंडलर को किसी के अलावा कुछ None लौटना चाहिए।