连接到Kinesis Stream

问题描述

我正在使用Spring Cloud Data Stream和Kinesis Spring Binder连接到Kinesis: https://github.com/spring-cloud/spring-cloud-stream-binder-aws-kinesis/blob/master/spring-cloud-stream-binder-kinesis-docs/src/main/asciidoc/overview.adoc 认情况下,它使用aws-sdk 1.11.415,并且在Kubernetes环境(AWS EKS)中进行部署时不能用作假定角色。我发现我需要将库升级到aws-sdk 1.11.844,以支持基于WebIdentityToken的凭据提供程序。这正在Kubernetes中工作。现在,从本地计算机上,我尝试通过启用实例配置文件(禁用基于WebIdentityToken的流)连接到Kinesis,它会继续抛出错误并无法连接。当我评论升级的库时,它会回到可以正常工作的aws-sdk 1.11.415。但是我需要针对基于WebIdentityToken的凭据提供程序进行升级

如果有人对此有任何解决方案,请帮助我。我无法更改为AWS开发工具包SDKV2,因为Spring Binder将不支持功能。任何其他解决方案都将有所帮助。

    com.amazonaws.SdkClientException: Failed to connect to service endpoint: 
    at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:100) ~[aws-java-sdk-core-1.11.844.jar:?]
    at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:70) ~[aws-java-sdk-core-1.11.844.jar:?]
    at com.amazonaws.internal.InstanceMetadataServiceResourceFetcher.readResource(InstanceMetadataServiceResourceFetcher.java:75) ~[aws-java-sdk-core-1.11.844.jar:?]
    at com.amazonaws.internal.EC2ResourceFetcher.readResource(EC2ResourceFetcher.java:66) ~[aws-java-sdk-core-1.11.844.jar:?]
    at com.amazonaws.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:402) ~[aws-java-sdk-core-1.11.844.jar:?]
    at com.amazonaws.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:371) ~[aws-java-sdk-core-1.11.844.jar:?]
    at org.springframework.cloud.aws.context.support.env.AwsCloudEnvironmentCheckUtils.isRunningOnCloudEnvironment(AwsCloudEnvironmentCheckUtils.java:38) ~[spring-cloud-aws-context-2.2.2.RELEASE.jar:2.2.2.RELEASE]
......
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.1.RELEASE.jar:2.3.1.RELEASE]
    at com.baxter.renal.app.s3.poc.CAPDTreatmentUploadApplication.main(CAPDTreatmentUploadApplication.java:22) [classes/:?]
Caused by: java.net.socketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.waitForConnect(Native Method) ~[?:?]
    at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107) ~[?:?]

解决方法

问题是您的本地计算机没有实例配置文件。

如果查看堆栈跟踪,则会看到EC2MetadataUtils.getItems()。这试图从instance metadata端点http://169.254.169.254读取。在快速返回的EC2实例上;在您的本地计算机上,它将超时,因为该IP地址不存在。

如果您想从本地计算机上使用AWS服务,则必须使用在本地检索信息的凭证提供程序。我建议使用DefaultAWSCredentialsProviderChain,它可以在$HOME/.aws中或通过环境变量或系统属性来查找本地配置,并且还支持实例配置文件(以防您在EC2实例上运行)。 / p>

,

我在本地遇到此问题。关闭ContextInstanceDataAutoConfiguration是最佳解决方案。只需添加

spring.autoconfigure.exclude: org.springframework.cloud.aws.autoconfigure.context.ContextInstanceDataAutoConfiguration

到您的application.yml文件。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...