3

Я начал создавать приложение JAM с использованием AWS Lambda, AWS API Gateway и без сервера, а также другого API-интерфейсов поставщиков.Передача безсерверного API-адреса шлюза в качестве параметра для функции Lambda в том же стеке

Этот API-интерфейс поставщика вызывается функцией Lambda и требует, чтобы URL-адрес обратного вызова передавался для получения некоторых данных после его выполнения.

Поскольку я все время создаю сервер без сервера, переход на консоль и извлечение URL-адреса API для установки вручную, так как переменная env бесполезна для меня, и мне нужен способ, чтобы серверный сервер мог передавать открытый API URL конечной точки для функции лямбда.

Как получить Lambda-функцию URI-события HTTP как env или что-то, проходящее с другой функцией Lambda в том же стеке?

Может ли кто-нибудь предоставить какой-нибудь серверный сниппет о том, как этого достичь? Спасибо!

+0

Похоже, что это должно быть частью процесса сборки/развертывания? Поэтому во время развертывания на сервере сборки вы вызываете API-интерфейс поставщика и получаете URL-адрес, а затем используете его для установки переменной env? Или вы можете уточнить поток, который хотите поддержать. – doorstuck

+0

Проблема в том, что хосты получают выделение при развертывании стека, поэтому проблема с курицей и яйцом. Я не могу передавать их как переменную env, потому что она еще не существует. – DLeonardi

ответ

4

Если вы хотите найти URL-адрес шлюза API, который вызвал функцию Lambda, вам необходимо проверить переменную event, которую получает ваша функция лямбды.

event.headers.Host -> abcdefghij.execute-api.us-east-1.amazonaws.com 
event.requestContext.stage -> dev 
event.requestContext.resourcePath -> my-service/resource 

Если вы хотите, чтобы построить API URL шлюза (пример: https://abcdefghij.execute-api.us-east-1.amazonaws.com/dev/my-service/resource), использование:

const url = `https://${event.headers.Host}/${event.requestContext.stage}/${event.requestContext.resourcePath}`; 

Полный пример испытания:

module.exports.hello = (event, context, callback) => { 

    const url = `https://${event.headers.Host}/${event.requestContext.stage}/${event.requestContext.resourcePath}`; 

    const response = { 
    statusCode: 200, 
    headers: { 
     'Access-Control-Allow-Origin': '*' 
    }, 
    body: JSON.stringify({ 
     message: url 
    }) 
    }; 

    callback(null, response); 
}; 

Примечание: если вы это проверить непосредственно в AWS Lambda Console, это может вызвать ошибку, потому что объект event будет пустым и без headers и requestContext. Итак, попробуйте это, используя консоль API Gateway или напрямую просматривая URL.

+1

хорошая работа !!!!!!!! – Nikos