Вызов AppSync мутации из лямбды с Голанга - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь вызвать мутацию из лямбды (в частности, используя golang).Я использовал AWS_IAM в качестве метода аутентификации моего AppSync API.Я также даю разрешение appsync:GraphQL моей лямбде.

Однако, посмотрев документы здесь: https://docs.aws.amazon.com/sdk-for-go/api/service/appsync/

Я не могу найти никакой документации о том, как вызывать appsync избиблиотека.Может кто-нибудь указать мне правильное направление здесь?

PS Я не хочу запрашивать или подписаться или что-нибудь еще из лямбда.Это просто мутация

Спасибо!

------ ОБНОВЛЕНИЕ -------

Спасибо @thomasmichaelwallace за информированиеиспользовать https://godoc.org/github.com/machinebox/graphql

Теперь проблема в том, как я могу подписать запрос из этого пакета с помощью aws v4?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Я нашел способ использовать обычные http.Request и подпись AWS v4.(Спасибо @thomasmichaelwallace за указание этого метода)

client := new(http.Client)
// construct the query
query := AppSyncPublish{
    Query: `
        mutation ($userid: ID!) {
            publishMessage(
                userid: $userid
            ){
                userid
            }
        }
    `,
    Variables: PublishInput{
        UserID:     "wow",
    },
}
b, err := json.Marshal(&query)
if err != nil {
    fmt.Println(err)
}

// construct the request object
req, err := http.NewRequest("POST", os.Getenv("APPSYNC_URL"), bytes.NewReader(b))
if err != nil {
    fmt.Println(err)
}
req.Header.Set("Content-Type", "application/json")

// get aws credential
config := aws.Config{
    Region: aws.String(os.Getenv("AWS_REGION")),
}
sess := session.Must(session.NewSession(&config))


//sign the request
signer := v4.NewSigner(sess.Config.Credentials)
signer.Sign(req, bytes.NewReader(b), "appsync", "ap-southeast-1", time.Now())

//FIRE!!
response, _ := client.Do(req)

//print the response
buf := new(bytes.Buffer)
buf.ReadFrom(response.Body)
newStr := buf.String()

fmt.Printf(newStr)
0 голосов
/ 08 октября 2018

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

Если вы хотите на самом деле вызывать их, вам нужно POST к конечной точке GraphQL.

Самый простой способ тестирования - войти в консоль AWS AppSync, нажать кнопку «Запросы» на боковой панели, а затем ввести и запустить мутацию.

Я не очень хорошо с ходом,но из того, что я вижу, есть клиентские библиотеки для GraphQL на golang (например, https://godoc.org/github.com/machinebox/graphql).

. Если вы используете IAM, вам нужно будет подписать ваш запрос подписью v4 (подробности см. в этой статье:https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)

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