Как избежать использования кавычек вокруг каждого параметра url при использовании AWS API Gateway? - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь использовать 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'

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Кажется, это работает, если я поставлю кавычки вокруг значения в парах ключ-значение шаблона сопоставления:

    "key1": "$input.params('key1')",
    "key2": "$input.params('key2')",
    "key3": "$input.params('key3')"

}```
0 голосов
/ 27 марта 2019

Если вы хотите передать параметры url, используя пару ключ / значение, например, key1 = "joe.mp4", то вы должны использовать кавычки, так как они определяют строковое значение этого ключа.

Однако вы можететакже настройте сопоставления для URL, которые не требуют кавычек, а вместо этого разделяются косой чертой ("/") , как показано в этом примере , но они не так гибки, как ключ / значениенастройки, потому что они должны быть в определенном порядке.

Например, с настройкой ключ / значение вы можете либо сделать http://url?key1="value1"&key2="value2"&key3="value3", либо вы можете сделать http://url?key3="value3"&key1="value1"&key2="value2", и это будет иметь тот же результат (примечаниепорядок ключей).Однако со статическими параметрами, разделенными косой чертой, вы не можете сделать это, все значения должны быть переданы в статическом порядке, http://url/value1/value2/value3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...