Questo progetto contiene il codice sorgente per la costruzione di una demo sul Digital Integration Hub.
In particolare, l'architettura prevede le seguenti componenti:
- Un cluster Confluent Cloud su AWS.
- Un database DynamoDB come High Performance Datastore.
- Un'applicazione Kakfa stream che gestisce lo stream processing.
- Dei microservizi implementati in python rilasciati su AWS Lambda.
- Un AWS API Gateway per l'esposizione dei micro-servizi.
- [TODO] Sorgenti da definire.
L'architettura è riportata nell'immagine qui sotto:
Per avviare l'infrastruttura è necessario:
- Avere un account AWS.
- Avere un account Confluent Cloud.
- Creare un utente AWS assegnandgli il ruolo di amministratore.
- Terraform installato sulla macchina locale.
- Essere in possesso di una key-pair per accedere alle macchine EC2.
- Se si volesse entrare in ssh nella macchina EC2 lanciare il comando
chmod 400 <Your Key Path>
e poissh -i <Key Path> ubuntu@<Control Center Public DNS>
-
Creare i topic sul cluster confluent cloud lanciando in sequenza:
ccloud kafka topic create cdc.orders --cluster <clusterID> --partitions 1
ccloud kafka topic create cdc.order_details --cluster <clusterID> --partitions 1
ccloud kafka topic create orders-details-joined --cluster <clusterID> --partitions 1
ccloud kafka topic create _confluent-monitoring --cluster <clusterID>
-
Clonare il repository.
-
Spostarsi nella root di progetto e creare il file
.env
e inserire le seguenti informazioni:BOOTSTRAP_SERVERS=<BOOTSTRAP_SERVERS>
SASL_JAAS_CONFIG=org.apache.kafka.common.security.plain.PlainLoginModule required username="<Confluent Cloud API Key>" password="<Confluent Cloud Secret Key>";
CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL=<Confluent Cloud Schema Registry URL>
AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
-
Copiare la coppia di chiavi all'interno della cartella
terraform
. -
Spostarsi all'interno della cartella
terraform
. -
Creare il file
common.tfvars
e inserire le seguenti informazioni:aws_access_key = "<aws_access_key>"
aws_secret_key = "<aws_secret_key>"
accountId = "<aws_account_id>"
key_name = "<your key-pair name>"
key_path = "<your key pair path>"
-
Lanciare il comando
terraform init
. -
Lanciare il comando
terraform plan -var-file common.tfvars -out "digital-integration-hub-aws-confluent.tfplan"
. -
Lanciare il comando
terraform apply "digital-integration-hub-aws-confluent.tfplan"
. -
Per creare un'istanza del sink-connector DynamoDB effettuare la seguente chiamata REST
URL: http://<Control Center Public DNS>:8083/connectors
METHOD: POST
HEADERS: Content-Type: application/json
BODY: {
"name": "test-dynamo-join",
"config": {
"connector.class": "io.confluent.connect.aws.dynamodb.DynamoDbSinkConnector",
"tasks.max": "1",
"topics": "orders-details-joined",
"aws.dynamodb.region": "eu-central-1",
"aws.dynamodb.endpoint": "https://dynamodb.eu-central-1.amazonaws.com",
"confluent.topic.bootstrap.servers": "<BOOTSTRAP_SERVERS>",
"confluent.topic.replication.factor": "3",
"name": "test-dynamo-join",
"confluent.topic.security.protocol" : "SASL_SSL",
"confluent.topic.sasl.jaas.config" : "org.apache.kafka.common.security.plain.PlainLoginModule required username='<Confluent Cloud API Key>' password='<Confluent Cloud Secret Key>';",
"confluent.topic.sasl.mechanism": "PLAIN"
}
}
- Lanciare il comando
terraform destroy -var-file common.tfvars
.