Расшифровка переменных среды в AWS Lambda не работает в Python 3.6 - PullRequest
0 голосов
/ 08 мая 2019

Я зашифровал переменную окружения в функции AWS Lambda с помощью AWS KMS. Затем я попытался расшифровать переменную в коде, используя пример кода, предоставляемого AWS, который адаптирован к моей переменной:

import os
import boto3
from base64 import b64decode

keys = {}
def get_variable(variable):
    encrypted = os.environ[f'{variable}']
    decrypted = boto3.client('kms').decrypt(CiphertextBlob=b64decode(encrypted))['Plaintext']
    keys[variable] = decrypted

get_variable('port')

def lambda_handler(event,context):
    port = keys['port']
    return port

Я протестировал функцию, но она выдает следующую ошибку:

An error occurred during JSON serialization of response: b'5934' is not JSON serializable
Traceback (most recent call last):
  File "/var/lang/lib/python3.6/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/var/lang/lib/python3.6/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/var/lang/lib/python3.6/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/var/runtime/awslambda/bootstrap.py", line 110, in decimal_serializer
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: b'5934' is not JSON serializable

Тем не менее, переключение Lambda с Python 3.6 на Python 3.7 делает его отлично работающим. Есть ли способ решить эту проблему, чтобы мне не пришлось менять версию Python?

1 Ответ

1 голос
/ 08 мая 2019

Вы можете попробовать следующее.Это просто гарантирует, что функция возвращает строку, которая сериализуема JSON вместо байтов, которые не являются.

def lambda_handler(event,context):
    port = keys['port']
    return str(port)
...