如何配置 AWS DynamoDB Camel 组件
How to configure AWS DynamoDB Camel component
我正在尝试 POC 通过 Apache Camel 应用程序访问 DynamoDB。显然,Dynamo DB 将 运行 在 AWS 中,但出于开发目的,我们将其 运行 在本地作为 docker 容器。
在本地创建 Dynamo BD table 并手动将一些项目放入其中非常容易。我为此使用了我的 intelij Dynamo DB 控制台,我所需要提供的只是一个自定义端点 http://localhost:8000
和默认凭证提供程序链。
现在,我想在一天中的某些特定时间触发一个作业,该作业将扫描 Dynamo DB 项目并对返回的数据执行一些操作。
from("cron:myCron?schedule=0 */5 * * * *")
.log("Running myCron scheduler")
.setHeader(Ddb2Constants.OPERATION, () -> Ddb2Operations.Scan)
.to("aws2-ddb:myTable")
.log("Performing some work on items");
当我尝试 运行 我的应用程序时,它无法开始抱怨安全令牌已过期,这让我认为它正在尝试访问 AWS 而不是访问本地。我找不到任何关于如何设置它的信息。 camel dynamo db 组件 (https://camel.apache.org/components/3.15.x/aws2-ddb-component.html) 正在谈论能够使用 DynamoDbClient
配置组件,但这是一个接口,其名为 DefaultDynamoDbClient
的实现不是 public 并且DefaultDynamoDbClientBuilder
.
也是
假设您使用 Spring 作为 Camel 运行时启动,在您的情况下,最简单的方法是配置 Camel 使用的 DynamoDbClient
,这要归功于 application.properties
中设置的选项,如下所示:
# The value of the access key used by the component aws2-ddb
camel.component.aws2-ddb.accessKey=test
# The value of the secret key used by the component aws2-ddb
camel.component.aws2-ddb.secretKey=test
# The value of the region used by the component aws2-ddb
camel.component.aws2-ddb.region=us-east-1
# Indicates that the component aws2-ddb should use the new URI endpoint
camel.component.aws2-ddb.override-endpoint=true
# The value of the URI endpoint used by the component aws2-ddb
camel.component.aws2-ddb.uri-endpoint-override=http://localhost:8000
有关更多详细信息,请参阅这些选项的文档:
- camel.component.aws2-ddb.accessKey
- camel.component.aws2-ddb.secretKey
- camel.component.aws2-ddb.region
- camel.component.aws2-ddb.override-endpoint
- camel.component.aws2-ddb.uri-endpoint-override
对于其他运行时,可以通过编程方式配置如下:
Ddb2Component ddb2Component = new Ddb2Component(context);
String accessKey = "test";
String secretKey = "test";
String region = "us-east-1";
String endpoint = "http://localhost:8000";
ddb2Component.getConfiguration().setAmazonDDBClient(
DynamoDbClient.builder()
.endpointOverride(URI.create(endpoint))
.credentialsProvider(
StaticCredentialsProvider.create(
AwsBasicCredentials.create(accessKey, secretKey)
)
)
.region(Region.of(region))
.build()
);
我正在尝试 POC 通过 Apache Camel 应用程序访问 DynamoDB。显然,Dynamo DB 将 运行 在 AWS 中,但出于开发目的,我们将其 运行 在本地作为 docker 容器。
在本地创建 Dynamo BD table 并手动将一些项目放入其中非常容易。我为此使用了我的 intelij Dynamo DB 控制台,我所需要提供的只是一个自定义端点 http://localhost:8000
和默认凭证提供程序链。
现在,我想在一天中的某些特定时间触发一个作业,该作业将扫描 Dynamo DB 项目并对返回的数据执行一些操作。
from("cron:myCron?schedule=0 */5 * * * *")
.log("Running myCron scheduler")
.setHeader(Ddb2Constants.OPERATION, () -> Ddb2Operations.Scan)
.to("aws2-ddb:myTable")
.log("Performing some work on items");
当我尝试 运行 我的应用程序时,它无法开始抱怨安全令牌已过期,这让我认为它正在尝试访问 AWS 而不是访问本地。我找不到任何关于如何设置它的信息。 camel dynamo db 组件 (https://camel.apache.org/components/3.15.x/aws2-ddb-component.html) 正在谈论能够使用 DynamoDbClient
配置组件,但这是一个接口,其名为 DefaultDynamoDbClient
的实现不是 public 并且DefaultDynamoDbClientBuilder
.
假设您使用 Spring 作为 Camel 运行时启动,在您的情况下,最简单的方法是配置 Camel 使用的 DynamoDbClient
,这要归功于 application.properties
中设置的选项,如下所示:
# The value of the access key used by the component aws2-ddb
camel.component.aws2-ddb.accessKey=test
# The value of the secret key used by the component aws2-ddb
camel.component.aws2-ddb.secretKey=test
# The value of the region used by the component aws2-ddb
camel.component.aws2-ddb.region=us-east-1
# Indicates that the component aws2-ddb should use the new URI endpoint
camel.component.aws2-ddb.override-endpoint=true
# The value of the URI endpoint used by the component aws2-ddb
camel.component.aws2-ddb.uri-endpoint-override=http://localhost:8000
有关更多详细信息,请参阅这些选项的文档:
- camel.component.aws2-ddb.accessKey
- camel.component.aws2-ddb.secretKey
- camel.component.aws2-ddb.region
- camel.component.aws2-ddb.override-endpoint
- camel.component.aws2-ddb.uri-endpoint-override
对于其他运行时,可以通过编程方式配置如下:
Ddb2Component ddb2Component = new Ddb2Component(context);
String accessKey = "test";
String secretKey = "test";
String region = "us-east-1";
String endpoint = "http://localhost:8000";
ddb2Component.getConfiguration().setAmazonDDBClient(
DynamoDbClient.builder()
.endpointOverride(URI.create(endpoint))
.credentialsProvider(
StaticCredentialsProvider.create(
AwsBasicCredentials.create(accessKey, secretKey)
)
)
.region(Region.of(region))
.build()
);