将 localstack 与 Spring Cloud AWS 2.3 结合使用时出现未知主机

2023-11-22

AWS S3 的“ResourceLoader”可以很好地处理这些属性:

cloud:
  aws:
    s3:
        endpoint: s3.amazonaws.com     <-- custom endpoint added in spring cloud aws 2.3
    credentials:
        accessKey: XXXXXX
        secretKey: XXXXXX
    region:
        static: us-east-1
    stack:
        auto: false

但是,当我在本地启动 localstack 容器并尝试将其与这些属性一起使用时(根据此发行文档:https://spring.io/blog/2021/03/17/spring-cloud-aws-2-3-is-now-available):

cloud:
  aws:
    s3:
        endpoint: http://localhost:4566
    credentials:
        accessKey: test
        secretKey: test
    region:
        static: us-east-1
    stack:
        auto: false

我得到这个异常:

17:12:12.130 [reactor-http-nio-2] 错误 org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler - [23efd000-1] HTTP GET“/getresource/test”的 500 服务器错误 com.amazonaws.SdkClientException:无法执行 HTTP 请求:mybucket.localhost 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleRetryableException(AmazonHttpClient.java:1207) ~[aws-java-sdk-core-1.11.951.jar:?] 抑制:reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 在以下站点发现错误: |_ 检查点 ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain] |_ 检查点 ⇢ HTTP GET "/getresource/test" [ExceptionHandlingWebHandler] 堆栈跟踪: 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleRetryableException(AmazonHttpClient.java:1207) ~[aws-java-sdk-core-1.11.951.jar:?]

引起原因:java.net.UnknownHostException:mybucket.localhost 在 java.net.InetAddress$CachedAddresses.get(InetAddress.java:797) ~[?:?]

我可以在 S3 浏览器中查看我的 localstack 存储桶文件,否则效果很好。

这是我的 localstack 的 docker compose 配置:

version: '3.1'
services:
localstack:
    image: localstack/localstack:latest
    environment:
        - AWS_DEFAULT_REGION=us-east-1
        - AWS_ACCESS_KEY_ID=test
        - AWS_SECRET_ACCESS_KEY=test
        - EDGE_PORT=4566
        - SERVICES=lambda,s3
    ports:
        - '4566-4583:4566-4583'
    volumes:
        - "${TEMPDIR:-/tmp/localstack}:/tmp/localstack"
        - "/var/run/docker.sock:/var/run/docker.sock"          

这是我读取文本文件的方式:

public class ResourceTransferManager {

@Autowired
ResourceLoader resourceLoader;

public void resourceLoadingMethod() throws IOException {
    Resource resource = resourceLoader.getResource("s3://mybucket/index.txt");
    InputStream inputStream = resource.getInputStream();
    System.out.println("File content: " + IOUtils.toString(inputStream, StandardCharsets.UTF_8));
}}

  

默认情况下,S3 客户端创建一个以存储桶名称作为子域的路径,这会导致问题。 有几种方法可以解决这个问题:

  1. 如果是 localstack ,请勿使用端点http://localhost:4566,使用标准甲酸盐端点,即:http://s3.localhost.localstack.cloud:4566,这实际上会连接到 DNS 并在内部解析为本地主机 IP,因此这会正常工作。 (仅对它进行空化,它使用公共 DNS 进行解析,因此它要么需要互联网连接,要么您需要在主机文件中添加前缀存储桶名称的主机条目127.0.0.1 <yourexpectedbucketName>.s3.localhost.localstack.cloud)。 或者,如果您使用 docker,那么您也可以为 localstack 容器创建网络别名,而不是创建主机条目,例如:<yourexpectedbucketName>.s3.localhost.localstack.cloud

  2. 另一种更好的方法是扩展第一种方法,但这里不是为每个存储桶使用别名(这可能并不总是可行),您可以启动本地DNS容器并在那里使用通配符 dns 配置。请参阅简化示例:https://gist.github.com/paraspatidar/c29e4adb172a5afc92852a57e621323d(原文参考:https://gist.github.com/NAR8789/92da076d0c35b434107fb4f4f198fd12)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 localstack 与 Spring Cloud AWS 2.3 结合使用时出现未知主机 的相关文章

  • rgdal“gdal-config”中配置错误

    我目前正在 Linux 集群上用 R 运行一些物种分布建模和丰富度映射 为了运行我的分析 我需要安装 rgdal 以便建模包中的栅格函数正常工作 我已经安装了 proj4 和 gdal 但是 当我尝试安装 rgdal 时 我收到一条错误消息
  • 成为 EC2 上的根设备意味着什么?

    我在 EC2 文档中找不到答案 它是做什么用的 如果我启动了 EBS 支持的实例 则该实例的根设备将是 EBS 卷 如果我在实例上安装一些工具 软件 这些工具 软件是否会默认安装在根实例上 不过我想这个问题确实来自于对根设备的了解很少 有这
  • 如何添加到 MySQL 中的每一行?

    我们有一个简单整数列 我们想要向每一行添加值 10 对于 MySQL 数据库 我们如何在 sql 中执行此操作 实际上我们还有另一个列需要做同样的事情 它是一个日期 我们需要在日期上添加一个月 怎么做 整数 UPDATE table nam
  • 指针是否保证>某个值?

    在 C 中 当我这样做时new 甚至malloc 是否能保证返回地址大于某个值 因为 在这个项目中 我发现使用 0 1k 作为枚举非常有用 但如果有可能获得这么低的值 我不想这样做 我唯一的目标系统是 32 位或 64 位 CPU 操作系统
  • lxml 标签名称带有“:”

    我正在尝试使用 lxml etree 从 JSON 对象创建 xml 树 有些标记名中包含冒号 例如 设置 当前 我尝试使用 settings current 作为标签名称 但我得到这个 ns0 当前 xmlns ns0 设置 是的 首先阅
  • django 2 中的迁移错误; AttributeError:“str”对象没有属性“decode”

    我正在我新建的名为 core 的应用程序上运行迁移 当我在其上运行迁移时 我收到一个错误 告诉我这一点 query query decode errors replace AttributeError str object has no a
  • LXML:无法导入 etree

    我访问此页面并下载了 tar 文件 http pypi python org pypi lxml 2 3 4 downloads 然后 我将 lxml 文件夹复制到我的 Python26 Lib 文件夹中 现在 当我走向口译员并输入from

随机推荐

  • 使用 RESTlet 进行细粒度身份验证

    我想使用带有细粒度身份验证的 RESTlet 公开资源 我的ServerResource应该可以通过访问GET仅适用于经过身份验证的会员 使用基本身份验证 但是 请求使用POST无需任何身份验证的呼叫者也应该可以使用 为了澄清 http 路
  • 在WebKit/Chrome中使用XHR上传二进制字符串(相当于Firefox的sendAsBinary)

    我正在开发一个使用多个尖端 WebKit 功能的 Web 应用程序 它本质上是这样做的 读取本地文件FileReader 使用 JavaScript 解压缩库将每个文件解压缩为字符串 并使用 XMLHttpRequest POST 每个文件
  • Google AppEngine:自定义身份验证

    我可以使用 Google 帐户在 AppEngine 中验证我的用户的方式简直太棒了 但是 我需要使用我的自定义认证登录系统 我将有一个 AppUsers 表 其中包含用户名和加密密码 我在 gae 上读到了一些有关会话的内容 但我需要帮助
  • 使div的高度随着其内容而扩展

    我有这些嵌套的 div 我需要主容器扩展 高度 以容纳内部的 DIV
  • 错误的ELF类:ELFCLASS32(可能原因:架构字宽不匹配)

    我有一个奇怪的异常 说 ELF 类错误 但包装器设置正确 要使用比利时身份证发行商官方网站上的 SDK 读取比利时身份证 http eid belgium be en binaries beid sdk 3 5 3 ubuntu 9 10
  • django 中的分页 - 原始查询字符串丢失

    我使用文档中的代码对数据进行分页 try data paginator page request GET get page except PageNotAnInteger page 1 data paginator page 1 excep
  • 锥体图像细化

    为了制作一个漂亮的与平面相交的圆锥体三维图形 我选择对 Mathematica 中的现有方法 即 S Mangano 和 S Wagon 的书籍 进行轻微的重新排列 下面的代码假定显示所谓的丹德林结构 内球体和外球体与圆锥体内部相切 并且与
  • 如何在 javascript 中使用 python 变量?

    我一直在寻找一种使用 selenium 的网络驱动程序访问不可见文本字段的方法 我让它工作的唯一方法是使用 driver execute script document getElementById text field value XYZ
  • Stringify 一级宏展开 C

    是否可以将此 C 宏字符串化 define GPIO INT PIN GPIO PORT D GPIO PIN IRQ RISING GPIO PIN5 使用类似的东西 MY STRINGFY GPIO INT PIN to get GPI
  • 计算“查找”结果的最佳方法是什么?

    我当前的解决方案是find
  • Python:两个相同长度列表的元素连接

    我有两个相同长度的列表 a 1 2 2 3 3 4 b 9 10 11 12 13 19 20 并想将它们结合起来 c 1 2 9 2 3 10 11 3 4 12 13 19 20 我这样做是通过 c for i in range 0 l
  • python pandas 解析带有月份名称的日期时间字符串

    有人可以向我指出一种格式或代码片段来解析格式如下的日期吗 04SEP12 00 00 00 That dd mm YY HH MM SS不起作用 使用格式字符串 d b y H M S 并将其作为格式传递to datetime 您可以在中找
  • iOS - 在 Localized.strings 中用粗体字符串强调

    有没有办法像这样在可本地化文件中加粗一些单词 Pending network connection b Pending b network connection 我里面有这个字符串 我只想强调某些单词 camSave To complete
  • 半屏视图,iOS 侧边栏菜单

    因为我想在屏幕左侧显示许多菜单 就像下面一样 这是一个新的 Facebook 应用程序 当您单击其周围显示为红色方块的栏时 左侧的列表视图将在之后出现在我的应用程序中滑动右侧部分是否有任何 SDK 可以添加此内容 请帮助我 看看吧 http
  • 从 HTML 导出到 PDF (C#) [重复]

    这个问题在这里已经有答案了 可能的重复 在 NET 中将 HTML 转换为 PDF 在我们的应用程序中 我们制作 html 文档作为报告和导出 但现在我们的客户想要一个将该文档保存在他们的电脑上的按钮 问题是该文档包含图像 您可以使用以下代
  • CSS3选择器:带有类名的第一个类型?

    是否可以使用 CSS3 选择器 first of type选择具有给定类名的第一个元素 我的测试没有成功 所以我想是不是 代码 http jsfiddle net YWY4L p first of type color blue p myc
  • 将数字写入文本文件 - 批处理文件

    这应该是一个简单的问题 我对自己很失望 但我一生都找不到解决方案 我正在尝试将数字 1 写入 BAT 脚本中的文本文件 如果我执行下面的操作 它会起作用 但会在我不能拥有的数字后面留下一个尾随空格 我知道您可以通过删除 1 和 gt 之间的
  • JavaFX 中具有自动拉伸图块的 TilePane

    JavaFX 有没有办法充分利用 TilePane 或 FlowPaneand网格窗格 这是我想要实现的目标 首先 我喜欢 GridPane 的想法 我可以在其中设置一个 M N 网格 该网格会在其父容器内自动调整大小 以将空间平均划分为
  • Angular 2 - 命名路由器出口,没有可怕的 URL

    我想要两个路由器插座 一个是主插座 另一个是模态插座 当导航至 login 我想在主出口中显示我的主页组件 并在模态出口中显示我的登录组件 像这样的东西 path login component HomeComponent path log
  • 将 localstack 与 Spring Cloud AWS 2.3 结合使用时出现未知主机

    AWS S3 的 ResourceLoader 可以很好地处理这些属性 cloud aws s3 endpoint s3 amazonaws com lt custom endpoint added in spring cloud aws