Как отправить подписанный HTTP-запрос из AWS Lambda в AppSync GraphQL? - PullRequest
0 голосов
/ 09 июля 2019

Я не уверен, как отправить подписанный http-запрос в конечную точку AppSync GraphQL. В AWS нет библиотеки для этого.

  • aws-amplify не работает, потому что работает только в браузере, а не в функции Lambda.
  • aws-sdk для AppSync предназначен только для использования администратором, у него нет методов для вызова пользовательской стороны api

Можно ли сделать подписанный IAM HTTP-запрос от AWS Lambda? (некоторым простым способом)

Ответы [ 2 ]

1 голос
/ 11 июля 2019

я бы порекомендовал прочитать эту статью: Backend GraphQL: как вызвать мутацию AWS AppSync из AWS Lambda ,

цитируя автора, https://stackoverflow.com/users/1313441/adrian-hall, мы имеем:

GraphQL маршрутизируется по HTTPS. Это означает, что мы можем моделировать клиентские библиотеки GraphQL с помощью простого HTTPS POST. Поскольку мы используем IAM, нам необходимо подписать запрос, прежде чем мы его доставим. Вот мой код для этого:

// ... more code here
    // POST the GraphQL mutation to AWS AppSync using a signed connection
    const uri = URL.parse(env.GRAPHQL_API);
    const httpRequest = new AWS.HttpRequest(uri.href, env.REGION);
    httpRequest.headers.host = uri.host;
    httpRequest.headers['Content-Type'] = 'application/json';
    httpRequest.method = 'POST';
    httpRequest.body = JSON.stringify(post_body);

    AWS.config.credentials.get(err => {
        const signer = new AWS.Signers.V4(httpRequest, "appsync", true);
        signer.addAuthorization(AWS.config.credentials, AWS.util.date.getDate());

        const options = {
            method: httpRequest.method,
            body: httpRequest.body,
            headers: httpRequest.headers
        };

        fetch(uri.href, options)
// ... more code here

Я использовал его в качестве шаблона для всех моих коммуникаций Lambda-> AppSync!

0 голосов
/ 09 июля 2019

Вы можете использовать любой клиент graphql или HTTP-запрос с подписью sigv4. Вот как вы создаете подпись для вашего запроса (https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). Если вы присоедините к своей лямбде исполняющую роль, вы сможете получить к ней доступ к ключу доступа из переменных среды лямбда (https://docs.aws.amazon.com/lambda/latest/dg/lambda-environment-variables.html).

...