繁体   English   中英

使用 AWS Java SDK 执行 PutItem 时出现“配置文件不包含配置文件的凭据”错误

[英]'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 个选择:

  1. 创建客户端时不指定凭据提供者——SDK 将回退到默认的凭据提供者,然后找到 ECS 容器凭据; 这是最常见的选项,并且很可能适用于各种环境(因为链会在多个地方按顺序显示)

  2. 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.

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