使用 AWS Java 开发工具包执行 PutItem 时出现'Profile file contained no credentials for profile'错误



我正在尝试使用AWS SDK for Java将一个项目放入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: Profile file不包含Profile 'default'的凭据:ProfileFile(profilesAndSectionsMap=[]).

错误说明SDK正在默认凭证配置文件&

这是因为示例代码显式地指定了ProfileCredentialsProvider作为DynamoDbClient的凭据提供者。

这将覆盖默认的凭据提供程序链,默认情况下,该链将在各种位置查找凭据——包括ECS容器凭据。

您需要删除ProfileCredentialsProvider的使用。


你有两个选择:

  1. 在创建客户端时不指定凭据提供者- SDK将回退到默认的凭据提供者,然后找到ECS容器凭据;这是最常见的选项,并且最有可能在各种环境中工作(因为链将在多个位置依次查找)

  2. ContainerCredentialsProvider代替ProfileCredentialsProvider的使用,这只会专门寻找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();

相关内容

  • 没有找到相关文章

最新更新