amazon-web-services - 运行放大模拟时无法访问 DynamoDB 主机

标签 amazon-web-services aws-lambda amazon-dynamodb aws-amplify aws-appsync

我正在使用 AWS Amplify 设置 AppSync GraphQL API。我有一个带有 @model 注释的模式,我正在尝试编写一个 lambda 解析器,它将读取/写入 @model 生成的 DynamoDB 表。但是,当我尝试使用 amplify mock 进行本地测试时我的 JS 函数抛出

error { UnknownEndpoint: Inaccessible host: `dynamodb.us-east-1-fake.amazonaws.com'. This service may not be available in the `us-east-1-fake' region.

我似乎根本找不到关于这个用例的太多文档(大多数 lambda 解析器示例都是从不属于放大应用程序的其他表/API 读取的),因此任何指针都值得赞赏。是否支持运行这种类型的设置,还是我必须推送到 AWS 才能进行测试?

最佳答案

新答案:
Amplify 现在有关于这个用例的文档:https://docs.amplify.aws/cli/usage/mock#connecting-to-a-mock-model-table
您可以为模拟设置环境变量,将模拟 lambda 中的 DDB 客户端指向本地 DDB 实例
==================================================== ====================
原答案:
在深入研究了 Amplify CLI 代码之后,我找到了一个现在可以使用的解决方案。
Here是哪里 amplify mock初始化 DynamoDB 本地。如您所见,它没有设置 --sharedDb标志based on the docs意味着创建的数据库文件将以请求的访问 key ID 为前缀,然后是区域。来自 Amplify 的请求的访问 key ID 将是“假的”,并且该区域是“us-fake-1”,如定义 here .此外,Amplify 启动的 DynamoDB Local 实例的端口定义为 62224 here .
因此,要连接到 Amplify 创建的表,需要以下 DynamoDB 配置

const ddb = new AWS.DynamoDB({
  region: 'us-fake-1',
  endpoint: "http://172.16.123.1:62224/",
  accessKeyId: "fake",
  secretAccessKey: "fake"
})
如果您想将 AWS CLI 与 Amplify 创建的表一起使用,您必须使用上面的区域和访问 key 创建一个新配置文件。
我仍然需要做一些额外的工作来找出让这些配置值在本地模拟值和实际值之间切换的好方法,但这暂时解除了本地测试的阻塞。
至于我对“us-east-1-fake”的 AWS::Region 的设置位置的另一个问题,设置为 here但它似乎没有在其他任何地方使用。即,在运行 amplify mock 时它被设置为占位符值但是将其用作其他地方的区域进行本地测试似乎不起作用。

关于amazon-web-services - 运行放大模拟时无法访问 DynamoDB 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883678/

相关文章:

amazon-web-services - 如何从执行角色有权这样做的 AWS Lambda 调用 AWS_IAM 授权的 API 网关终端节点?

javascript - 从api获取json时变量未定义

amazon-web-services - 无服务器步骤函数 : how to pass data from Lambda to ECS Fargate task

amazon-web-services - ECS CFT错误: Encountered unsupported property links

linux - 如何从 ssh 配置中删除默认 ssh 主机?

amazon-web-services - 存档dynamodb记录的最佳方式?

amazon-web-services - 如何设计关键模式以使每个应用程序只有一个 DynamoDB 表?

java - AWS Java SDK - 什么更快? DynamoDB 客户端 (@ApplicationScoped) 的单个实例还是为每个请求创建一个新实例?

amazon-web-services - 用于用户管理的 AWS

amazon-web-services - 多个用户通过 SSH 连接到 AWS EC2