运行放大模拟时无法访问 DynamoDB 主机

Edw*_*yle 4 amazon-web-services amazon-dynamodb aws-lambda aws-appsync aws-amplify

我正在使用 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.
Run Code Online (Sandbox Code Playgroud)

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

Edw*_*yle 10

新答案:

Amplify 现在有关于这个用例的文档:https : //docs.amplify.aws/cli/usage/mock#connecting-to-a-mock-model-table

您可以为模拟设置环境变量,将模拟 lambda 中的 DDB 客户端指向本地 DDB 实例

================================================== ====================

原答案:

在深入研究 Amplify CLI 代码之后,我找到了一个现在可以使用的解决方案。

这里amplify mock初始化 DynamoDB Local 的地方。如您所见,它没有设置基于文档--sharedDb标志,这意味着创建的数据库文件将以请求的访问密钥 ID 为前缀,然后是区域。来自中扩增请求的访问密钥ID将是“假的”,范围是定义为“我们假票-1”在这里。此外,通过扩增出启动的DynamoDB本地实例的端口定义62224这里

因此,要连接到 Amplify 创建的表,需要以下 DynamoDB 配置

const ddb = new AWS.DynamoDB({
  region: 'us-fake-1',
  endpoint: "http://172.16.123.1:62224/",
  accessKeyId: "fake",
  secretAccessKey: "fake"
})
Run Code Online (Sandbox Code Playgroud)

如果要将 AWS CLI 与 Amplify 创建的表一起使用,则必须使用上述区域和访问密钥创建一个新配置文件。

我仍然需要做一些额外的工作来找出一种让这些配置值在本地模拟值和实际值之间切换的好方法,但这暂时取消了本地测试。

至于我在何处设置“us-east-1-fake”的 AWS::Region 的另一个问题,这里设置它,但它似乎没有在其他任何地方使用。即,它在运行时被设置为占位符值,amplify mock但在其他地方将其用作区域进行本地测试似乎不起作用。