Bill,

I am trying to reproduce this mechanism -

import boto3 import requests def lambda_handler(event, context): print(event
) object_get_context = event["getObjectContext"] request_route =
object_get_context["outputRoute"] request_token = object_get_context[
"outputToken"] s3_url = object_get_context["inputS3Url"] # Get object from
S3 response = requests.get(s3_url) original_object = response.content.decode
('utf-8') # Transform object transformed_object = original_object.upper() #
Write object back to S3 Object Lambda s3 = boto3.client('s3') s3.
write_get_object_response( Body=transformed_object, RequestRoute=
request_route, RequestToken=request_token) return {'status_code': 200}

As you can see that the Get Object operation is done by the jetty server,
transform object is done by lambda function but when you need to write
object back to Get Object  client, its done by the S3 Object Lambda which
is a java server in my case.

My ultimate goal is clients will be creating only a simple python
getRequest with custom S3 Lambda server address and then S3 Lambda Server
(Java Jetty Server) will perform everything then.

Having said that, when the customer will call the
write_get_object_response() API, it should actually handle the mechanism.
That is why I can not keep it completely synchronous. I must do the last
part in somewhat async way or using some ID. Please let me know if I am
clear.

Best,
Aniruddha
========

ᐧ

On Sun, Jun 27, 2021 at 9:17 PM Bill Ross <r...@cgl.ucsf.edu> wrote:

> Aniruddha,
>
> How about e.g. (starting from retro code style I assume)
>
>     @Override
>     public void doGet(HttpServletRequest req, HttpServletResponse res)
>         throws ServletException, IOException  {
>
>         // get data from HS or HSC with synchronous GET
>
>         // pass data to Lambda Server and get response synchronously
>
>         // write data back
>
>     }
>
> In your case, the Lamda Server gets the data from HS/HSC synchronously,
> but the simple thing seems to be to return it from the Servlet thread
> handling the response, with no async steps along the way. The only reason
> for async that I can imagine is if jetty threads were very expensive
> somehow and couldn't waste time blocked on a request.
>
> Bill
>
>
> On 6/27/21 6:51 PM, Aniruddha Tekade via jetty-users wrote:
>
> Bill,
>
> Flask server only executes the lambda function (transforming the data --
> ex. "my experiment with s3 object lambda".upper()) in python and then
> returns (or calls with) the transformed data in the body of response to
> write_get_object_response() defined with Java Server.
> Best,
> Aniruddha
> ========
>
> ᐧ
>
> On Sun, Jun 27, 2021 at 6:33 PM Bill Ross <r...@cgl.ucsf.edu> wrote:
>
>> If the Flask server doesn't do synchronous responses, that would explain
>> my confusion. If it does, you may be misunderstanding me.
>>
>> Bill
>> On 6/27/21 5:59 PM, Aniruddha Tekade via jetty-users wrote:
>>
>> Yes, I can remove the flask server and use Jython instead to make this
>> run in the same Java server.
>> But since I am trying to reproduce what AWS does with S3 Object Lambda
>> <https://docs.aws.amazon.com/AmazonS3/latest/API/API_WriteGetObjectResponse.html>
>> -
>>
>> *WriteGetObjectResponse*
>>>
>>> <https://docs.aws.amazon.com/AmazonS3/latest/API/s3-api.pdf#API_WriteGetObjectResponse>Passes
>>> transformed objects to a GetObject operation when using Object Lambda
>>> Access Points. For information about Object Lambda Access Points, see 
>>> Transforming
>>> objects with Object Lambda Access Points
>>> <https://docs.aws.amazon.com/AmazonS3/latest/userguide/transforming-objects.html>
>>>  in
>>> the *Amazon S3 User Guide*.
>>> This operation supports metadata that can be returned by GetObject
>>> <https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html>,
>>> in addition to RequestRoute, RequestToken, StatusCode, ErrorCode, and
>>> ErrorMessage. The GetObject response metadata is supported so that the
>>> WriteGetObjectResponse caller, typically an AWS Lambda function, can
>>> provide the same metadata when it internally invokes GetObject. When
>>> WriteGetObjectResponse is called by a customer-owned Lambda function,
>>> the metadata returned to the end user GetObject call might differ from
>>> what Amazon S3 would normally return.
>>
>> I am trying to find a workaround/mechanism to get this to work.
>>
>> Best,
>> Aniruddha
>> ========
>>
>> ᐧ
>>
>> On Sun, Jun 27, 2021 at 5:52 PM Bill Ross <r...@cgl.ucsf.edu> wrote:
>>
>>> Speaking from general server dev going back to the 90's, but w/o Amazon
>>> or Flask, so may not apply:
>>>
>>>
>>>    - Jetty server now forwards the request to a Python Flask server
>>>    which has the lambda function by passing object data to it
>>>    - Lambda function code perform the transformation on the object and
>>>    POST it back to Jetty server (which is a different API called
>>>    writeGetObjectResponse)
>>>
>>> It seems the original GET should be waiting on a synchronous call to the
>>> Flask server (after the sync GET to HS/HSC), and respond by forwarding the
>>> response?
>>>
>>>
>>>
>>> --
>>> Phobrain.com
>>> _______________________________________________
>>> jetty-users mailing list
>>> jetty-users@eclipse.org
>>> To unsubscribe from this list, visit
>>> https://www.eclipse.org/mailman/listinfo/jetty-users
>>>
>>
>> _______________________________________________
>> jetty-users mailing listjetty-us...@eclipse.org
>> To unsubscribe from this list, visit 
>> https://www.eclipse.org/mailman/listinfo/jetty-users
>>
>> --
>> Phobrain.com
>> _______________________________________________
>> jetty-users mailing list
>> jetty-users@eclipse.org
>> To unsubscribe from this list, visit
>> https://www.eclipse.org/mailman/listinfo/jetty-users
>>
>
> _______________________________________________
> jetty-users mailing listjetty-us...@eclipse.org
> To unsubscribe from this list, visit 
> https://www.eclipse.org/mailman/listinfo/jetty-users
>
> --
> Phobrain.com
> _______________________________________________
> jetty-users mailing list
> jetty-users@eclipse.org
> To unsubscribe from this list, visit
> https://www.eclipse.org/mailman/listinfo/jetty-users
>
_______________________________________________
jetty-users mailing list
jetty-users@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/jetty-users

Reply via email to