假设我对 http 或 dynamodb 使用简单的 vtl 解析器,有没有办法在数据源超时的情况下执行一些清理(例如 dynamodb 服务在 2 秒内没有响应)。不幸的是,我在互联网上找不到任何关于 appsync 和超时的参考,我希望能够: 1. 为解析器指定一个低于默认 appsync 超时 30 秒的较低阈值超时 2. 能够在上述超时的情况下有一个后备机制
我认为使用 lambda 解析器应该很容易做到这一点,但目前我试图避免这种情况,因为冷启动。
谢谢
一个非常基本的场景,我想在 Graphql Playground 上测试 AppSync 突变,该突变与 API 密钥身份验证运行良好。
除了 API 密钥身份验证之外,我还附加了一个额外的授权提供程序。
突变:
type Mutation {
createPitch(gameID: ID!, pitchID: Int!, pitchEvent: PitchInput!): Pitch
@aws_api_key
predictPitch(userID: String!, gamePitchID: String!, prediction: PredictionInput): Prediction
@aws_cognito_user_pools
}
Run Code Online (Sandbox Code Playgroud)
predictPitch在 graphql 游乐场上调用突变:
mutation PredictPitch($prediction:PredictionInput) {
predictPitch(userID: "12345", gamePitchID: "29fb2xx-xxxxx-xxxxx-1",
prediction: $prediction ) {
gameID
gamePitchID
}
}
Run Code Online (Sandbox Code Playgroud)
查询变量:
{
"prediction": {
"gameID": "29",
"hitterGuess": "Miss",
"pitcherGuess": "Fastball"
}
}
Run Code Online (Sandbox Code Playgroud)
标题:
{
"X-API-KEY": "da2-o6fs2lq47vbehexxxxxxxx",
"Authorization": "Bearer xxxx-the-pretty-long-jwt-token-from-cognito login"
}
Run Code Online (Sandbox Code Playgroud)
我单独尝试过Authorizationheader 以及与x-api-key. 到目前为止没有任何效果。我很确定我错过了一点点。
{ …Run Code Online (Sandbox Code Playgroud) 我想使用 firebase auth 来保护我的 AWS AppSync graphql api,而不是 Cognito 之类的东西。这背后有几个原因,例如定价以及我们已经在使用其他一些 Firebase 服务。
我能看到 atm 的唯一可行的解决方案是以某种方式将 firebase 用户令牌传递到我的 AppSync graphql api 并通过 OpenID Conneect / OIDC 进行验证。
我无法弄清楚这一点,也找不到有关该主题的任何指南,因此想在这里询问是否可能,如果可以,是否可以提供任何示例或可能有用的完整参考资料?
以下是需要根据 OpenID 连接数据提供给 AppSync 的相关字段https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-appsync.OpenIdConnectConfig.html
这些是否存在用于 firebase 身份验证?
更新:我找到了一些有关 firebase 令牌验证的文档 https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library
我相信以下 URL 需要用作 AppSync 中的 OpenID url 设置https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com
但是 AppSync 文档指出它们附加/.well-known/openid-configuration到此类 url,当我对上面的 googleapis url 执行此操作时,它会抛出 404。
amazon-web-services firebase openid-connect firebase-authentication aws-appsync
这是一个让我一直困惑的问题。尽管 AppSync 是针对 GraphQL 进行销售的,而 API Gateway 是针对 REST 进行销售的。但 API Gateway 也可以通过 lambda 中的 apollo 服务器与 GraphQL 配合使用。
那么,到底是什么让其中一个比另一个更好呢?
我有由 cdk cli(typecript-language) 生成的代码:
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as appsync from '@aws-cdk/aws-appsync';
export class BookStoreGraphqlApiStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const api = new appsync.GraphqlApi(this, 'MyApi', {
name: 'my-book-api',
schema: appsync.Schema.fromAsset('graphql/schema.graphql')
});
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Argument of type 'this' is not assignable to parameter of type 'Construct'.
Type 'BookStoreGraphqlApiStack' is missing the following properties from type 'Construct': onValidate, onPrepare, onSynthesize
Run Code Online (Sandbox Code Playgroud)
我的package.json: …
为了更新我的 API 密钥,我曾经使用 AWS AppSync \xe2\x86\x92 设置并生成一个新密钥。
\n之后,在我的本地应用程序中,找到旧的 API 密钥并将其替换为新的 API 密钥...直到昨天,这都工作正常,但现在,无论我做什么,当我运行时,amplify status它都会输出我的旧 API 密钥。
我也尝试过amplify update api但没有运气。后来我尝试amplify pull看看它是否使用网络应用程序(AppSync)中的新密钥更新我的本地 API 密钥,但仍然没有成功。
我已经在线生成了有效的 API 密钥,为什么我无法使用相同的密钥更新本地 API 密钥?
\n我正在使用 RTK Query & AppSync (graphQL) 开发一个 React 应用程序。我尝试了如下查询请求,但 redux 状态始终为“rejected” "Cannot read properties of undefined (reading 'filter')"(请检查下面的图片)。
看来请求本身已成功完成(200),所以我猜这是由于 geaphQL 客户端造成的。
没有 RTK 查询的 Redux Toolkit 按预期工作。
请帮忙
RTK查询(拒绝)
import { createApi } from '@reduxjs/toolkit/query/react';
import { graphqlRequestBaseQuery } from '@rtk-query/graphql-request-base-query';
import { API } from 'aws-amplify';
import { GRAPHQL_AUTH_MODE } from '@aws-amplify/api-graphql/lib/types';
import { listSurveyTitles } from 'src/graphql/queries';
import aws_exports from 'src/aws-exports';
API.configure(aws_exports);
export const surveyTitlesApi = createApi({
reducerPath: 'surveyTitles',
baseQuery: graphqlRequestBaseQuery({
url: '/graphql',
}),
endpoints: (builder) => …Run Code Online (Sandbox Code Playgroud) AppSync GraphQL订阅的参数可以用于什么?根据文档上的实时数据页面:
使用GraphQL订阅的一个重要部分是了解何时以及如何使用参数,因为细微的更改将允许您修改客户端通知发生的突变的方式和时间.(...)在默认示例中,客户端可以在传递特定eventId参数时订阅注释
但是,我找不到任何方法来访问订阅参数.我有不同的"渠道"评论,我希望用户能够单独订阅,可选择使用密码.我设置的订阅会响应所有渠道中的评论.
有没有办法通过映射模板或类似方法"过滤"通过订阅的数据?如果没有,订阅参数的预期用途是什么?过滤必须在客户端完成吗?
amazon-web-services graphql serverless-framework serverless aws-appsync
我尝试在AWS AppSync的DynamoDB表中订阅突变。该模式简要如下:
type Post {
id: ID!
userId: String!
title: String
body: String!
}
input UpdatePostInput {
id: ID!
title: String
body: String
}
type Mutation {
updatePost(input: UpdatePostInput!): Post
}
type Subscription {
onUpdatePost(id: ID!): Post
@aws_subscribe(mutations: ["updatePost"])
}
Run Code Online (Sandbox Code Playgroud)
给定帖子的ID,当我想获取帖子正文中的更改时,我尝试将上述订阅用作:
subscription OnUpdatePost {
onUpdatePost(id: "some-id") {
id
body ## This line should make the trick, but it does not
}
}
Run Code Online (Sandbox Code Playgroud)
订阅被触发-很好。但是,结果仅ID__typenamebody包含和,不包含:
{
"data": {
"onUpdatePost": {
"id": "some-id",
"__typename": "Post" …Run Code Online (Sandbox Code Playgroud) 我很难弄清楚如何在使用AWS Amplify和AWS AppSync的React应用程序中处理未经身份验证的用户。似乎大多数文档建议使用withAuthenticatorHOC 打包整个应用程序,aws-amplify-react但在现实世界中,这种情况很少见。
所以在这里,我如何设置客户端与AppSync API进行通信
const client = new AWSAppSyncClient({
url: AppSyncConfig.aws_appsync_graphqlEndpoint,
region: AppSyncConfig.aws_appsync_region,
auth: {
type: AUTH_TYPE.AMAZON_COGNITO_USER_POOLS,
jwtToken: async () =>
(await Auth.currentSession()).getIdToken().getJwtToken()
}
});
Run Code Online (Sandbox Code Playgroud)
然后包装顶级App组件export default withAuthenticator(App);
所有这些都有效,用户点击了根URL并获得了登录视图。如前所述,在现实世界中这是非常罕见的情况。通常,根URL以及许多其他URL向未经身份验证的用户开放。如何使用AWS Amplify完成它?-没有文档,而不是tut :-(
我发现了一些使它在这里工作的提示,但仍然没有完整的解释。
aws-appsync ×10
graphql ×4
aws-amplify ×2
reactjs ×2
aws-cdk ×1
firebase ×1
node.js ×1
rtk-query ×1
serverless ×1
subscription ×1
typescript ×1