We are currently using AWS Lambda for some of the services with the following flow.
- A rails application (kubernetes) adds a message to SQS queue
- Lambda function is invoked via SQS trigger
- Lambda function adds the notification to SNS
- SNS calls the configured https endpoint to notify the rails application of the status
This has been working well for us. The function takes about 15 seconds to run (for generating some pdf with headless-chrome)
Due to Geographical data security restrictions for a separate installation of our application, we are unable to use AWS and the only feasible option is to use Oracle Cloud Infrastructure (OCI). OCI has cloud functions and also a Queue service, however unlike AWS, OCI doesn’t seem to have inbuilt integration between cloud functions and Queue service.
One of the solutions we have discussed in the team is to deploy a service in kubernetes to consume the messages from the OCI Queue and invoke the cloud function and send the results to Notifications service.
I would appreciate any inputs that can simplify this flow but also maintain the async nature and scalability.
3
Answers
I guess that when you are talking about service in K8s is 24/24 7/7 service and don’t want to manage it through HPA/VPA.
If so, you can use https://knative.dev or alternatives https://ramitsurana.github.io/awesome-kubernetes/projects/projects/#serverless-implementations
Rather than using OCI Queues you can send the events using OCI Streaming with a single subscriber
then you can link Functions easily and Notification service is available
Use OCI Streams. You then connect A Stream to OCI functions via the OCI Service Connector Hub. In due course you can expect OCI Queues to connect that way.
Always worth raising requests for features like this through the developer.oracle.com’s slack channel