无法从 IOT Core 设备[容器内部]连接到 AWS 服务[API Gateway]。
0
【以下的问题经过翻译处理】 我使用 GreengrassV2 创建了一个组件,并在该组件内运行了多个容器。 现在,我的要求是调用 API 网关并将一些数据提取到组件内本地设备上运行的 docker 容器之一中。 我正在使用“导入 com.amazonaws.auth.DefaultAWSCredentialsProviderChain;”用于获取凭据但获取
05:45:06.476 信息 - 使用请求参数调用 API 网关 com.amazon.spiderIoT.stowWorkcell.entities.ApiGatewayRequest@e958e637
线程“main”中的异常 com.amazonaws.SdkClientException:无法从链中的任何提供商加载 AWS 凭证:[EnvironmentVariableCredentialsProvider:无法从环境变量(AWS_ACCESS_KEY_ID(或 AWS_ACCESS_KEY)和 AWS_SECRET_KEY(或 AWS_SECRET_ACCESS_KEY)),SystemPropertiesCredentialsProvider :无法从 Java 系统属性(aws.accessKeyId 和 aws.secretKey)加载 AWS 凭证,WebIdentityTokenCredentialsProvider:要使用角色配置文件,aws-java-sdk-sts 模块必须位于类路径上。com.amazonaws.auth。 profile.ProfileCredentialsProvider@7c36db44:配置文件不能为空,com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@6c008c24:无法连接到服务端点:]
在 com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:136)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1269)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:845)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:794)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:781)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:755)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:715)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:697)
在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:561)
在 com.amazon.spiderIoT.stowWorkcell.client.ApiGatewayClient.execute(ApiGatewayClient.java:134)
在 com.amazon.spiderIoT.stowWorkcell.client.ApiGatewayClient.execute(ApiGatewayClient.java:79)
在 com.amazon.spiderIoT.stowWorkcell.StowWorkcellService.startMQTTSubscriberForSortLocationEvents(StowWorkcellService.java:120)
在 com.amazon.spiderIoT.stowWorkcell.StowWorkcellService.onInitialize(StowWorkcellService.java:65)
在 com.amazon.spideriot.sdk.service.Service.run(Service.java:79)
在 com.amazon.spiderIoT.stowWorkcell.StowWorkcellServiceDriver.main(StowWorkcellServiceDriver.java:26)
我的 dependencyConfiguration 看起来像:-
{
“aws.greengrass.TokenExchangeService”:{
"组件版本": "2.0.3",
“依赖类型”:“硬”
},
“aws.greengrass.DockerApplicationManager”:{
“组件版本”:“2.0.4”
},
“aws.greengrass.Cloudwatch”:{
“组件版本”:“3.0.0”
},
“aws.greengrass.Nucleus”:{
"组件版本": "2.4.0",
“配置更新”:{
“合并”:“{\”日志记录\“:{\”级别\“:\”信息\“},\”iotRoleAlias\“:\”GreengrassV2TestCoreTokenExchangeRoleAlias\“}”
}
},
“aws.greengrass.LogManager”:{
"组件版本": "2.2.3",
“配置更新”:{
“merge”:“{\”logsUploaderConfiguration\“:{\”systemLogsConfiguration\“:{\”uploadToCloudWatch\“:\”true\“,\”minimumLogLevel\“:\”INFO\“,\”diskSpaceLimit\“: \"10\",\"diskSpaceLimitUnit\": \"MB\",\"deleteLogFileAfterCloudUpload\": \"false\"},\"componentLogsConfigurationMap\": {\"LedService\": {\"minimumLogLevel\" : \"INFO\",\"diskSpaceLimit\": \"20\",\"diskSpaceLimitUnit\": \"MB\",\"deleteLogFileAfterCloudUpload\": \"false\"}}},\"periodicUploadIntervalSec\ ": \"5\"}"
}
}
}
使用 AWS 凭证的 Java 代码
公共类 APIGatewayModule 扩展 AbstractModule {
@提供
@单例
公共 AWSCredentialsProvider getAWSCredentialProvider() {
返回新的 DefaultAWSCredentialsProviderChain();
}
@提供
@单例
公共 ApiGatewayClient getApiGatewayClient(最终 AWSCredentialsProvider awsCredentialsProvider){
System.out.println("获取客户端配置");
最终 com.amazonaws.ClientConfiguration clientConfiguration = new com.amazonaws.ClientConfiguration();
System.out.println("获取客户端配置" + clientConfiguration);
返回新的 ApiGatewayClient(clientConfiguration, Region.getRegion(Regions.fromName("us-east-1")), awsCredentialsProvider, AmazonHttpClient.builder().clientConfiguration(clientConfiguration).build());
}
}
我一直在关注这个文档:https://docs.aws.amazon.com/greengrass/v2/developerguide/device-service-role.html 我的问题是关于本文档中的任何地方,都提到了“AWS IoT Core 凭据提供程序”,我们应该使用什么凭据提供程序? 还,如本文档中所述,当“运行 AWS IoT Greengrass 核心软件时,您可以选择预置核心设备所需的 AWS 资源”时,我们应该使用 --provision true。但是我们开始时没有这个标志,如何解决这个问题,是否有任何其他文档提供使用凭证提供程序和从 AWS SDK Java 调用 API 网关的参考。
在 SSH 到 docker 上,我发现变量已设置
AWS_CONTAINER_CREDENTIALS_FULL_URI=http://localhost:38135/2016-11-01/credentialprovider/
但是无法从 docker 卷曲到这个 URL,这就是假设的工作方式吗?
Argomenti
Lingua
中文 (简体)
1 Risposta
- Più recenti
- Maggior numero di voti
- Maggior numero di commenti
Queste risposte sono utili? Dai un voto positivo alla risposta corretta per aiutare la community a trarre vantaggio dalle tue conoscenze.
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa