Skip to content

Latest commit

 

History

History
 
 

fasthtml-response-streaming-zip

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

FastHTML Response Streaming

This example shows how to use Lambda Web Adapter to run a FastHTML application with response streaming via a Function URL.

How does it work?

We add Lambda Web Adapter layer to the function and configure wrapper script.

  1. attach Lambda Adapter layer to your function. This layer containers Lambda Adapter binary and a wrapper script.
    1. x86_64: arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:23
    2. arm64: arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerArm64:23
  2. configure Lambda environment variable AWS_LAMBDA_EXEC_WRAPPER to /opt/bootstrap. This is a wrapper script included in the layer.
  3. set function handler to a startup command: run.sh. The wrapper script will execute this command to boot up your application.

To get more information of Wrapper script, please read Lambda documentation here.

This is the resource for Lambda function. The function urls's invoke mode is configured as "RESPONSE_STREAM", and Lambda environment variable "AWS_LWA_INVOKE_MODE" is set to "response_stream".

  FastHTMLFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: app/
      Handler: run.sh
      Runtime: python3.9
      MemorySize: 256
      Environment:
        Variables:
          AWS_LAMBDA_EXEC_WRAPPER: /opt/bootstrap
          AWS_LWA_INVOKE_MODE: response_stream
          PORT: 8000
      Layers:
        - !Sub arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:23
      FunctionUrlConfig:
        AuthType: NONE
        InvokeMode: RESPONSE_STREAM

Build and Deploy

Run the following commands to build and deploy the application to lambda.

sam build --use-container
sam deploy --guided

When the deployment completes, take note of the FastHTMLFunctionUrl Value. It is the Lambda function URL

Verify it works

Open the FastHTMLFunctionUrl URL in a browser, you should a button. Click to see "This is streaming from AWS Lambda! 🚀" stream back character by character.