Appsyn c уже в некоторой степени заменяет API-шлюз, тогда зачем вам его выставлять через API-шлюз. Я знаю, что большинство людей будут задавать этот вопрос. Вот почему?
- Поддержка плана использования
- Возможность монетизации.
Насколько я понял, Appsyn c - это GrapQL + Apollo реализация сервера. Представленный API поддерживает запрос POST. И даже запрос на подписку также является почтовым запросом с URL-адресом Websocket MQTT (AWS IoT) в качестве ответа. (Например, ниже)
{
"extensions": {
"subscription": {
"mqttConnections": [
{
"url": "wss://something-ats.iot.ap-northeast-1.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...",
"topics": [
".../.../subscribeToVehicleLocation/..."
],
"client": "..."
}
],
"newSubscriptions": {
"subscribeToVehicleLocation": {
"topic": ".../../subscribeToVehicleLocation/..",
"expireTime": null
}
}
}
},
"data": {
"subscribeToVehicleLocation": null
}
}
Если это так, можем ли мы предоставить конечную точку Appsyn через API-шлюз (метод POST)?
Для простоты я попытался использовать HTTP API в API-шлюзе.
PS :
Ранее я мог подписаться на данные, используя оригинальный URL-адрес Appsyn c (используя Amplify JS в Angular 7). С URL-адресом API-шлюза я получаю это исключение WS Handshake (с Amplify).
WebSocket connection to 'wss://....execute-api.ap-northeast-1.amazonaws.com/graphql?header=...&payload=e30=' failed: Error during WebSocket handshake: Unexpected response code: 400
in AWSAppSyncRealTimeProvider.js:603
Обновление 24-04-2020
Я был возможность вызывать Appsyn c через AWS Сервисный вызов в API-шлюзе с указанными ниже настройками.
Но, тем не менее, у меня ошибка веб-сокета в Amplify
Конфигурация API-шлюза
Доверительные отношения для роли IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"appsync.amazonaws.com",
"apigateway.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Разрешение роли IAM
AWSAppSyncInvokeFullAccess