Я пытаюсь использовать AWS API Gateway для запуска лямбда-функции, которая копирует файл из исходного контейнера в целевой. Я хотел бы, чтобы форма вызова API была
https://some/api/url/my_lambda_function?key1=joe.mp4&key2=video-files&key3=edited-video-files
Я настроил лямбда-функцию. Я присоединяю шлюз API и настраиваю шлюз API. Проблема заключается в том, что я настраиваю отображение интеграции.
Когда я запускаю https://some/api/url/my_lambda_function?key1="joe.mp4"&key2="video-files"&key3="edited-video-files"
, все работает как надо. Однако, если я запускаю его без кавычек вокруг параметров, я получаю сообщение об ошибке. Например, если я удаляю кавычки вокруг параметра key3, ошибка будет
{"message": "Could not parse request body into json: Unrecognized token \'edited\': was expecting (\'true\', \'false\' or \'null\')\n at [Source: (byte[])\"{\n \"key1\": \"joe.mp4\",\n \"key2\": \"video-files\",\n \"key3\": edited-video-files\n\n}\n\"; line: 4, column: 22]"}
Вот мои настройки.
В разделе API Gateway-> Resources-> Request Integration-> Mapping Templates я выбираю опцию ( Если шаблоны не определены ). Я использую application / json и мой шаблон:
{
"key1": $input.params('key1'),
"key2": $input.params('key2'),
"key3": $input.params('key3')
}
Для полноты моей лямбды:
import boto3
def lambda_handler(event, context):
# initialize s3
s3 = boto3.client("s3")
# print event output
print(event)
FILENAME = event['key1']
SOURCE_BUCKET = event['key2']
DEST_BUCKET = event['key3']
# formatted copy string
copy_source = {
'Bucket': SOURCE_BUCKET,
'Key': FILENAME,
}
# copy files
s3.copy_object(Bucket=DEST_BUCKET, Key=FILENAME, CopySource=copy_source)
return 'Thanks for watching'