raz*_*van 0 java amazon-web-services amazon-dynamodb aws-fargate
我正在尝试使用适用于 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();
}
...
Run Code Online (Sandbox Code Playgroud)
在本地运行时,我可以成功放置该项目,但是当我在 Fargate 上将应用程序作为任务运行时,它会抛出以下错误:
software.amazon.awssdk.core.exception.SdkClientException:配置文件不包含配置文件“默认”的凭据:ProfileFile(profilesAndSectionsMap=[])。
该错误表明 SDK 正在默认凭据配置文件中查找凭据,但找不到任何凭据。
这是因为示例代码明确指定 aProfileCredentialsProvider作为DynamoDbClient.
这会覆盖默认的凭证提供程序链,默认情况下,它会在各个位置查找凭证 - 包括 ECS 容器凭证。
您需要删除对ProfileCredentialsProvider.
您有 2 个选择:
创建客户端时不指定凭证提供程序 - SDK 将回退到默认凭证提供程序,然后查找 ECS 容器凭证;这是最常见的选项,并且很可能适用于各种环境(因为链会在多个位置按顺序查看)
将使用替换为ProfileCredentialsProviderwith ContainerCredentialsProvider,这只会专门查找 ECS 容器凭证
建议使用选项 1,因为它是最常见的配置,并且您的代码在各种环境中工作的机会最高(因为该链将按顺序查找多个凭证提供程序)。
要实施选项 1,请更改:
ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create();
Region region = Region.US_EAST_1;
DynamoDbClient ddb = DynamoDbClient.builder()
.credentialsProvider(credentialsProvider)
.region(region)
.build();
Run Code Online (Sandbox Code Playgroud)
到:
Region region = Region.US_EAST_1;
DynamoDbClient ddb = DynamoDbClient.builder()
.region(region)
.build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8614 次 |
| 最近记录: |