Announcing TriggerMesh 1.25

Jonathan Michaux

Jonathan Michaux

May 17, 2023
Announcing TriggerMesh 1.25
Announcing TriggerMesh 1.25

TriggerMesh 1.25 is fresh from the oven so be careful not to burn yourself with this piping hot new release. To start, we’d like to give a big heartfelt thankyou for the external contributions from the likes of roeizavida, knechtionscoding, and coding-trees, we really appreciate your help in building TriggerMesh 🤟. If you’d like to join these folks and others, head over to the community Slack and say hi! 

TL;DR for 1.25 - new Azure Service Bus source and target, new MongoDB source, easier to use HTTP target, new adapter overrides for K8s, cloud auth improvements, and an experimental new schema-powered JSON transformation wizard.

Now let’s dive into the details 🔎. 

New connectors for Azure Service Bus and MongoDB

The new Azure Service Bus source and target components support both topics and queues within the same component rather than having dedicated components for each. To determine which abstraction you want to use, simply specify either the queueID or topicID parameter. As part of this improvement we’re also flagging the previous Azure Service Bus queue source and Azure Service Bus topic source as deprecated; they'll be removed in a future release. The example below shows how to connect to a queue when using the new target from tmctl:

tmctl create target azureservicebus --queueID  \
                                    --auth.servicePrincipal.tenantID  \
                                    --auth.servicePrincipal.clientID  \
                                    --auth.servicePrincipal.clientSecret 

For those that want to migrate an existing Azure Service Bus connector to the new one, the only required changes are to update your version of TriggerMesh and remove the words "queue" or "topic" from the name of the CRD you are using. Under the hood, the component still uses the same Azure SDK so don't expect any drastic changes in behaviour. 

The new MongoDB source works by capturing change notifications from a MongoDB collection and producing CloudEvents for them. It uses MongoDB change streams under the hood. Much like the MongoDB target that we released in 1.24, this MongoDB source takes a connection string, database name, and collection name as parameters, as shown by the tmctl command below:

tmctl create source mongodb --connectionString mongodb://localhost:27017 \
                            --database  \
                            --collection 

Schema-powered transformations (experimental)

This new CLI-based wizard makes it easier to write JSON transformations by showing you examples of input and output events based on the sources and targets you have configured. It also provides useful shortcuts for generating the JSON transformation that you want.

To access the new wizard, use the following argument when creating a transformation from tmctl:

tmctl create transformation --wizard

This is an experimental feature and will continue to evolve at a fast pace. We’re rolling it out because we'd love to get your feedback on it. 

AWS and GCP authentication improvements

As we continue to get feedback and contributions from users consuming cloud services from within managed Kubernetes services like GKE, AKS, and EKS, our support for the different auth mechanisms and fine-tunings thereof is becoming increasingly battle-tested. 

The latest enhancements on this front include an external contribution for GCP that provides the ability to customize the Kubernetes Service Account names, for cases where naming conventions for gcpServiceAccounts differ from that of Kubernetes service accounts. 

On the AWS front, we’ve added support for cross-account IAM authentication, allowing TriggerMesh to assume a role defined in a different account to the one it is running in, allowing for uses cases in which IAM roles can be leveraged across organizational boundaries so long as the appropriate trust relationships are established. 

K8s workload customization with adapter overrides

TriggerMesh is designed to run natively on Kubernetes, and as such the Kubernetes practitioners deploying TriggerMesh sometimes required additional knobs to configure the way in which TriggerMesh workloads are configured. Three new adapter overrides now let you:

  • set node affinity
  • define annotations
  • set node selector attributes

Below is an example of some of these parameters set in a manifest:

spec:
  # ...
  adapterOverrides:
    affinity:
      nodeAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 1
          preference:
            matchExpressions:
            - key: zone
              operator: In
              values:
              - zone-a
    nodeSelector:
      disktype: ssd
    annotations:
      my-annotation-name: my-annotation-value

And more…

HTTP target free mode

The HTTP target now accepts arbitrary, non-transformed events, which will simply be passed to the configured HTTP destination endpoint. Prior to this improvement, you needed to transform the incoming event to match the event schema expected by the HTTP target, which still optionally allows you to customize the behavior of the target (like query params and path) dynamically at runtime. This new mode is called free mode. It’s great to be free!

Function runtimes updated

Runtime versions were updated as follows:

  • Python 3.7 -> Python 3.10
  • NodeJS 10 -> NodeJS 18
  • Ruby 2.5 -> Ruby 3.2

Broker support for custom CA certs and TLS

Improve the security of the connection between TriggerMesh’s broker and your own Redis backing instance by enabling TLS and specifying and Certificate Authority (CA).

(edit) Minor breaking change for AzureBlobStorage source

The AzureBlogStorage source uses Azure Event Grid under the hood to transport Blob Storage events into TriggerMesh. In 1.25, the naming convention used to create subscriptions in Azure Event Grid has changed and compatibility is not maintained with the previous naming convention. This means that when updating to 1.25, we recommend that users of AzureBlobStorage source first delete existing components and then create a new ones. This will delete the old Event Grid subscription before creating the new one with the new naming convention. It isn't a big deal if you don't do this, simply know that a new subscription will be created in Azure Event Grid and the old one will linger unused.

Try TriggerMesh today!

The easiest way to get started for new users is to run through the quickstart guide.

For those looking to upgrade tmctl or TriggerMesh on K8s to the latest version, we have some useful tips on upgrading in the documentation. 

And of course, join us on the community Slack for instant access to the TriggerMesh team and other professionals and enthusiasts that are interested in event-driven architecture. 

Create your first event flow in under 5 minutes