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

将AWS SDK的默认endpoint重定向到模拟的localstackendpoint

吕灿
2023-03-14

我有多个Java Spring Boot服务(大约20个),使用Amazon SDK for S3、SQS、DynamoDB等。

目前,要使用Amazon Web服务,我只需要指定我的AWS密钥&秘密。

ACCESS_AWS_KEY=<MY_KEY>
ACCESS_AWS_SECRET=<MY_SECRET>

然而,我想要设置离线开发环境,所以我开始对接我的服务,并建立一个单一的多Docker容器,我的所有服务都对接了,应该使用localstack而不是远程AWS服务,以允许完成离线开发。

version: '3'
services:
  service_1:
    build: ./repos/service_1
    links:
    - service_2:
    - localstack
  service_2:
    build: ./repos/service_2
    links:
    - localstack
  service_3:
    build: ./repos/service_3
    links:
    - localstack
  localstack:
    image: localstack/localstack

Amazon SDK提供了AWS_REGION环境变量,但不是我可以在所有服务中轻松使用的endpoint环境变量。

我也不想在我的服务中进行代码更改以适应新的非默认endpoint。

我想要一个通用的解决方案来转发这样的请求:

dynamodb.eu-west-1.amazonaws.com => localstack_1:4569
s3-eu-west-1.amazonaws.com => localstack_1:4572

这将只用作离线开发环境,不会接收任何真正的流量。

共有1个答案

袁谭三
2023-03-14

好吧,我终于找到了解决办法。我必须通过localstack代码库才能找到解决方案。几个简单的事情:

  • LocalStack未与IAM集成。所以它只是简单地忽略秘密密钥或密码。
  • 如果使用IAM,现在需要有一个标志来覆盖endpoint。您可能有一个标志来指示localstackhtml" target="_blank">模式。

如果您正在调试问题,我发现以下几个类很有帮助:
https://github.com/atlassian/localstack/blob/master/localstack/ext/java/src/test/java/com/atlassian/localstack/sqsmessagingtest.java https://github.com/atlassian/localstack/blob/master/localstack/ext/java/src/test/java/com/atlassian/localstack/test/java/testtils.java

现在来看看解决方案:

AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration("http://localhost:4576/", awsRegion.getName());
    AmazonSQSClient client =  (AmazonSQSClient) AmazonSQSClientBuilder.standard()
        .withCredentials(configuration.getSqsConfiguration().getCredentialsProvider())
        .withEndpointConfiguration(endpoint)
        .build();

在这里,http://localhost:4576/localstacks运行SQS。不要错过后面的斜线。因为在camel路由中使用这与使用AWS资源是一样的。希望这能帮上忙!

 类似资料:
  • 在我的apache服务器上,我希望能够将所有传入的http请求重定向到等效的https请求。问题是,我希望能够在不指定的情况下为我的默认虚拟主机执行此操作,并使用请求url中出现的任何服务器名称进行重定向。我希望得到这样的东西: 这是可以使用还是我必须求助于?

  • 我正在尝试从我的Spring启动应用程序中公开自定义指标。我正在使用千分尺和普罗米修斯注册表来做到这一点。我已经设置了普罗米修斯注册和配置根据 - 千分尺样本 - Github,但它创建了一个HTTP服务器来公开普罗米修斯指标。我需要将所有指标重定向或公开到Spring boot的默认上下文路径 - ,而不是新端口上的新上下文路径。到目前为止,我已经实现了以下代码 - PrometheusRegi

  • 我是微服务和Spring Boot的新手。我有几个Spring Cloud微服务,它有一个运行在8080端口上的Zuul网关。 提前道谢!

  • 我已经设置了Spring Boot Primefaces嵌入式Tomcat项目,到目前为止我很满意,特别是识别Spring Beans和服务(SpringBeanFacesELResolver)的facelet。现在我想配置应用程序,以便基本URL将转换为人脸基本URL。例如:要重定向到 http://localhost:8080/index.xhtml http://localhost:8080

  • 问题内容: 我正在创建一个基于标签的页面,其中显示了一些数据。我在AngularJs中使用UI-Router来注册状态。 我的目标是在页面加载时打开一个默认选项卡。每个选项卡都有子选项卡,并且我想在更改选项卡时打开默认的子选项卡。 我正在使用函数进行测试,并且正在使用内部,但是由于循环效应问题(在state.go上对其子状态调用其父状态,依此类推,然后变成循环),它似乎无法正常工作。 在这里,我创

  • 我知道这个问题已经被问过很多次了。然而,我似乎无法将其用于我的场景。 我想将所有 http 流量重定向到 https,并将 https 根重定向到登录页面。这是我在 vhost.conf 文件中的虚拟主机。 https根登录重定向工作正常。但是,我无法让超文本传输协议https重定向工作。我尝试了各种建议,如; 根据这里的各种帖子。但是其中一些不起作用,在一些建议中,有评论提到查询字符串不适用于变