NAME
AWS::Lambda::PSGI - It translates enevt of Lambda Proxy Integrations in API Gateway and Application Load Balancer into PSGI.
SYNOPSIS
Add the following script into your Lambda code archive.
use utf8;
use warnings;
use strict;
use AWS::Lambda::PSGI;
my $app = require "$ENV{'LAMBDA_TASK_ROOT'}/app.psgi";
my $func = AWS::Lambda::PSGI->wrap($app);
sub handle {
return $func->(@_);
}
1;
And then, Set up Lambda Proxy Integrations in API Gateway or Lambda Functions as ALB Targets
DESCRIPTION
Streaming Response
AWS::Lambda::PSGI supports response streaming. The function urls's invoke mode is configured as "RESPONSE_STREAM"
, and Lambda environment variable "PERL5_LAMBDA_PSGI_INVOKE_MODE" is set to "RESPONSE_STREAM"
.
ExampleApi:
Type: AWS::Serverless::Function
Properties:
FunctionUrlConfig:
AuthType: NONE
InvokeMode: RESPONSE_STREAM
Environment:
Variables:
PERL5_LAMBDA_PSGI_INVOKE_MODE: RESPONSE_STREAM
# (snip)
In this mode, the PSGI server accespts Delayed Response and Streaming Body.
my $app = sub {
my $env = shift;
return sub {
my $responder = shift;
$responder->([ 200, ['Content-Type' => 'text/plain'], [ "Hello World" ] ]);
};
};
An application MAY omit the third element (the body) when calling the responder.
my $app = sub {
my $env = shift;
return sub {
my $responder = shift;
my $writer = $responder->([ 200, ['Content-Type' => 'text/plain'] ]);
$writer->write("Hello World");
$writer->close;
};
};
Request ID
AWS::Lambda::PSGI injects the request id that compatible with Plack::Middleware::RequestId.
env->{'psgix.request_id'} # It is same value with $context->aws_request_id
LICENSE
The MIT License (MIT)
Copyright (C) ICHINOSE Shogo.
AUTHOR
ICHINOSE Shogo <shogo82148@gmail.com>