This example shows how to use Lambda Web Adapter to run a FastAPI application with response streaming via a Function URL.
We add Lambda Web Adapter layer to the function and configure wrapper script.
- attach Lambda Adapter layer to your function. This layer containers Lambda Adapter binary and a wrapper script.
- x86_64:
arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:23
- arm64:
arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerArm64:23
- x86_64:
- configure Lambda environment variable
AWS_LAMBDA_EXEC_WRAPPER
to/opt/bootstrap
. This is a wrapper script included in the layer. - 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".
FastAPIFunction:
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
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 FastAPI's Value. It is the API Gateway endpoint URL.
Open FastAPI's URL in a browser, you should see "This is streaming from Lambda" streams back character by character.