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 .enve 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.tfvarse 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.
