python urllib3 lambda त्रुटि: LocationParseError पार्स करने में विफल

Nov 08 2020

मैं लैंबडा और python3 कोड में urllib3 लाइब्रेरी का उपयोग कर रहा हूं जो AWS सीक्रेट मैनेजर से MSTeams के वेबहूक url को प्राप्त करता है और एक अधिसूचना प्रकाशित करने के लिए http पोस्ट अनुरोध भेजता है।

मेरा webhook url https से शुरू होता है और यह "https: //outlook.office.com/webhook / ......." जैसा दिखता है। लैम्ब्डा फ़ंक्शन को निष्पादित करने पर, मुझे एक त्रुटि मिलती है जैसा कि नीचे दिखाया गया हैLocationParseError Failed to parse:

कोड

import urllib3 

http = urllib3.PoolManager() 

MSTEAMS_WEBHOOK_SECRET_NAME = os.getenv('MSTEAMS_WEBHOOK_SECRET_NAME') 
HOOK_URL = get_secret(MSTEAMS_WEBHOOK_SECRET_NAME,"eu-west-1") 

def get_secret(secret_name, region_name):

    # Create a Secrets Manager client
    session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )
        get_secret_value_response = client.get_secret_value(
            SecretId=secret_name,
            VersionStage="AWSCURRENT"
        )
        if 'SecretString' in get_secret_value_response:
            secret = get_secret_value_response['SecretString']
            return secret
        else:
            decoded_binary_secret = base64.b64decode(get_secret_value_response['SecretBinary'])
            return decoded_binary_secret


def lambda_handler(event, context):
 message = {
      "@context": "https://schema.org/extensions",
      "@type": "MessageCard",
      "themeColor": data["colour"],
      "title": title,
      "text": "accountId:\n"  + account_id + " <br/>\n" 
    }
 
    webhook_encoded_body = json.dumps(message).encode('utf-8')
    response = http.request('POST',HOOK_URL, body=webhook_encoded_body)

त्रुटि संदेश

{
  "errorMessage": "Failed to parse: {\"msteams-secret\":\"https://outlook.office.com/webhook/dxxxxxx@d779xxxxx-xxxxxx/IncomingWebhook/axxxxxx5/ca746326-bxxx-4xxx-8x-xxxxx\"}",
  "errorType": "LocationParseError",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      145,
      "lambda_handler",
      "resp = http.request('POST',HOOK_URL, body=webhook_encoded_body)"
    ],
    [
      "/var/runtime/urllib3/request.py",
      80,
      "request",
      "method, url, fields=fields, headers=headers, **urlopen_kw"
    ],
    [
      "/var/runtime/urllib3/request.py",
      171,
      "request_encode_body",
      "return self.urlopen(method, url, **extra_kw)"
    ],
    [
      "/var/runtime/urllib3/poolmanager.py",
      324,
      "urlopen",
      "u = parse_url(url)"
    ],
    [
      "/var/runtime/urllib3/util/url.py",
      392,
      "parse_url",
      "return six.raise_from(LocationParseError(source_url), None)"
    ],
    [
      "<string>",
      3,
      "raise_from",
      ""
    ]
  ]
}

जवाब

StarJedi Nov 08 2020 at 21:43

यहाँ है कि मैं इसे कैसे हल किया

  • एक ही फ़ोल्डर में अनुरोधों, urllib3 जैसी सही निर्भरता के साथ दुबारा लैम्ब्डा जिप फाइल को तैनात किया
  • जाहिरा तौर पर, मैं AWS सीक्रेट मैनेजर में कुंजी / मूल्य जोड़ी के रूप में रहस्य को संग्रहीत करने की कोशिश कर रहा था, इसलिए यह एक शब्दकोश को पार्स करने में सक्षम नहीं था। मैंने गुप्त प्रकार को प्लेटेक्स्ट में बदल दिया