当前位置: 首页 > 知识库问答 >
问题:

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

巢嘉志
2023-03-14

我正在使用AWS Amplify设置AppSync GraphQL API。我有一个带有@model注释的模式,我正在尝试编写一个lambda解析器,它将读/写@model生成的DynamoDB表。然而,当我尝试使用AmplifyMock进行本地测试时,我的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读取的,这些表/api不是放大应用程序的一部分),所以任何指针都是值得赞赏的。是否支持运行这种类型的设置,或者我必须推送到AWS才能进行测试?

共有3个答案

颜云瀚
2023-03-14

您的dynamodb主机不正确。发电机B。us-east-1-fake不是有效的主机。请用真实的dynamodb主机名更新它
如果您在本地运行安装程序,请先在cli上配置aws。

江志业
2023-03-14

请尝试下面的设置,它对我很好,

const AWS = require('aws-sdk');

// Local
const dynamoDb = new AWS.DynamoDB.DocumentClient({
    region: 'us-fake-1',
    endpoint: "http://localhost:62224/",
    accessKeyId: "fake",
    secretAccessKey: "fake"
});

// Live
// const dynamoDb = new AWS.DynamoDB.DocumentClient();
益麻雀
2023-03-14

新答案:

Amplify现在有关于此用例的文档:https://docs.amplify.aws/cli/usage/mock#connecting-到模拟模型表

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

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

原始答复:

在深入研究了扩增CLI代码后,我找到了一个目前有效的解决方案。

这里是放大模拟初始化DynamoDB Local的地方。如您所见,它没有设置基于文档的--sharedDb标志,这意味着创建的数据库文件将以请求的访问密钥id为前缀,然后以区域为前缀。来自Amplify的请求的访问密钥id将为“假”,区域为此处定义的“us-fake-1”。此外,这里定义了由Amplify启动的DynamoDB本地实例的端口62224。

因此,要连接到由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创建的表一起使用,则必须使用上面的区域键和访问键创建一个新的配置文件。

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

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

 类似资料:
  • 我是Linux的新手,我能够在Manjaro上安装我的LAMP服务器。得到了一切的窍门,但现在有问题设置我的虚拟主机。我正在使用http://httpd.conf.中注释出"包含conf/额外/httpd-vhosts.conf",但在编辑httpd-vhosts.conf.后无法访问主机得是, 但是dummy.local没有加载并说, 无法访问此站点。找不到本地服务器的IP地址。 谢谢你。

  • 摘要:一个更好的方法,以中止ansible playbook立即,如果任何主机是无法访问。 如果任何一个主机无法访问,是否有方法中止Ansible playbook。我发现,如果它无法到达主机,它仍将继续运行,并执行剧本中的所有播放/任务。 我所有的剧本都指定max_fail_percent为0,但在本例中ansible不会抱怨,因为所有可访问的主机都可以执行所有的剧本。 目前我有一个简单但黑客的

  • 我想创建一个。我的java桌面应用程序的exe文件。因此,我认为Launch4j是最好的选择。 当我跑的时候。在文件中,我有以下错误消息。 我在Mac OS Catalina 10.15.3版下工作。我的Java版本环境:openjdk版本“11.0.7”2020-04-14 openjdk运行时环境采用openjdk(构建11.0.7 10)openjdk 64位服务器虚拟机采用openjdk(

  • 我无法将localhost与xamarin.android应用程序一起使用。我在Chrome浏览器上执行过Web项目和服务项目(不是移动应用程序)。 显示的端口号我尝试在Android Studio模拟器和Genymotion模拟器中分别添加10.0.2.2:&10.0.3.2:浏览,结果是Bad Request-Invalid hostname。甚至我也试过服务项目端口号,都不行。 Web项目:

  • 我通过Xtext创建了一个DSL,现在需要将编辑器中创建的模型转换为另一个模型。我认为最直接的方法是使用某种M2M转换框架,但我需要访问文本文件后面的模型。问题:如何获得模型的引用?