Added an Azure Storage Blob CDC example

Signed-off-by: Andrea Cosentino <ancosen@gmail.com>
diff --git a/jbang/azure-storage-blob-cdc/README.adoc b/jbang/azure-storage-blob-cdc/README.adoc
new file mode 100644
index 0000000..537fc7c
--- /dev/null
+++ b/jbang/azure-storage-blob-cdc/README.adoc
@@ -0,0 +1,186 @@
+== Azure Storage Blob CDC Example
+
+In this sample you'll use the Azure Storage Blob CDC Source Kamelet.
+
+Through the usage of Event Grid and Servicebus Services you'll be able to consume events from specific containers.
+
+=== Install JBang
+
+First install JBang according to https://www.jbang.dev
+
+When JBang is installed then you should be able to run from a shell:
+
+[source,sh]
+----
+$ jbang --version
+----
+
+This will output the version of JBang.
+
+To run this example you can either install Camel on JBang via:
+
+[source,sh]
+----
+$ jbang app install camel@apache/camel
+----
+
+Which allows to run CamelJBang with `camel` as shown below.
+
+=== Setup the Servicebus, Azure Storage Blob and Eventgrid
+
+Running the terraform configuration provided in terraform folder.
+
+[source,sh]
+----
+cd terraform/
+----
+
+and then run
+
+[source,sh]
+----
+terraform init
+----
+
+At this point you should be to run the configuration
+
+[source,sh]
+----
+terraform apply
+----
+
+Enter yes and wait for the terraform configuration to end.
+
+=== Setup credentials
+
+In the `azure.prop` add the correct accessKey for the Azure Storage Blob account.
+
+In the `azure-storage-blob-cdc.yaml` add the correct connection String for the Servicebus Queue.
+
+=== How to run
+
+Then you can run this example using:
+
+[source,sh]
+----
+$ camel run --local-kamelet-dir=<local-kamelets-dir> --properties=azure.prop azure-storage-blob-cdc.yaml
+----
+
+Replace the local kamelet dir with your local directory.
+
+Or run with JBang using the longer command line (without installing camel as app in JBang):
+
+[source,sh]
+----
+$ jbang run camel@apache/camel run --local-kamelet-dir=<local-kamelets-dir> --properties=azure.prop azure-storage-blob-cdc.yaml
+----
+
+Replace the local kamelet dir with your local directory.
+
+=== Developer Web Console
+
+You can enable the developer console via `--console` flag as show:
+
+[source,sh]
+----
+$ camel run --local-kamelet-dir=<local-kamelets-dir> --properties=azure.prop azure-storage-blob-cdc.yaml --console
+----
+
+Then you can browse: http://localhost:8080/q/dev to introspect the running Camel applicaton.
+
+=== Create and delete an object
+
+While the integration is running you can run the following commands:
+
+[source,sh]
+----
+az storage blob upload --account-name kameletsaccount --container-name kamelets --file nominatim-geocode-action.kamelet.yaml --account-key <accountKey>
+az storage blob delete --account-name kameletsaccount --container-name kamelets --name nominatim-geocode-action.kamelet.yaml --account-key <accountKey>
+----
+
+You should see at first the content of the uploaded file and in the second message the deletion of the blob from the container.
+
+[source,sh]
+----
+2022-12-05 10:08:37.134  INFO 54702 --- [           main] org.apache.camel.main.MainSupport        : Apache Camel (JBang) 3.20.0-SNAPSHOT is starting
+2022-12-05 10:08:37.340  INFO 54702 --- [           main] org.apache.camel.main.MainSupport        : Using Java 11.0.16.1 with PID 54702. Started by oscerd in /home/oscerd/workspace/apache-camel/camel-kamelets-examples/jbang/azure-storage-blob-cdc
+2022-12-05 10:08:37.350  INFO 54702 --- [           main] he.camel.cli.connector.LocalCliConnector : Camel CLI enabled (local)
+2022-12-05 10:08:39.949  INFO 54702 --- [           main] .main.download.MavenDependencyDownloader : Downloaded: org.apache.camel:camel-azure-servicebus:3.20.0-SNAPSHOT (took: 1s87ms)
+2022-12-05 10:08:41.307  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext : Apache Camel 3.20.0-SNAPSHOT (azure-storage-blob-cdc) is starting
+2022-12-05 10:08:41.512  INFO 54702 --- [           main] aging.servicebus.ServiceBusClientBuilder : {"az.sdk.message":"Setting entity from connection string.","entityPath":"kamelets_servicebus_queue"}
+2022-12-05 10:08:41.514  WARN 54702 --- [           main] aging.servicebus.ServiceBusClientBuilder : 'enableAutoComplete' is not needed in for RECEIVE_AND_DELETE mode.
+2022-12-05 10:08:41.709  INFO 54702 --- [           main] ementation.ServiceBusConnectionProcessor : {"az.sdk.message":"Setting next AMQP channel.","entityPath":"N/A"}
+2022-12-05 10:08:41.711  INFO 54702 --- [           main] aging.servicebus.ServiceBusClientBuilder : # of open clients with shared connection: 1
+2022-12-05 10:08:41.727  INFO 54702 --- [           main] servicebus.ServiceBusReceiverAsyncClient : {"az.sdk.message":"Creating consumer.","linkName":"kamelets_servicebus_queue_18caee_1670231321727","entityPath":"kamelets_servicebus_queue"}
+2022-12-05 10:08:41.735  INFO 54702 --- [           main] mentation.ServiceBusReceiveLinkProcessor : Requesting a new AmqpReceiveLink from upstream.
+2022-12-05 10:08:41.759  INFO 54702 --- [           main] re.amqp.implementation.ReactorConnection : {"az.sdk.message":"Creating and starting connection.","connectionId":"MF_a947d3_1670231321658","hostName":"kamelets-servicebus-namespace.servicebus.windows.net","port":5671}
+2022-12-05 10:08:41.782  INFO 54702 --- [           main] core.amqp.implementation.ReactorExecutor : {"az.sdk.message":"Starting reactor.","connectionId":"MF_a947d3_1670231321658"}
+2022-12-05 10:08:41.792  INFO 54702 --- [ctor-executor-1] implementation.handler.ConnectionHandler : {"az.sdk.message":"onConnectionInit","connectionId":"MF_a947d3_1670231321658","hostName":"kamelets-servicebus-namespace.servicebus.windows.net","namespace":"kamelets-servicebus-namespace.servicebus.windows.net"}
+2022-12-05 10:08:41.793  INFO 54702 --- [ctor-executor-1] qp.implementation.handler.ReactorHandler : {"az.sdk.message":"reactor.onReactorInit","connectionId":"MF_a947d3_1670231321658"}
+2022-12-05 10:08:41.794  INFO 54702 --- [ctor-executor-1] implementation.handler.ConnectionHandler : {"az.sdk.message":"onConnectionLocalOpen","connectionId":"MF_a947d3_1670231321658","errorCondition":null,"errorDescription":null,"hostName":"kamelets-servicebus-namespace.servicebus.windows.net"}
+2022-12-05 10:08:41.813  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    : Property-placeholders summary
+2022-12-05 10:08:41.813  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    :     [blob-cdc-source.kamelet.yaml] topicOrQueueName=kamelets_servicebus_queue
+2022-12-05 10:08:41.813  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    :     [blob-cdc-source.kamelet.yaml] connectionString=xxxxxx
+2022-12-05 10:08:41.813  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    :     [blob-cdc-source.kamelet.yaml] getBlob=true
+2022-12-05 10:08:41.813  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    :     [blob-cdc-source.kamelet.yaml] accountName=kameletsaccount
+2022-12-05 10:08:41.813  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    :     [blob-cdc-source.kamelet.yaml] containerName=kamelets
+2022-12-05 10:08:41.813  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    :     [blob-cdc-source.kamelet.yaml] accessKey=xxxxxx
+2022-12-05 10:08:41.814  INFO 54702 --- [           main] org.apache.camel.main.BaseMainSupport    :     [log-sink.kamelet.yaml]        showStreams=true
+2022-12-05 10:08:41.832  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext : Routes startup (started:3)
+2022-12-05 10:08:41.832  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext :     Started route1 (kamelet://azure-storage-blob-cdc-source)
+2022-12-05 10:08:41.832  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext :     Started azure-storage-blob-cdc-source-1 (azure-servicebus://kamelets_servicebus_queue)
+2022-12-05 10:08:41.832  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext :     Started log-sink-2 (kamelet://source)
+2022-12-05 10:08:41.832  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext : Apache Camel 3.20.0-SNAPSHOT (azure-storage-blob-cdc) started in 3s404ms (build:100ms init:2s780ms start:524ms JVM-uptime:5s)
+2022-12-05 10:08:54.590  INFO 54702 --- [oundedElastic-1] storage-blob-cdc-source.kamelet.yaml:138 : Microsoft.Storage.BlobCreated - /blobServices/default/containers/kamelets/blobs/nominatim-geocode-action.kamelet.yaml - nominatim-geocode-action.kamelet.yaml
+2022-12-05 10:08:55.370  INFO 54702 --- [oundedElastic-1] log-sink                                 : Exchange[ExchangePattern: InOnly, BodyType: org.apache.camel.converter.stream.InputStreamCache, Body: # ---------------------------------------------------------------------------# Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements.  See the NOTICE file distributed with# this work for additional information regarding copyright ownership.# The ASF licenses this file to You under the Apache License, Version 2.0# (the "License"); you may not use this file except in compliance with# the License.  You may obtain a copy of the License at##      http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# ---------------------------------------------------------------------------apiVersion: camel.apache.org/v1alpha1kind: Kameletmetadata:  name: nominatim-geocode-action  annotations:    camel.apache.org/kamelet.support.level: "Stable"    camel.apache.org/catalog.version: "main-SNAPSHOT"    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMjU2IgogICBoZWlnaHQ9IjI1NiIKICAgaWQ9InN2ZzMwMzgiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xLjIgKDBhMDBjZjUzMzksIDIwMjItMDItMDQpIgogICBzb2RpcG9kaTpkb2NuYW1lPSJPcGVuU3RyZWV0TWFwIGxvZ28gMjAxMS5zdmciCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL2hvbWUvZnJlZC9ibGEucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMTgwIgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTgwIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPgogIDx0aXRsZQogICAgIGlkPSJ0aXRsZTM1OTQiPk9wZW5TdHJlZXRNYXAgbG9nbyAyMDExPC90aXRsZT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMzA0MCI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDY4NDYiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY4NDgiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjAuOTMwNTAxOTQ7IgogICAgICAgICBvZmZzZXQ9IjAuNSIKICAgICAgICAgaWQ9InN0b3A2ODUyIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDY4NTAiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1ODYyIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Y5ZTI5NTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A1ODY0IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU4NzYiCiAgICAgICAgIG9mZnNldD0iMC4xMjUiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmN2RkODQ7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU4NzQiCiAgICAgICAgIG9mZnNldD0iMC4yMDU4MDU4MiIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNTg3MCIKICAgICAgICAgb2Zmc2V0PSIwLjMwMTEyNjIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZjRjZTUxO3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2Y5ZTdhYTtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMC4zNDEyMDM5IgogICAgICAgICBpZD0ic3RvcDU4NzIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZmJiMGU7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNTg2NiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDU3NjIiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMmQzMzM1O3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDU3NjQiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wNTc3MCIKICAgICAgICAgb2Zmc2V0PSIwLjUiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiM0YzQ2NGE7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzg0MDQyO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDU3NjYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ1NzQ1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QwZTlmMjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A1NzQ3IiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDU3NTMiCiAgICAgICAgIG9mZnNldD0iMC44MzkzMjc1MSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QwZTlmMjtzdG9wLW9wYWNpdHk6MDsiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkMGU5ZjI7c3RvcC1vcGFjaXR5OjAuMjgxODUzMjk7IgogICAgICAgICBvZmZzZXQ9IjAuOTQzMDg1MDciCiAgICAgICAgIGlkPSJzdG9wNTc1NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QwZTlmMjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A1NzQ5IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NDY4MCI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNDY4MiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A0Njg0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMDQ2IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMDU2IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTM4NDQiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzg3MSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzODk3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTM5MjYiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzk1MyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzOTc5IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTQwMDUiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNDAyOCIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU0MDU0IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTQwODMiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN...]
+2022-12-05 10:08:55.372  INFO 54702 --- [oundedElastic-1] mentation.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
+2022-12-05 10:09:05.021  INFO 54702 --- [oundedElastic-1] storage-blob-cdc-source.kamelet.yaml:138 : Microsoft.Storage.BlobDeleted - /blobServices/default/containers/kamelets/blobs/nominatim-geocode-action.kamelet.yaml - nominatim-geocode-action.kamelet.yaml
+2022-12-05 10:09:05.026  INFO 54702 --- [oundedElastic-1] log-sink                                 : Exchange[ExchangePattern: InOnly, BodyType: com.fasterxml.jackson.databind.node.ObjectNode, Body: {  "topic" : "/subscriptions/13d32827-569a-4093-bb0a-6d4bcebc757b/resourceGroups/kamelets-resources/providers/Microsoft.Storage/storageAccounts/kameletsaccount",  "subject" : "/blobServices/default/containers/kamelets/blobs/nominatim-geocode-action.kamelet.yaml",  "eventType" : "Microsoft.Storage.BlobDeleted",  "id" : "33e99ac3-301e-006f-5589-086acf06f835",  "data" : {    "api" : "DeleteBlob",    "requestId" : "33e99ac3-301e-006f-5589-086acf000000",    "eTag" : "0x8DAD6A05B7E3A14",    "contentType" : "application/x-yaml",    "contentLength" : 117703,    "blobType" : "BlockBlob",    "url" : "https://kameletsaccount.blob.core.windows.net/kamelets/nominatim-geocode-action.kamelet.yaml",    "sequencer" : "000000000000000000000000000096D200000000003cd61b",    "storageDiagnostics" : {      "batchId" : "5230b727-8006-0045-0089-08b5df000000"    }  },  "dataVersion" : "",  "metadataVersion" : "1",  "eventTime" : "2022-12-05T09:09:04.445698Z"}]
+2022-12-05 10:09:05.027  INFO 54702 --- [oundedElastic-1] mentation.ServiceBusReceiveLinkProcessor : {"az.sdk.message":"Adding credits.","prefetch":0,"requested":2,"linkCredits":0,"expectedTotalCredit":2,"queuedMessages":1,"creditsToAdd":1,"messageQueueSize":0}
+^C2022-12-05 10:09:08.094  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext : Apache Camel 3.20.0-SNAPSHOT (azure-storage-blob-cdc) is shutting down (timeout:10s)
+2022-12-05 10:09:08.099  INFO 54702 --- [ - ShutdownTask] servicebus.ServiceBusReceiverAsyncClient : Removing receiver links.
+2022-12-05 10:09:08.103  INFO 54702 --- [ - ShutdownTask] aging.servicebus.ServiceBusClientBuilder : {"az.sdk.message":"Closing a dependent client.","numberOfOpenClients":0}
+2022-12-05 10:09:08.103  INFO 54702 --- [ - ShutdownTask] aging.servicebus.ServiceBusClientBuilder : No more open clients, closing shared connection.
+2022-12-05 10:09:08.103  INFO 54702 --- [ - ShutdownTask] ementation.ServiceBusConnectionProcessor : {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"N/A"}
+2022-12-05 10:09:08.103  INFO 54702 --- [ - ShutdownTask] re.amqp.implementation.ReactorConnection : {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_a947d3_1670231321658","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."}
+2022-12-05 10:09:08.104  INFO 54702 --- [ - ShutdownTask] ementation.ServiceBusConnectionProcessor : {"az.sdk.message":"Channel is disposed.","entityPath":"N/A"}
+2022-12-05 10:09:08.120  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext : Routes stopped (stopped:3)
+2022-12-05 10:09:08.120  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext :     Stopped log-sink-2 (kamelet://source)
+2022-12-05 10:09:08.120  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext :     Stopped azure-storage-blob-cdc-source-1 (azure-servicebus://kamelets_servicebus_queue)
+2022-12-05 10:09:08.120  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext :     Stopped route1 (kamelet://azure-storage-blob-cdc-source)
+2022-12-05 10:09:08.126  INFO 54702 --- [           main] e.camel.impl.engine.AbstractCamelContext : Apache Camel 3.20.0-SNAPSHOT (azure-storage-blob-cdc) shutdown in 32ms (uptime:26s JVM-uptime:31s)
+2022-12-05 10:09:08.126  INFO 54702 --- [           main] org.apache.camel.main.MainSupport        : Apache Camel (JBang) 3.20.0-SNAPSHOT shutdown
+
+----
+
+=== Cleanup Servicebus, Azure Storage Blob and Eventgrid through Terraform
+
+You'll need to cleanup everything from AWS console or CLI.
+
+If you used terraform it will be enough to run terraform destroy
+
+[source,sh]
+----
+cd terraform/
+----
+
+At this point you should be to run the destroy
+
+[source,sh]
+----
+terraform destroy
+----
+
+You'll need to specify the same var used for terraform apply.
+
+At the end the Azure enviroment on your account will be clean.
+
+=== Help and contributions
+
+If you hit any problem using Camel or have some feedback, then please
+https://camel.apache.org/community/support/[let us know].
+
+We also love contributors, so
+https://camel.apache.org/community/contributing/[get involved] :-)
+
+The Camel riders!
diff --git a/jbang/azure-storage-blob-cdc/azure-storage-blob-cdc.yaml b/jbang/azure-storage-blob-cdc/azure-storage-blob-cdc.yaml
new file mode 100644
index 0000000..a5dbef0
--- /dev/null
+++ b/jbang/azure-storage-blob-cdc/azure-storage-blob-cdc.yaml
@@ -0,0 +1,33 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+# camel-k: dependency=camel:aws-secrets-manager
+
+- route:
+    from:
+      uri: "kamelet:azure-storage-blob-cdc-source"
+      parameters:
+        accountName: "kameletsaccount"
+        containerName: "kamelets"
+        getBlob: true
+        topicOrQueueName: "kamelets_servicebus_queue"
+        connectionString: "RAW(<connectionString>)"
+      steps:
+      - to: 
+          uri: "kamelet:log-sink"
+          parameters:
+            showStreams: "true"
diff --git a/jbang/azure-storage-blob-cdc/azure.prop b/jbang/azure-storage-blob-cdc/azure.prop
new file mode 100644
index 0000000..038c729
--- /dev/null
+++ b/jbang/azure-storage-blob-cdc/azure.prop
@@ -0,0 +1 @@
+camel.kamelet.azure-storage-blob-cdc-source.accessKey=
diff --git a/jbang/azure-storage-blob-cdc/terraform/main.tf b/jbang/azure-storage-blob-cdc/terraform/main.tf
new file mode 100644
index 0000000..cacd853
--- /dev/null
+++ b/jbang/azure-storage-blob-cdc/terraform/main.tf
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+# We strongly recommend using the required_providers block to set the
+# Azure Provider source and version being used
+terraform {
+  required_providers {
+    azurerm = {
+      source  = "hashicorp/azurerm"
+      version = "=3.0.0"
+    }
+  }
+}
+
+# Configure the Microsoft Azure Provider
+provider "azurerm" {
+  features {}
+}
+
+resource "azurerm_resource_group" "kamelets" {
+  name     = "kamelets-resources"
+  location = "West Europe"
+}
+
+resource "azurerm_storage_account" "kamelets" {
+  name                     = "kameletsaccount"
+  resource_group_name      = azurerm_resource_group.kamelets.name
+  location                 = azurerm_resource_group.kamelets.location
+  account_tier             = "Standard"
+  account_replication_type = "LRS"
+}
+
+resource "azurerm_storage_container" "camelkamelets" {
+  name                  = "kamelets"
+  storage_account_name  = azurerm_storage_account.kamelets.name
+  container_access_type = "private"
+}
+
+resource "azurerm_servicebus_namespace" "example" {
+  name                = "kamelets-servicebus-namespace"
+  location            = azurerm_resource_group.kamelets.location
+  resource_group_name = azurerm_resource_group.kamelets.name
+  sku                 = "Standard"
+}
+
+resource "azurerm_servicebus_queue" "example" {
+  name         = "kamelets_servicebus_queue"
+  namespace_id = azurerm_servicebus_namespace.example.id
+
+  enable_partitioning = true
+}
+
+resource "azurerm_eventgrid_event_subscription" "example" {
+  name  = "example-aees"
+  scope = azurerm_storage_account.kamelets.id
+  
+  service_bus_queue_endpoint_id = azurerm_servicebus_queue.example.id
+  
+    included_event_types = [
+    "Microsoft.Storage.BlobCreated", "Microsoft.Storage.BlobDeleted"
+  ]
+}