Architecture of a product search engine - amazon-web-services

I have developed a product search engine using AWS API Gateway, Lambda, ElasticSerach services. When user queries for a product, web server forward those request to API GW, then Lambda function is called and Lambda runs a search query in ES and sends back the results.
This works fine but I want query results to be cached somewhere if it returns more than 40 items so users can move to next page and so on without triggering the Lambda again and agin.
Is there an easy way of doing this without creating a web service using Node.js or something like that, I was checking ElastiCache but I couldn't find a proper use case.
Any idea how this can be achieved without maintaining a 24/7 web service?
Thanks!

Related

AWS Kedra to UI

I am trying to merge the Aws Kendra search to my UI search bar but I am not knowing where to start can anybody please tell how can i do this.
I have been reading the amazon documents on how to create index for kendra and sync with the data source and also tried the hands on for the same.
I have already created a UI with html ,css and joined with javascript to send video files to s3 , now what I want to do is if any User searches any query or anything in the video should come as a result on the UI with using AWS kendra.
Have you tried to look at Deploying Amazon Kendra? This page provides documentation on kick starting your Kendra integration with some starter code. Although this might be different than your current UI setup, it would cover how a website calls the Kendra backend on their Query APIs and process its Query results.

How can I invoke a desktop app from Google Cloud Platform services?

I'm building a desktop client app (win/linux/mac) with a backend hosted in GCP (I'm considering other cloud platforms too). The desktop app should be minimalistic and provide access to local machine resources to the backend. And I'm looking for a way to invoke my app from the server (when some event occurs) and then the app would do some work on a local machine. Here's what I've tried so far.
Google Cloud Pub/Sub. Seems like it does what I need, but to make it work I have to create a service account, generate JSON key and store it locally, which is not good. I can restrict the service account access permissions, of course, but still it doesn't look good to me. Maybe there are other ways to auth my app running at the end user machine? I want to keep my desktop app minimal (ideally without UI, just an "agent" console process / Windows service). Maybe I could consider a login screen to connect the app with the backend, if that solves the problem, but I don't want to overcomplicate.
Google Cloud Run + SignalR / WebSockets. This solution also looks good, but it has one significant disadvantage. As long as there's at least one open WebSocket the Cloud Run instance is considered active and therefore billed. There are other difficulties related to scalability and container instances synchronization too.
What do you think about the options above, and what are the other possibilities? Am I left with REST API and polling for updates? I'm quite new to the cloud stuff so any help is appreciated. Thanks!
If you want to be able to invoke your local app from Google Cloud, you need 2 things
The first one, to register your app on Google Cloud, with, preferably, a auth mecanism (can be an API key for example). Like this, the GCP backend know where to call you app (which IP/port) and how (the auth mechanism)
The second is to have your app up and running and listen external communication. HTTP is the easiest way. Wait a HTTP call on the IP/port defined during the registration, check the auth and perform the process.
You can store the data (location and the auth) in firestore for example, and use Cloud Run to perform the HTTP call.
You can also inverse the solution and to poll (long polling or regular poll) the backend from the local app when it is running.
The 2 approach are possible, the second one slightly easier but can be challenging to manage the security.

Can I use AWS Lambda for my requirements?

I recently visited "AWS Free Tier". Under that in "serverless" option is "AWS Lambda". I am trying to develop an application. I want to know what will be the best resource to use.
USAGE: I need to connect to server through mobile app using HTTP POST. 1st it will register the bus number. Then it will add the corresponding bus stops and the fare between each bus stop. The app will next time send bus number and get all bus stops. Then it will select 2 bus stops and send to server. It will pay the required fare. Server will generate the bus ticket and store in database. It will send 1 copy to the mobile.
I need an web server for development and testing purpose. I had started with JSP. But due to some reasons I was not able to access the JSP page through android app. However I was able to access the JSP through browser. In android app, I can access other websites. I think the url was the problem. So, I decided to use AWS server. Please let me know where I can use JSP. If you have any other server and database, please let me know. Currently I will be using it for development and testing purpose. So, 1-5 users may use it. But later I will run it as a business. Then more users will be using it. (So, please let me know about the payments for business use also, if you have idea about that) I will need database also.
You could write a service which recieves an HTTP request and accesses a database as part of the logic it performs to generate a response and host that service with AWS Lambda.
You would need a database in addition to AWS Lambda (there are many database services available from AWS and other providers).
You can't just drop your JSP files onto Lambda. It does not support JSP (although it does support programs written in Java).

API Manager Analytics

We are working on a solution built on top of WSO2 APIM.
Problem Statement:
We want to add custom capability in existing APIM. Right now if we consume a single api endpoint it gives us meaningful statics some of them are:
API Usage API
API Usage per Application
Top Users per Application
Resource Usage per Application
But what we need is to store some/all incoming request data into database and extract meaningful information over time.
Example:
Suppose we have a api endpoint like below:
HTTP-Verb: POST
URL: http://localhost:9444/subscriptions/1/create_subscription
Params: name:sample_name, type:sample_type, user_id:12345
What we want?
It could be WSO2, OpenAM or any other opensource API manager.
We need to store parameter values e.g. sample_name, sample_type
and user_id in database.
Observations?
Looks like WSO Stream Processor can provide this functionality.
As it has a solution for HTTP Analytics. But we are not certain
to proceed with this option.
Another possible candidate is to Extend API Manager. But docs doesn't have anything to target what we wanted to do.
I am not sure but we can use RequestInterceptor?
Anyone has a experience with this kind of problem please let me know.
There are two problems you have to solve here,
1. Capture the required data from the APIM side
2. Publish to Analytics Server
3. Perform Analytics on received events
As you have observed WSO2 SP can be used for 3.
For 1 & 2, please see blog (https://medium.com/#naduni_pamudika/how-to-publish-custom-attributes-from-wso2-api-manager-to-wso2-analytics-38dd83e8aea2) for extending the publishers to capture and publish additional data.
You can also take a look at OpenIG, it is easy to extend and you can implement your own filter to store request data in database. Another approach is develop your own gateway based on Netflix Zuul or Spring Cloud Gateway

Which type of Xero application should we use?

We are creating an integration application which will sync data between Dynamics CRM and Xero. We are now at the stage where we need to decide which type of application we should use to connect to Xero and perform operations.
The application will be used by multiple Xero Customers. So our application should serve multiple Xero users.
We will have web api which will call on Dynamics CRM events(Create, Update Contact etc.) and will update the data in Xero.
So our web api should connect to Xero and perform operations in Xero. We tried using Public application but it generates the token that is valid for 30 minutes. The web api should communicate to Xero without any time limitation.
Please suggest how we can achieve this.
You should begin developing your integration using a public application, and get in touch with Xero to register for becoming a partner application (which will give you the ability to request long-term tokens). The process is documented here: https://developer.xero.com/documentation/auth-and-limits/partner-applications