Skip to content

Commit 1d66346

Browse files
committed
Amazon KMS + SES extensions
1 parent c1f12be commit 1d66346

File tree

35 files changed

+1369
-4
lines changed

35 files changed

+1369
-4
lines changed

.github/workflows/ci-actions.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,13 +165,15 @@ jobs:
165165
amazonServices:
166166
image: localstack/localstack:0.11.1
167167
env:
168-
SERVICES: s3,dynamodb,sns,sqs
168+
SERVICES: s3,dynamodb,sns,sqs,kms,ses
169169
START_WEB: 0
170170
ports:
171171
- 127.0.0.1:8000:4569
172172
- 127.0.0.1:8008:4572
173173
- 127.0.0.1:8009:4575
174174
- 127.0.0.1:8010:4576
175+
- 127.0.0.1:8011:4599
176+
- 127.0.0.1:8012:4566
175177

176178
steps:
177179
- name: Start mysql
@@ -486,7 +488,7 @@ jobs:
486488
if: matrix.mssql
487489
- name: Amazon Services
488490
run: |
489-
docker run --rm --publish 8000:4569 --publish 8008:4572 --publish 8009:4575 --publish 8010:4576 --name build-amazon-service-clients -e SERVICES=s3,dynamodb,sns,sqs -e START_WEB=0 \
491+
docker run --rm --publish 8000:4569 --publish 8008:4572 --publish 8009:4575 --publish 8010:4576 --publish 8011:4599 --publish 8012:4566 --name build-amazon-service-clients -e SERVICES=s3,dynamodb,sns,sqs,kms,ses -e START_WEB=0 \
490492
-d localstack/localstack:0.11.1
491493
if: matrix.amazonServices
492494
- name: Neo4j Service

bom/deployment/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,16 @@
593593
<artifactId>quarkus-amazon-sqs-deployment</artifactId>
594594
<version>${project.version}</version>
595595
</dependency>
596+
<dependency>
597+
<groupId>io.quarkus</groupId>
598+
<artifactId>quarkus-amazon-ses-deployment</artifactId>
599+
<version>${project.version}</version>
600+
</dependency>
601+
<dependency>
602+
<groupId>io.quarkus</groupId>
603+
<artifactId>quarkus-amazon-kms-deployment</artifactId>
604+
<version>${project.version}</version>
605+
</dependency>
596606
<dependency>
597607
<groupId>io.quarkus</groupId>
598608
<artifactId>quarkus-amazon-lambda-http-deployment</artifactId>

bom/runtime/pom.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,16 @@
852852
<artifactId>quarkus-amazon-sqs</artifactId>
853853
<version>${project.version}</version>
854854
</dependency>
855+
<dependency>
856+
<groupId>io.quarkus</groupId>
857+
<artifactId>quarkus-amazon-ses</artifactId>
858+
<version>${project.version}</version>
859+
</dependency>
860+
<dependency>
861+
<groupId>io.quarkus</groupId>
862+
<artifactId>quarkus-amazon-kms</artifactId>
863+
<version>${project.version}</version>
864+
</dependency>
855865
<dependency>
856866
<groupId>io.quarkus</groupId>
857867
<artifactId>quarkus-amazon-alexa</artifactId>
@@ -2973,6 +2983,16 @@
29732983
<artifactId>sqs</artifactId>
29742984
<version>${awssdk.version}</version>
29752985
</dependency>
2986+
<dependency>
2987+
<groupId>software.amazon.awssdk</groupId>
2988+
<artifactId>ses</artifactId>
2989+
<version>${awssdk.version}</version>
2990+
</dependency>
2991+
<dependency>
2992+
<groupId>software.amazon.awssdk</groupId>
2993+
<artifactId>kms</artifactId>
2994+
<version>${awssdk.version}</version>
2995+
</dependency>
29762996
<dependency>
29772997
<groupId>software.amazon.awssdk</groupId>
29782998
<artifactId>netty-nio-client</artifactId>

core/deployment/src/main/java/io/quarkus/deployment/builditem/FeatureBuildItem.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public final class FeatureBuildItem extends MultiBuildItem {
1515
public static final String AMAZON_S3 = "amazon-s3";
1616
public static final String AMAZON_SNS = "amazon-sns";
1717
public static final String AMAZON_SQS = "amazon-sqs";
18+
public static final String AMAZON_SES = "amazon-ses";
19+
public static final String AMAZON_KMS = "amazon-kms";
1820
public static final String ARTEMIS_CORE = "artemis-core";
1921
public static final String ARTEMIS_JMS = "artemis-jms";
2022
public static final String CACHE = "cache";
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>io.quarkus</groupId>
9+
<artifactId>quarkus-amazon-kms-parent</artifactId>
10+
<version>999-SNAPSHOT</version>
11+
</parent>
12+
13+
<artifactId>quarkus-amazon-kms-deployment</artifactId>
14+
<name>Quarkus - Amazon Services - KMS - Deployment</name>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>io.quarkus</groupId>
19+
<artifactId>quarkus-core-deployment</artifactId>
20+
</dependency>
21+
<dependency>
22+
<groupId>io.quarkus</groupId>
23+
<artifactId>quarkus-arc-deployment</artifactId>
24+
</dependency>
25+
<dependency>
26+
<groupId>io.quarkus</groupId>
27+
<artifactId>quarkus-netty-deployment</artifactId>
28+
</dependency>
29+
<dependency>
30+
<groupId>io.quarkus</groupId>
31+
<artifactId>quarkus-amazon-common-deployment</artifactId>
32+
</dependency>
33+
<dependency>
34+
<groupId>io.quarkus</groupId>
35+
<artifactId>quarkus-amazon-kms</artifactId>
36+
</dependency>
37+
38+
<!-- Test dependencies -->
39+
<dependency>
40+
<groupId>io.quarkus</groupId>
41+
<artifactId>quarkus-junit5-internal</artifactId>
42+
<scope>test</scope>
43+
</dependency>
44+
<dependency>
45+
<groupId>io.rest-assured</groupId>
46+
<artifactId>rest-assured</artifactId>
47+
<scope>test</scope>
48+
</dependency>
49+
<dependency>
50+
<groupId>software.amazon.awssdk</groupId>
51+
<artifactId>netty-nio-client</artifactId>
52+
<scope>test</scope>
53+
</dependency>
54+
<dependency>
55+
<groupId>software.amazon.awssdk</groupId>
56+
<artifactId>url-connection-client</artifactId>
57+
<scope>test</scope>
58+
</dependency>
59+
</dependencies>
60+
61+
<build>
62+
<plugins>
63+
<plugin>
64+
<artifactId>maven-compiler-plugin</artifactId>
65+
<configuration>
66+
<annotationProcessorPaths>
67+
<path>
68+
<groupId>io.quarkus</groupId>
69+
<artifactId>quarkus-extension-processor</artifactId>
70+
<version>${project.version}</version>
71+
</path>
72+
</annotationProcessorPaths>
73+
</configuration>
74+
</plugin>
75+
</plugins>
76+
</build>
77+
</project>
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package io.quarkus.amazon.kms.deployment;
2+
3+
import java.util.List;
4+
5+
import org.jboss.jandex.DotName;
6+
7+
import io.quarkus.amazon.common.deployment.AbstractAmazonServiceProcessor;
8+
import io.quarkus.amazon.common.deployment.AmazonClientBuildItem;
9+
import io.quarkus.amazon.common.deployment.AmazonClientBuilderBuildItem;
10+
import io.quarkus.amazon.common.deployment.AmazonClientBuilderConfiguredBuildItem;
11+
import io.quarkus.amazon.common.deployment.AmazonClientInterceptorsPathBuildItem;
12+
import io.quarkus.amazon.common.deployment.AmazonClientTransportsBuildItem;
13+
import io.quarkus.amazon.common.runtime.AmazonClientRecorder;
14+
import io.quarkus.amazon.common.runtime.AmazonClientTransportRecorder;
15+
import io.quarkus.amazon.kms.runtime.KmsBuildTimeConfig;
16+
import io.quarkus.amazon.kms.runtime.KmsClientProducer;
17+
import io.quarkus.amazon.kms.runtime.KmsConfig;
18+
import io.quarkus.amazon.kms.runtime.KmsRecorder;
19+
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
20+
import io.quarkus.arc.deployment.BeanContainerBuildItem;
21+
import io.quarkus.arc.deployment.BeanRegistrationPhaseBuildItem;
22+
import io.quarkus.deployment.annotations.BuildProducer;
23+
import io.quarkus.deployment.annotations.BuildStep;
24+
import io.quarkus.deployment.annotations.ExecutionTime;
25+
import io.quarkus.deployment.annotations.Record;
26+
import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
27+
import io.quarkus.deployment.builditem.FeatureBuildItem;
28+
import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
29+
import software.amazon.awssdk.services.kms.KmsAsyncClient;
30+
import software.amazon.awssdk.services.kms.KmsClient;
31+
32+
public class KmsProcessor extends AbstractAmazonServiceProcessor {
33+
34+
KmsBuildTimeConfig buildTimeConfig;
35+
36+
@Override
37+
protected String amazonServiceClientName() {
38+
return FeatureBuildItem.AMAZON_KMS;
39+
}
40+
41+
@Override
42+
protected String configName() {
43+
return "kms";
44+
}
45+
46+
@Override
47+
protected DotName syncClientName() {
48+
return DotName.createSimple(KmsClient.class.getName());
49+
}
50+
51+
@Override
52+
protected DotName asyncClientName() {
53+
return DotName.createSimple(KmsAsyncClient.class.getName());
54+
}
55+
56+
@Override
57+
protected String builtinInterceptorsPath() {
58+
return "software/amazon/awssdk/services/kms/execution.interceptors";
59+
}
60+
61+
@BuildStep
62+
AdditionalBeanBuildItem producer() {
63+
return AdditionalBeanBuildItem.unremovableOf(KmsClientProducer.class);
64+
}
65+
66+
@BuildStep
67+
void setup(BeanRegistrationPhaseBuildItem beanRegistrationPhase,
68+
BuildProducer<ExtensionSslNativeSupportBuildItem> extensionSslNativeSupport,
69+
BuildProducer<FeatureBuildItem> feature,
70+
BuildProducer<AmazonClientInterceptorsPathBuildItem> interceptors,
71+
BuildProducer<AmazonClientBuildItem> clientProducer) {
72+
73+
setupExtension(beanRegistrationPhase, extensionSslNativeSupport, feature, interceptors, clientProducer,
74+
buildTimeConfig.sdk, buildTimeConfig.syncClient);
75+
}
76+
77+
@BuildStep
78+
@Record(ExecutionTime.RUNTIME_INIT)
79+
void setupTransport(List<AmazonClientBuildItem> amazonClients, KmsRecorder recorder,
80+
AmazonClientTransportRecorder transportRecorder,
81+
KmsConfig runtimeConfig, BuildProducer<AmazonClientTransportsBuildItem> clientTransportBuildProducer) {
82+
83+
createTransportBuilders(amazonClients,
84+
transportRecorder,
85+
buildTimeConfig.syncClient,
86+
recorder.getSyncConfig(runtimeConfig),
87+
recorder.getAsyncConfig(runtimeConfig),
88+
clientTransportBuildProducer);
89+
}
90+
91+
@BuildStep
92+
@Record(ExecutionTime.RUNTIME_INIT)
93+
void createClientBuilders(List<AmazonClientTransportsBuildItem> transportBuildItems, KmsRecorder recorder,
94+
KmsConfig runtimeConfig, BuildProducer<AmazonClientBuilderBuildItem> builderProducer) {
95+
96+
createClientBuilders(transportBuildItems, builderProducer,
97+
(syncTransport) -> recorder.createSyncBuilder(runtimeConfig, syncTransport),
98+
(asyncTransport) -> recorder.createAsyncBuilder(runtimeConfig, asyncTransport));
99+
}
100+
101+
@BuildStep
102+
@Record(ExecutionTime.RUNTIME_INIT)
103+
void configureClient(List<AmazonClientBuilderBuildItem> clients, KmsRecorder recorder,
104+
AmazonClientRecorder commonRecorder,
105+
KmsConfig runtimeConfig,
106+
BuildProducer<AmazonClientBuilderConfiguredBuildItem> producer) {
107+
108+
initClientBuilders(clients, commonRecorder, recorder.getAwsConfig(runtimeConfig), recorder.getSdkConfig(runtimeConfig),
109+
buildTimeConfig.sdk, producer);
110+
}
111+
112+
@BuildStep
113+
@Record(ExecutionTime.RUNTIME_INIT)
114+
void buildClients(List<AmazonClientBuilderConfiguredBuildItem> configuredClients, KmsRecorder recorder,
115+
BeanContainerBuildItem beanContainer,
116+
ShutdownContextBuildItem shutdown) {
117+
118+
buildClients(configuredClients,
119+
(syncBuilder) -> recorder.buildClient(syncBuilder, beanContainer.getValue(), shutdown),
120+
(asyncBuilder) -> recorder.buildAsyncClient(asyncBuilder, beanContainer.getValue(), shutdown));
121+
}
122+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.quarkus.amazon.kms.deployment;
2+
3+
import javax.inject.Inject;
4+
5+
import org.jboss.shrinkwrap.api.ShrinkWrap;
6+
import org.jboss.shrinkwrap.api.spec.JavaArchive;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.extension.RegisterExtension;
9+
10+
import io.quarkus.test.QuarkusUnitTest;
11+
import software.amazon.awssdk.services.kms.KmsAsyncClient;
12+
import software.amazon.awssdk.services.kms.KmsClient;
13+
14+
public class KmsSyncClientFullConfigTest {
15+
16+
@Inject
17+
KmsClient client;
18+
19+
@Inject
20+
KmsAsyncClient async;
21+
22+
@RegisterExtension
23+
static final QuarkusUnitTest config = new QuarkusUnitTest()
24+
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
25+
.addAsResource("sync-urlconn-full-config.properties", "application.properties"));
26+
27+
@Test
28+
public void test() {
29+
// should finish with success
30+
}
31+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
quarkus.kms.endpoint-override=http://localhost:9090
2+
3+
quarkus.kms.aws.region=us-east-1
4+
quarkus.kms.aws.credentials.type=static
5+
quarkus.kms.aws.credentials.static-provider.access-key-id=test-key
6+
quarkus.kms.aws.credentials.static-provider.secret-access-key=test-secret
7+
8+
quarkus.kms.sync-client.type = url
9+
quarkus.kms.sync-client.connection-timeout = 0.100S
10+
quarkus.kms.sync-client.socket-timeout = 0.100S
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<parent>
8+
<groupId>io.quarkus</groupId>
9+
<artifactId>quarkus-amazon-services-parent</artifactId>
10+
<version>999-SNAPSHOT</version>
11+
</parent>
12+
13+
<artifactId>quarkus-amazon-kms-parent</artifactId>
14+
<name>Quarkus - Amazon Services - KMS</name>
15+
<packaging>pom</packaging>
16+
17+
<modules>
18+
<module>runtime</module>
19+
<module>deployment</module>
20+
</modules>
21+
22+
</project>

0 commit comments

Comments
 (0)