gpt4 book ai didi

javascript - 使用无服务器框架在 YML 中的代码块中使用 Javascript Resolver 时出现 AWS::Appsync:Resolver Cloudformation 错误

转载 作者:行者123 更新时间:2023-12-03 07:22:09 26 4
gpt4 key购买 nike

我在使用 Javascript 解析器在无服务器框架中创建 AWS::Appsync:Resolver Cloudformation 时遇到问题。

根目录/src/resolvers/jsResolver.js 中的我的 Javascript Resolver 代码已附加到 AWS::AppSync::Resolver 代码块中的cloudformation。我还在我的 package.json 中安装了 appsync utils 的 npm 插件

import { util } from '@aws-appsync/utils';

export function request(ctx) {
const {source, args} = ctx
return {
operation: 'Invoke',
payload: { field: ctx, arguments: args, source },
};
}

export function response(ctx) {
util.error("Failed to fetch relatedPosts", "LambdaFailure", ctx.prev.result)
return ctx.result;
}

我的 AWS::AppSync::Resolver Cloudformation 位于 YML 文件下方,如果我已将其声明为 APPSYNC_JS 运行时,我也将代码用作其强制项

AppSyncJsResolver:
Type: AWS::AppSync::Resolver
Properties:
ApiId: !GettAtt Graphql.APiId
Kind: PIPELINE
Code: ./src/resolvers/jsResolver.js <—- Here my code is breaking up with error contains one or more error
TypeName: Query
FieldName: getInfo
Runtime:
Name: APPSYNC_JS
RuntimeVersion: 1.0.0
PipelineConfig:
Functions:
- !GetAtt AppSyncFunction.FunctionId

我已按照适用于 Appsync 的 AWS Cloudformation 文档尝试了上述代码,他们在 AWS::AppSync::Resolver 中提到了使用 Cloudformation 创建 Javascript Resolver 作为下面的属性之一。我已将其包含在我的 AWS::AppSync::Resolver

Code  
The resolver code that contains the request and response functions. When code is
used, the runtime is required. The runtime value must be APPSYNC_JS.

Required: No

Type: String

Required: No

Type: String

所以我尝试过这个,但找不到足够的关于 Javascript 解析器的解决方案,所有这些解决方案都适用于特定的 VTL 模板。

使用上述代码,我的 CloudFormation 构建失败,并出现以下错误:发生错误:AppSyncJSResolver-代码包含一个或多个错误。(服务:AWSAppSync;状态代码:400;错误代码:BadRequestException ; 请求 ID: 0245d64d-...; 代理: null)

  • AppSyncJSResolver - 这是上面代码中我的 AWS::AppSync::Resolver。我有代码属性,这给了我一个错误。我已经通过多个来源进行了验证,并且没有发现我在 AppSyncJSResolver 中声明的 Javascript Resolver 文件/src/resolvers/jsResolver.js 存在任何错误 AWS::AppSync::Resolver 在代码属性中,我不确定为什么会收到此错误,任何帮助都会很棒。

最佳答案

回答我自己的问题,我通过两种方式解决它。

1.我们可以在YML Cloudformation中的Code属性中编写完整的Resolver代码,如下所示。确保您的解析器代码应位于您的 Code 属性内并使用“|” Code 属性后的特殊字符(多行代码)

AppSyncJsResolver:
Type: AWS::AppSync::Resolver
Properties:
ApiId: !GettAtt Graphql.APiId
Kind: PIPELINE
Code: |
import { util } from '@aws-appsync/utils';
export function request(ctx) {
const {source, args} = ctx
return {
operation: 'Invoke',
payload: { field: ctx, arguments: args, source },
};
}
export function response(ctx) {
util.error("Failed to fetch relatedPosts", "LambdaFailure",ctx.prev.result)
return ctx.result;
}
TypeName: Query
FieldName: getInfo
Runtime:
Name: APPSYNC_JS
RuntimeVersion: 1.0.0
PipelineConfig:
Functions:
- !GetAtt AppSyncFunction.FunctionId

2. 如果您希望将业务逻辑排除在 YML 文件之外并保持独立,那么您可以在您的文件中使用 CodeS3Loc​​ation 属性JavaScript 解析器如下所示。

首先在 S3 中创建存储桶,并将您的 javascript 解析器文件和解析器代码存储在存储桶中。确保您向 appsync 授予足够的 IAM 权限以访问您的 S3 存储桶。

完成上述步骤后,您可以像下面这样重写 YML Cloudformation

AppSyncJsResolver:
Type: AWS::AppSync::Resolver
Properties:
ApiId: !GettAtt Graphql.APiId
Kind: PIPELINE
CodeS3Location:s3://my-bucket-name/my-filename.js
TypeName: Query
FieldName: getInfo
Runtime:
Name: APPSYNC_JS
RuntimeVersion: 1.0.0
PipelineConfig:
Functions:
- !GetAtt AppSyncFunction.FunctionId

希望这可以帮助其他人,并为 Javascript Resolver 做出更多贡献,以便其他人更容易找到更复杂的解决方案并获得尽可能多的有关 Javascript Resolver 的资源。感谢@Graham Hesketh 的建议。

关于javascript - 使用无服务器框架在 YML 中的代码块中使用 Javascript Resolver 时出现 AWS::Appsync:Resolver Cloudformation 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75422633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com