1

我在 AWS qLdB 中有一个基于分类帐的数据库“演示”。所以我想通过 Spring Boot Web 应用程序连接到该数据库。

首先,我给了用户对 QLDB 的权限,比如

在此处输入图像描述

然后我在 pom.xml 中添加了以下 maven 依赖项。

<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-qldb -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-qldb</artifactId>
            <version>1.12.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/software.amazon.ion/ion-java -->
        <dependency>
            <groupId>software.amazon.ion</groupId>
            <artifactId>ion-java</artifactId>
            <version>1.5.1</version>
        </dependency>

        <dependency>
            <groupId>software.amazon.qldb</groupId>
            <artifactId>amazon-qldb-driver-java</artifactId>
            <version>2.3.1</version>
        </dependency>

在 Application.yml 我保留了这些属性。

cloud:
  aws:
    credentials:
      access-key: 
      secret-key: 
    region: US East (Ohio)

然后我创建一个配置类来连接到 QLDB 之类的。

@Configuration
public class QldbConfigs {
    public static IonSystem ionSys = IonSystemBuilder.standard().build();
    public static QldbDriver qldbDriver;

    @Bean
    public void setupDb(){
        System.out.println("Initializing the driver");
        qldbDriver = QldbDriver.builder()
                .ledger("demo")
                .transactionRetryPolicy(RetryPolicy
                        .builder()
                        .maxRetries(3)
                        .build())
                .sessionClientBuilder(QldbSessionClient.builder())
                .build();
    }
}

如果我运行它,它会给出一个例外,例如

software.amazon.awssdk.core.exception.SdkClientException:无法从链中的任何提供商加载区域 software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain@6076c66:[software.amazon.awssdk.regions.providers.SystemSettingsRegionProvider @57b1ec84:无法从系统设置中加载区域。必须通过环境变量 (AWS_REGION) 或系统属性 (aws.region) 指定区域。software.amazon.awssdk.regions.providers.AwsProfileRegionProvider@5a82bc58:配置文件中未提供区域:默认值,software.amazon.awssdk.regions .providers.InstanceProfileRegionProvider@5d37aa0f:无法联系 EC2 元数据服务。]

我该如何解决这个问题?

4

1 回答 1

1

AWS 开发工具包将在一组预定义的位置查找一些凭证,以便在连接时提供给服务。根据Spring Boot 文档

启用 Spring Boot 属性 cloud.aws.region.auto 后,Spring Cloud for AWS 可以根据您的环境或堆栈自动检测到这一点。

您还可以为您的应用程序以静态方式设置区域:

cloud:
 aws:
   region:
     static: eu-central-1
     auto: false

这与您在示例中配置区域的方式不同。为了完全确定,您可以直接在QldbSessionClient.builder下面设置区域。

qldbDriver = QldbDriver.builder()
  .ledger("demo")
  .transactionRetryPolicy(RetryPolicy
    .builder()
    .maxRetries(3)
    .build())
  .sessionClientBuilder(
    QldbSessionClient.builder().region(Region.of("us-east-1")))
  .build();
于 2021-06-21T21:55:34.347 回答