Я столкнулся с проблемой приложения syn c, где источником данных является реляционная база данных.
Итак, моя цель - подключить сервер Aurora без postgresql кластера с приложением syn c в качестве источника данных и заставить его работать.
Шаги, которые я выполнил (все через без-сервера framework):
Создан кластер aurora postgreSQL.
Подключен кластер aurora postgreSQL к приложению syn c.
Создана схема graphql в приложении syn c .
Тип аутентификации - ключ API.
app syn c Конфигурация принята здесь (https://github.com/serverless-components/aws-app-sync#data -источники - шаблоны ). :
appSync:
name: Posts
authenticationType: API_KEY
apiKeys:
- myApiKey
dataSources:
- type: RELATIONAL_DATABASE
name: Posts
config:
awsSecretStoreArn:
Ref: SecretsManager
databaseName: "mydatabase"
dbClusterIdentifier:
Ref: AuroraRDSCluster
schema: schema.graphql
mappingTemplates:
- dataSource: Posts
type: Query
field: getPet
request: "request.vtl"
response: "response.vtl"
- dataSource: Posts
type: Query
field: listPets
request: "listPets_request.vtl"
response: "listPets_response.vtl"
моя схема graphql взята отсюда (https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-rds-resolvers.html)
type Mutation {
createPet(input: CreatePetInput!): Pet
updatePet(input: UpdatePetInput!): Pet
deletePet(input: DeletePetInput!): Pet
}
input CreatePetInput {
type: PetType
price: Float!
}
input UpdatePetInput {id: ID!
type: PetType
price: Float!
}
input DeletePetInput {
id: ID!
}
type Pet {
id: ID!
type: PetType
price: Float
}
enum PetType {
dog
cat
fish
bird
gecko
}
type Query {
getPet(id: ID!): Pet
listPets: [Pet]
listPetsByPriceRange(min: Float, max: Float): [Pet]
}
schema {
query: Query
mutation: Mutation
}
my getPet request.vtl:
{
"version": "2018-05-29",
"statements": [
$util.toJson("select * from Pets WHERE id='$ctx.args.id'")
]
}
my getPet ответ .vtl:
$utils.toJson($utils.rds.toJsonObject($ctx.result)[0][0])
и все развернуто идеально, как кластер Arn (dbClusterIdentifier), имя базы данных awsSecretStoreArn с приложением syn c источник данных, средства сопоставления со схемой.
И получил API-интерфейс graphql с API введите выходные данные развертывания.
После этого я создал таблицу Pets с идентификатором столбца, типом, ценой с одной записью через редактор запросов кластера rds.
Итак, теперь, когда я пытался выполнить запрос в консоли приложения syn c, я получал значение как нулевое. запрос:
query {getPet(id: "1"){id type price }}
пробовал с node js кодом тоже, но результат тот же.
// url of your GraphQL API. If you configured a custom domain, you could use that instead
const url =
"https://z4#############.appsync-api.us-east-1.amazonaws.com/graphql";
// api key of your GraphQL API
const apiKey = "da2-7by6############";
// ID of the post you wanna query
const id = "1";
fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": apiKey
},
body: JSON.stringify({
query: `query {getPet(id: "${id}"){id}}`
})
})
.then(res => res.text())
.then(post => console.log(post));```
any help how to make it working.