标签: aws-appsync

使用 AppSync API 密钥过期的 Amplify CI/CD Pipelines 更新 AppSync API 时出错:找不到 API 密钥

我们有AWS Amplify项目,启用了 CI/CD,并为我的后端启用了AppSync作为 API。CI/CD 工作正常,直到AppSync应用程序的API_KEY未过期,现在它已过期并且管道失败。我已尝试手动更新API_KEY过期时间,但管道仍然失败。有描述的解决方案可以手动整理或升级 Amplify CLI版本,但在我的情况下似乎没有这两个选项。

\n

我们还有第三种选择吗?

\n

以下是来自构建管道的日志。

\n
2021-09-20T08:26:55.643Z [INFO]: UPDATE_IN_PROGRESS amplify-smsservice-test-115827-apiSmsTest-QXTZ5RMZXWPI AWS::CloudFormation::Stack Mon Sep 20 2021 08:26:55 GMT+0000 (Coordinated Universal Time) User Initiated\n2021-09-20T08:27:05.585Z [INFO]: \n2021-09-20T08:27:05.588Z [INFO]: UPDATE_IN_PROGRESS          GraphQLSchema                                          AWS::AppSync::GraphQLSchema Mon Sep 20 2021 08:27:01 GMT+0000 (Coordinated Universal Time)\n                                 UPDATE_IN_PROGRESS          GraphQLAPIKey                                          AWS::AppSync::ApiKey        Mon Sep 20 2021 08:27:01 GMT+0000 (Coordinated Universal Time)\n                                 UPDATE_FAILED               GraphQLAPIKey                                          AWS::AppSync::ApiKey        Mon Sep 20 2021 08:27:03 GMT+0000 (Coordinated Universal Time) API …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-appsync aws-amplify aws-amplify-cli

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

如何将 AWS Amplify Appsync 默认授权模式从 API KEY 更改为 cognito 用户池?

我正在使用Amplify,我将身份验证添加到我的应用程序中,我的 graphQL 架构具有私有规则,所有事情在我的本地都运行良好,每个 graphQl api 调用,它包含访问令牌和 appSync 接受我的请求。但是当我部署我的应用程序时,我收到一个错误,因为我的所有 graphQl 请求仍然使用api-key而不是访问令牌。

我的模式.graphQl 在此输入图像描述

我的 AWSAppSyncClient 在此输入图像描述

在控制台中我使用此配置在此输入图像描述

在我的本地:身份验证后一切正常。

在此输入图像描述

在生产中: graphQl 在身份验证后仍然具有 api-key

在此输入图像描述

amazon-cognito graphql aws-appsync aws-amplify

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

与 AppSync 的 Websocket 连接:错误代码 400“NoProtocolError”

我正在尝试与 appsync 建立直接的 websocket 连接,但在连接后我不断收到错误NoProtocolError( {"payload":{"errors":[{"message":"NoProtocolError","errorCode":400}]},"type":"connection_error"}')

这是我的代码

let ws = undefined;

const startWebsocket = () => {
    const url = 'wss://XXXX.appsync-realtime-api.YYYY.amazonaws.com/graphql';
    ws = new WebSocket(url);

    // just log everything
    ws.onopen    = (e) => {console.log('Socket opened',   e);};
    ws.onmessage = (e) => {console.log('Msg    received', e);};
    ws.onclose   = (e) => {console.log('Socket closed',   e);};
    ws.onerror   = (e) => {console.log('Socket error',    e);};
};
Run Code Online (Sandbox Code Playgroud)

javascript websocket aws-appsync

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

如何为aws appsync api提供一系列graphql架构?

我正在尝试使用aws appsync api(StartSchemaCreation)创建一个新的graphql api的模式,其中包含现有graphql api的模式,我使用aws appsync的GetIntrospectionSchema api进行了转储.但是StartSchemaCreation的--definition参数要求我提供一个graphb模式blob来在新的api中创建.我在.json和.graphql文件中有我的graphql架构,但我不能直接使用它们,因为它给出错误"无法解析架构文档 - 确保它是一个有效的SDL格式的文档."

我需要帮助了解如何通过启动模式创建的--definition参数传递我的graphql模式.

我正在使用aws-cli StartSchemaCreation.

aws-cli aws-appsync

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

FriendsList的AWS AppSync用户关系

我对AWS AppSync和ApolloClient有问题。如何使用Amazon Service中名为AppSync的用户之间的关联,即作为节点和边缘的连接。我想做的是,当我关注用户时,我希望通过一个请求查看所有用户的流量。这是我想要成为的要求。我如何为此构建结构?

query {
    getFeeds(id:"myUserId") {
    following {
      userFeed {
        id
        ImageDataUrl
        textData
        date
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我创建的架构如下

type Comments {
    id: ID!
    date: Int!
    message: String!
    user: User
}
type Feed {
    id: ID!
    user: User!
    date: Int!
    textData: String
    ImageDataUrl: String
    VideoDataUrl: String
    likes: Like
    comments: [Comments]
}

#Objects
type Like {
    id: ID!
    number: Int!
    likers: [User]
}
}
type Query {
    getAllUsers(limit: Int): [User]
}

type User {
    id: ID!
    name: String!
    email: String! …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb apollo graphql aws-appsync

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

错误:与数据源关联的解析器

我遇到了无服务器错误: Resolver associated with data sources从serverless.yml配置文件进行构建时:

# serverless.yml
...
mappingTemplates:
  - dataSource: Wallet
    type: Query
    field: walletFromId
    request: "_dynamo-get-wallet.txt"
    response: "_generic-result-response.txt"
  - dataSource: Wallet
    type: Query
    field: walletsFromUser
    request: "_dynamo-get-wallets-from-user.txt"
    response: "_generic-result-response.txt"
  - dataSource: Wallet
    type: Mutation
    field: registerWallet
    request: "_dynamo-put-wallet.txt"
    response: "_generic-result-response.txt"
dataSources:
  - type: AMAZON_DYNAMODB
    name: Wallet
    description: 'Wallet DataSource'
    config:
      tableName: "${self:custom.stage}-Wallet"
      serviceRoleArn: "arn:aws:iam::${self:custom.accountId}:role/${self:custom.appSync.serviceRole}"
...
Run Code Online (Sandbox Code Playgroud)

我也有一个schema.graphql:

type Query {
    # query the wallet with given id and get the output with detail info
    walletFromId(walletId: String!): Wallet! …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb graphql serverless aws-appsync

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

AWS Appsync-无法找到用户池客户端ID

现在,我正在使用AWS AppSync和Cognito。我编写了AppSync的架构。但是我无法在“查询”选项卡中测试架构。正在运行的查询需要用户身份验证,而我找不到用户池客户端ID。在哪里可以找到它?

在此处输入图片说明 在此处输入图片说明

amazon-web-services amazon-cognito aws-appsync

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

AppSync 检查 DynamoDB 记录是否存在

我正在尝试为 AppSync 编写一个解析器,它根据 DynamoDB 中记录的存在导出布尔字段的值。

我目前有以下请求映射模板:

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "field1": $util.dynamodb.toDynamoDBJson($ctx.args.field1),
        "field2": $util.dynamodb.toDynamoDBJson($ctx.args.field2)
    }
}
Run Code Online (Sandbox Code Playgroud)

以及以下响应映射模板:

#if($util.isNull($ctx.result))
    #set($exists = false)
#else
    #set($exists = true)
#end

$util.toJson({
    "field1": $ctx.args.field1,
    "field2": $ctx.args.field2,
    "exists": $exists
})
Run Code Online (Sandbox Code Playgroud)

如果记录存在,则这可以正常工作,但如果不存在,则 AppSync 只会为整个 API 调用返回“null”,并且似乎根本不会评估响应映射模板。有什么办法可以指示它不要这样做吗?

另一种选择是执行查询并查看响应的长度,但我不知道如何检查这些模板中的长度。

amazon-web-services aws-appsync

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

如何仅使用`ctx.identity.cognitoIdentityId`来获取AppSync Resolver中的相关Cognito用户池用户数据?

之前,当我们仅使用Cognito用户池启动项目时,我创建了很多解析器,并通过Cognito用户池数据进行了验证,例如:

#if( $ctx.identity.claims["custom:role"] == "admin" )
...some code...(get data, invoke lambda, e.t.c.)
#else
  $utils.unauthorized()
#end
Run Code Online (Sandbox Code Playgroud)

但是后来我们需要其他授权提供者(Facebook,Google等)。因此,我们迁移到了cognitoIdentityId,但是在AppSync解析器中从Cognito用户池中获取用户数据时出现了问题。在AWS Lambda中,我通过cognitoIdentityAuthProvider 找到了 Cognito用户池ID,并且可以获取Cognito用户属性,如UserAttributes下面的代码所示:

...
...
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider({
  apiVersion: '2016-04-18',
});

const getCognitoUserPoolId = (authProvider) => {
  const parts = authProvider.split(':');
  return parts[parts.length - 1].slice(0, -1);
};

// cognitoIdentityAuthProvider, which we pass as an parameter($ctx.identity.cognitoIdentityAuthProvider) from the AppSync resolver
const SUB = getCognitoUserPoolId(cognitoIdentityAuthProvider);

const params = {
  UserPoolId: COGNITO_USER_POOL_ID,
  Username: SUB,
};

try {
  const { UserAttributes } = await …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cognito aws-appsync

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

AWS AppSync Error - AWSMobileClientStore.get(String) on null object reference

APPSYNC_ERROR: Attempt to invoke virtual method
Run Code Online (Sandbox Code Playgroud)

java.util.Map com.amazonaws.mobile.client.AWSMobileClientStore.get(java.lang.String[]) on a null object reference

I am trying to inserting data in AWS table, But i got this error. Can you help me to resolve this issue?

AWSAppSyncClient client = AWSAppSyncClient.builder()
                .context(context)
                .region(AppHelper.cognitoRegion)
                .serverUrl(AppHelper.SERVER_URL)
                .cognitoUserPoolsAuthProvider(new CognitoUserPoolsAuthProvider() {
                    @Override
                    public String getLatestAuthToken() {
                        try {
                            return AWSMobileClient.getInstance().getTokens().getIdToken().getTokenString();
                        } catch (Exception e){
                            Log.e("APPSYNC_ERROR", e.getLocalizedMessage());
                            return e.getLocalizedMessage();
                        }
                    }
                }).persistentMutationsCallback(new PersistentMutationsCallback() {
                @Override
                public void onResponse(PersistentMutationsResponse response) {
                    Log.d("NOTERROR", response.getMutationClassName());
                }

                @Override
                public void onFailure(PersistentMutationsError …
Run Code Online (Sandbox Code Playgroud)

android amazon-web-services aws-sdk aws-appsync appsync-apollo-client

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