繁体   English   中英

AWS SDK 1.11.844 在连接到 Kinesis Stream 时不断抛出错误

[英]AWS SDK 1.11.844 is throwing Continuously ERROR while connecting to 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) ~[?:?]

我在本地遇到了这个问题。 关闭ContextInstanceDataAutoConfiguration是最好的解决方案。 只需添加

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

到您的 application.yml 文件。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM