![](/img/trans.png)
[英]S3 S3EncryptionClient AWS SDK for PHP: Error retrieving credentials from the instance profile metadata server
[英]'Profile file contained no credentials for profile' error when doing PutItem using AWS Java SDK
我正在尝试使用适用于 Java 的 AWS 开发工具包将项目放入 DynamoDB 表中。
我正在使用文档中的EnhancedPutItem.java
示例:
public static void main(String[] args) {
ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create();
Region region = Region.US_EAST_1;
DynamoDbClient ddb = DynamoDbClient.builder()
.credentialsProvider(credentialsProvider)
.region(region)
.build();
DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder()
.dynamoDbClient(ddb)
.build();
putRecord(enhancedClient) ;
ddb.close();
}
...
在本地运行时,我可以成功放置该项目,但是当我在 Fargate 上将我的应用程序作为任务运行时,它会抛出此错误:
software.amazon.awssdk.core.exception.SdkClientException:配置文件不包含配置文件“默认”的凭据:ProfileFile(profilesAndSectionsMap=[])。
该错误指出 SDK 正在默认凭据配置文件中查找凭据,但找不到任何凭据。
这是因为示例代码明确指定ProfileCredentialsProvider
作为DynamoDbClient
的凭据提供程序。
这会覆盖默认的凭据提供程序链,默认情况下它会在各种位置查找凭据 - 包括 ECS 容器凭据。
您需要删除对ProfileCredentialsProvider
的使用。
您有 2 个选择:
创建客户端时不指定凭据提供者——SDK 将回退到默认的凭据提供者,然后找到 ECS 容器凭据; 这是最常见的选项,并且很可能适用于各种环境(因为链会在多个地方按顺序显示)
将ProfileCredentialsProvider
的使用替换为ContainerCredentialsProvider
,它只会专门查找 ECS 容器凭证
建议使用选项 1,因为它是最常见的配置,而且您的代码最有可能在各种环境中工作(因为链会按顺序查找多个凭证提供程序)。
要实施选项 1,请更改:
ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create();
Region region = Region.US_EAST_1;
DynamoDbClient ddb = DynamoDbClient.builder()
.credentialsProvider(credentialsProvider)
.region(region)
.build();
到:
Region region = Region.US_EAST_1;
DynamoDbClient ddb = DynamoDbClient.builder()
.region(region)
.build();
选项 2 如下所示:
private AwsCredentialsProvider awsCredentialsProvider = ContainerCredentialsProvider.builder().build();
private final DynamoDbClient ddb = DynamoDbClient.builder()
.credentialsProvider(awsCredentialsProvider)
.region(Region.of(REGION))
.build();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.