spring-cloud-stream - 在启用 KPL/KCL 的情况下启动 Spring Boot 微服务时出错
问题描述
我正在本地启动我的 Spring Boot 微服务,并运行 Localstack。当我开始它时spring.cloud.stream.kinesis.binder.kpl-kcl-enabled=false
,它开始就好了。将此值设置为true
会导致以下堆栈跟踪:
Unable to load credentials from com.amazonaws.auth.profile.ProfileCredentialsProvider@58faba32: Unable to load credentials into profile [default]: AWS Access Key ID is not specified.
c.a.s.kinesis.producer.KinesisProducer : Error in child process
java.lang.RuntimeException: Error running child process
at com.amazonaws.services.kinesis.producer.Daemon.fatalError(Daemon.java:533)
at com.amazonaws.services.kinesis.producer.Daemon.fatalError(Daemon.java:513)
at com.amazonaws.services.kinesis.producer.Daemon.access$200(Daemon.java:63)
at com.amazonaws.services.kinesis.producer.Daemon$1.run(Daemon.java:135)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.amazonaws.SdkClientException: Unable to load AWS credentials from any provider in the chain: [com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@71435b85: Unable to load credentials from service endpoint, com.amazonaws.auth.profile.ProfileCredentialsProvider@58faba32: Unable to load credentials into profile [default]: AWS Access Key ID is not specified.]
at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:136)
at com.amazonaws.services.kinesis.producer.Daemon.makeSetCredentialsMessage(Daemon.java:565)
at com.amazonaws.services.kinesis.producer.Daemon.startChildProcess(Daemon.java:436)
at com.amazonaws.services.kinesis.producer.Daemon.access$100(Daemon.java:63)
at com.amazonaws.services.kinesis.producer.Daemon$1.run(Daemon.java:133)
在Kinesis Cloud Stream Kinesis Binder 2.0.0 版本的发布公告中,它指出“这两个版本的主题是关于使用本地堆栈框架的集成测试,它帮助我们发现了一些错误和竞争条件两个图书馆。”
我将环境变量AWS_ACCESS_KEY_ID
与AWS_SECRET_ACCESS_KEY
我的 Docker 堆栈使用的其他环境变量一起设置为环境变量,所以我很困惑为什么会收到此错误。
是否需要指定任何其他配置,以便我可以启用 KPL/KCL 并使用 LocalStack 在本地运行和测试它?
解决方案
当涉及 KPL 时,我的本地堆栈 JUnit 配置如下:
@LocalstackDockerProperties(environmentVariableProvider = LocalStackSslEnvironmentProvider.class,
services = { "kinesis", "dynamodb", "cloudwatch" })
哪里LocalStackSslEnvironmentProvider
有这样的实现:
/**
* An {@link IEnvironmentVariableProvider} implementation to provide a {@code USE_SSL}
* environment variable for docker to start a Local Stack in TLS mode.
* Also this class populates a {@value SDKGlobalConfiguration#DISABLE_CERT_CHECKING_SYSTEM_PROPERTY}
* system property to disable SSL certificates validation.
*
* @author Artem Bilan
*
* @since 2.3
*/
public class LocalStackSslEnvironmentProvider implements IEnvironmentVariableProvider {
static {
System.setProperty(SDKGlobalConfiguration.DISABLE_CERT_CHECKING_SYSTEM_PROPERTY, "true");
}
@Override
public Map<String, String> getEnvironmentVariables() {
return Collections.singletonMap("USE_SSL", "true");
}
}
希望这对你也有帮助。
推荐阅读
- javascript - 如何根据所选下拉列表的值隐藏和显示 div -JQuery 和 Javascript
- highcharts - highcharts中的数据标签
- angularjs - 错误 TS1128:.map() 运算符需要声明或语句
- javascript - 如何配置 TypeScript 以针对不正确的导入语句引发错误/警告?
- javascript - How to fill in missing months in an array using javascript
- java - 如何在清单中链接外部 Spring Boot JAR (NoClassDefFoundError)
- spring - 在运行时更改 thymeleaf 角色
- node.js - 获取托管 FireBase 功能或 Google APP Engine 的固定 IP
- vba - 在 Mac 中替换为 ChrW() - 在 Windows 上正常工作
- java - Goodle Slides:将现有演示文稿的所有幻灯片复制到新幻灯片