python urllib3 lambda Lỗi: LocationParseError Không phân tích được
Nov 08 2020
Tôi đang sử dụng thư viện urllib3 trong Lambda và mã python3 tìm nạp url webhook của MSTeams từ AWS Secret Manager và gửi yêu cầu đăng http để xuất bản thông báo.
Url webhook của tôi bắt đầu bằng https và trông giống như sau "https: //outlook.office.com/webhook / .......". Khi thực hiện hàm lambda, tôi gặp lỗi như hình dưới đâyLocationParseError Failed to parse:
Mã
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)
thông báo lỗi
{
"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",
""
]
]
}
Trả lời
StarJedi Nov 08 2020 at 21:43
Đây là cách tôi đã giải quyết nó
- Đã triển khai lại tệp lambda zip, với các phụ thuộc chính xác như yêu cầu, urllib3 trong cùng một thư mục
- Rõ ràng, tôi đang cố gắng lưu trữ bí mật dưới dạng cặp khóa / giá trị trong Trình quản lý bí mật của AWS nên nó không thể phân tích cú pháp từ điển. Tôi đã thay đổi kiểu bí mật thành văn bản rõ ràng