标签: aws-appsync

AWS AppSync 解析程序内部超时配置

假设我对 http 或 dynamodb 使用简单的 vtl 解析器,有没有办法在数据源超时的情况下执行一些清理(例如 dynamodb 服务在 2 秒内没有响应)。不幸的是,我在互联网上找不到任何关于 appsync 和超时的参考,我希望能够: 1. 为解析器指定一个低于默认 appsync 超时 30 秒的较低阈值超时 2. 能够在上述超时的情况下有一个后备机制

我认为使用 lambda 解析器应该很容易做到这一点,但目前我试图避免这种情况,因为冷启动。

谢谢

amazon-web-services aws-appsync

3
推荐指数
1
解决办法
2454
查看次数

在 Graphql 游乐场上使用 AWS Cognito 用户池验证 AppSync 突变

一个非常基本的场景,我想在 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)

graphql aws-appsync

3
推荐指数
1
解决办法
5856
查看次数

AWS AppSync 与 Firebase 作为 OpenID Connect 提供商

我想使用 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

3
推荐指数
1
解决办法
1293
查看次数

将 graphQL 与 API Gateway (apollo-server-lambda) 结合使用与 AppSync

这是一个让我一直困惑的问题。尽管 AppSync 是针对 GraphQL 进行销售的,而 API Gateway 是针对 REST 进行销售的。但 API Gateway 也可以通过 lambda 中的 apollo 服务器与 GraphQL 配合使用。

那么,到底是什么让其中一个比另一个更好呢?

amazon-web-services aws-api-gateway aws-appsync

3
推荐指数
1
解决办法
3342
查看次数

AWS CDK,打字稿-“this”类型的参数不可分配给“Construct”类型的参数

我有由 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: …

node.js typescript graphql aws-appsync aws-cdk

3
推荐指数
1
解决办法
3463
查看次数

Amplify API GraphQL - 无法使用在线生成的 API 密钥更改本地 API 密钥

为了更新我的 API 密钥,我曾经使用 AWS AppSync \xe2\x86\x92 设置并生成一个新密钥。

\n

之后,在我的本地应用程序中,找到旧的 API 密钥并将其替换为新的 API 密钥...直到昨天,这都工作正常,但现在,无论我做什么,当我运行时,amplify status它都会输出我的旧 API 密钥。

\n

我也尝试过amplify update api但没有运气。后来我尝试amplify pull看看它是否使用网络应用程序(AppSync)中的新密钥更新我的本地 API 密钥,但仍然没有成功。

\n

我已经在线生成了有效的 API 密钥,为什么我无法使用相同的密钥更新本地 API 密钥?

\n

amazon-web-services aws-appsync aws-amplify

3
推荐指数
1
解决办法
4134
查看次数

使用 AppSync 的 RTK 查询返回状态“已拒绝”

我正在使用 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)

reactjs graphql aws-appsync redux-toolkit rtk-query

3
推荐指数
1
解决办法
1183
查看次数

AWS AppSync订阅参数

AppSync GraphQL订阅的参数可以用于什么?根据文档上的实时数据页面:

使用GraphQL订阅的一个重要部分是了解何时以及如何使用参数,因为细微的更改将允许您修改客户端通知发生的突变的方式和时间.(...)在默认示例中,客户端可以在传递特定eventId参数时订阅注释

但是,我找不到任何方法来访问订阅参数.我有不同的"渠道"评论,我希望用户能够单独订阅,可选择使用密码.我设置的订阅会响应所有渠道中的评论.

有没有办法通过映射模板或类似方法"过滤"通过订阅的数据?如果没有,订阅参数的预期用途是什么?过滤必须在客户端完成吗?

amazon-web-services graphql serverless-framework serverless aws-appsync

2
推荐指数
1
解决办法
3234
查看次数

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)

subscription amazon-web-services aws-appsync

2
推荐指数
1
解决办法
829
查看次数

如何在AWS Amplify / AppSync React应用中正确处理未经身份验证的用户和请求?

我很难弄清楚如何在使用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 :-(

我发现了一些使它在这里工作的提示,但仍然没有完整的解释。

amazon-web-services reactjs aws-appsync aws-amplify

2
推荐指数
1
解决办法
1225
查看次数