Der Spring-Boot Starter ermöglicht den Zugriff auf S3 Bucket Credentials per Apache Camel Processor.
Er wird aktiviert, wenn im Spring-Boot Kontext eine Apachae Camel AWS2S3Component.class Bean gefunden wird.
Der Starter erwartet seine Konfiguration unter de.muenchen.mobidam.common.s3.bucket-credential-config. Bitte dazu den Bekannten Fehler s.u. beachten.
Die S3 Credentials (Benutzer, Password) müssen als Umgebungsvariable definiert sein, damit sie vom mobidam-eai-common-starter gefunden werden können.
Da für jeden S3 Bucket eigene Credentials gelten, werden diese im S3CredentialProvider über ihren Bucket-Namen ermittelt.
Dazu müssen die S3 Buckets unter ihrem 'Bucket-Namen' als Map (z.Bsp. tenant-default, test-bucket, etc.) mit ihren Credentials access-key-env-var und secret-key-env-var in den Anwendungseigenschaften unter de.muenchen.mobidam.common.s3.bucket-credential-config konfiguriert sein.
Der Wert von access-key-env-var und secret-key-env-var pro S3 Bucket (z.Bsp. MOBIDAM_ACCESS_KEY / MOBIDAM_SECRET_KEY) ist der Name der Umgebungvariable, die final die S3 Credentials Access-Key und Secret-Key enthalten.
Kann zu einem S3 Bucket Namen kein Map-Eintrag gefunden werden, wird standarmässig der "tenant-default" probiert.
de.muenchen.mobidam:
common:
s3:
bucket-credential-config:
tenant-default:
access-key-env-var: MOBIDAM_ACCESS_KEY
secret-key-env-var: MOBIDAM_SECRET_KEY
test-bucket:
access-key-env-var: FOO_ACCESS_KEY
secret-key-env-var: FOO_SECRET_KEY
printenv (bash) / set (cmd) / Get-ChildItem Env: (Powershell)
MOBIDAM_ACCESS_KEY=[mobidamS3AccessKey]
MOBIDAM_SECRET_KEY=[mobidamS3SecretKey]
FOO_ACCESS_KEY=[fooS3AccessKey]
FOO_SECRET_KEY=[fooS3SecretKey]
Der S3CredentialProvider ist von einer @ConditionalOnClass(AWS2S3Component.class) abhängig und erwartet eine BucketCredentialConfig für seine Initialisierung. Die BucketCredentialConfig wiederum kann nur konfiguriert werden wenn in der appliction.yml ein Eigenschaft de.muenchen.mobidam.common.s3.bucket-credential-config vorhanden ist. Dabei handelt es sich um eine Map<String, BucketCredentialConfig> die aber durch eine @ConditionalOnProperty nicht abgefragt werden kann. Die @ConditionalOnProperty ist darauf ausgelegt einfache String basierte Key-Value Eigenschaften zu überprüfen. Die Annotation stösst bei einer Map an ihre Grenzen. Daher ist in der S3BucketCredentialConfigAutoConfiguration keine zusätzliche Prüfung @ConditionalOnProperty enthalten.
<dependency>
<groupId>de.muenchen.mobidam</groupId>
<artifactId>mobidam-eai-commons-starter</artifactId>
<version>1.0.0</version>
</dependency>
public class ErrorResponse implements de.muenchen.mobidam.eai.common.exception.CommonError {
...
}
from("{{camel.route.common}}")
...
.setHeader(CommonConstants.HEADER_BUCKET_NAME, "test-bucket")
.process("s3CredentialProvider")
.toD(String.format("aws2-s3://${header.%1$s}?accessKey=RAW(${header.%2$s})&secretKey=RAW(${header.%3$s})..., CommonConstants.HEADER_BUCKET_NAME, CommonConstants.HEADER_ACCESS_KEY, CommonConstants.HEADER_SECRET_KEY, ...))
...
Sourcen auf den lokalen Rechner holen
git clone https://github.com/it-at-m/mobidam-eai-commons-starter.git
- Das Projekt mobidam-eai-commons-lib enthält die Sourcen.
- Das Projekt mobidam-eai-commons-starter enthält die Starter Klassen.