我们有AWS Amplify项目,启用了 CI/CD,并为我的后端启用了AppSync作为 API。CI/CD 工作正常,直到AppSync应用程序的API_KEY未过期,现在它已过期并且管道失败。我已尝试手动更新API_KEY过期时间,但管道仍然失败。有描述的解决方案可以手动整理或升级 Amplify CLI版本,但在我的情况下似乎没有这两个选项。
\n我们还有第三种选择吗?
\n以下是来自构建管道的日志。
\n2021-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 …我正在使用Amplify,我将身份验证添加到我的应用程序中,我的 graphQL 架构具有私有规则,所有事情在我的本地都运行良好,每个 graphQl api 调用,它包含访问令牌和 appSync 接受我的请求。但是当我部署我的应用程序时,我收到一个错误,因为我的所有 graphQl 请求仍然使用api-key而不是访问令牌。
在我的本地:身份验证后一切正常。
在生产中: graphQl 在身份验证后仍然具有 api-key
我正在尝试与 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);};
};
我正在尝试使用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 AppSync和ApolloClient有问题。如何使用Amazon Service中名为AppSync的用户之间的关联,即作为节点和边缘的连接。我想做的是,当我关注用户时,我希望通过一个请求查看所有用户的流量。这是我想要成为的要求。我如何为此构建结构?
query {
    getFeeds(id:"myUserId") {
    following {
      userFeed {
        id
        ImageDataUrl
        textData
        date
      }
    }
  }
}
我创建的架构如下
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! …amazon-web-services amazon-dynamodb apollo graphql aws-appsync
我遇到了无服务器错误:
 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}"
...
我也有一个schema.graphql:
type Query {
    # query the wallet with given id and get the output with detail info
    walletFromId(walletId: String!): Wallet! …现在,我正在使用AWS AppSync和Cognito。我编写了AppSync的架构。但是我无法在“查询”选项卡中测试架构。正在运行的查询需要用户身份验证,而我找不到用户池客户端ID。在哪里可以找到它?
我正在尝试为 AppSync 编写一个解析器,它根据 DynamoDB 中记录的存在导出布尔字段的值。
我目前有以下请求映射模板:
{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "field1": $util.dynamodb.toDynamoDBJson($ctx.args.field1),
        "field2": $util.dynamodb.toDynamoDBJson($ctx.args.field2)
    }
}
以及以下响应映射模板:
#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
})
如果记录存在,则这可以正常工作,但如果不存在,则 AppSync 只会为整个 API 调用返回“null”,并且似乎根本不会评估响应映射模板。有什么办法可以指示它不要这样做吗?
另一种选择是执行查询并查看响应的长度,但我不知道如何检查这些模板中的长度。
之前,当我们仅使用Cognito用户池启动项目时,我创建了很多解析器,并通过Cognito用户池数据进行了验证,例如:
#if( $ctx.identity.claims["custom:role"] == "admin" )
...some code...(get data, invoke lambda, e.t.c.)
#else
  $utils.unauthorized()
#end
但是后来我们需要其他授权提供者(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 …APPSYNC_ERROR: Attempt to invoke virtual method
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 …android amazon-web-services aws-sdk aws-appsync appsync-apollo-client
aws-appsync ×10
graphql ×3
aws-amplify ×2
android ×1
apollo ×1
aws-cli ×1
aws-sdk ×1
javascript ×1
serverless ×1
websocket ×1