view release on metacpan or search on metacpan
# DESCRIPTION
This package makes it easy to run AWS Lambda Functions written in Perl.
## Use Pre-built Public Lambda Layers
1. Login to your AWS Account and go to the Lambda Console.
2. Create a new function and give it a name and an IAM Role.
3. For the "Runtime" selection, select **Provide your own bootstrap on Amazon Linux 2**.
4. In the "Designer" section of your function dashboard, select the **Layers** box.
5. Scroll down to the "Layers" section and click **Add a layer**.
6. Select the **Provide a layer version ARN** option, then copy/paste the Layer ARN for your region.
7. Click the **Add** button.
8. Click **Save** in the upper right.
9. Upload your code and start using Perl in AWS Lambda!
You can get the layer ARN in your script by using `get_layer_info`.
use AWS::Lambda;
my $info = AWS::Lambda::get_layer_info_al2023(
"5.38", # Perl Version
perl -MAWS::Lambda -e 'AWS::Lambda::print_runtime_arn_al2023("5.38", "us-east-1")'
perl -MAWS::Lambda -e 'AWS::Lambda::print_paws_arn_al2023("5.38", "us-east-1")'
The list of all layer ARNs is available on [AWS::Lambda::AL2023](https://metacpan.org/pod/AWS%3A%3ALambda%3A%3AAL2023).
## Use Pre-built Zip Archives
1. Login to your AWS Account and go to the Lambda Console.
2. Create a new layer and give it a name.
3. For the "Code entry type" selection, select **Upload a file from Amazon S3**.
4. In the "License" section, input [https://github.com/shogo82148/p5-aws-lambda/blob/main/LICENSE](https://github.com/shogo82148/p5-aws-lambda/blob/main/LICENSE).
5. Click **Create** button.
6. Use the layer created. For detail, see Use Prebuilt Public Lambda Layer section.
URLs for Zip archives are here.
`https://shogo82148-lambda-perl-runtime-$REGION.s3.amazonaws.com/perl-$VERSION-runtime-al2023-$ARCHITECTURE.zip`
## Use Pre-built Docker Images
Prebuilt Docker Images based on [https://gallery.ecr.aws/lambda/provided](https://gallery.ecr.aws/lambda/provided) are available.
You can pull from [https://gallery.ecr.aws/shogo82148/p5-aws-lambda](https://gallery.ecr.aws/shogo82148/p5-aws-lambda) or [https://hub.docker.com/r/shogo82148/p5-aws-lambda](https://hub.docker.com/r/shogo82148/p5-aws-lambda),
build your custom images and deploy them to AWS Lambda.
- [Cpanel::JSON::XS](https://metacpan.org/pod/Cpanel%3A%3AJSON%3A%3AXS)
- [JSON::MaybeXS](https://metacpan.org/pod/JSON%3A%3AMaybeXS)
- [YAML](https://metacpan.org/pod/YAML)
- [YAML::Tiny](https://metacpan.org/pod/YAML%3A%3ATiny)
- [YAML::XS](https://metacpan.org/pod/YAML%3A%3AXS)
- [Net::SSLeay](https://metacpan.org/pod/Net%3A%3ASSLeay)
- [IO::Socket::SSL](https://metacpan.org/pod/IO%3A%3ASocket%3A%3ASSL)
- [Mozilla::CA](https://metacpan.org/pod/Mozilla%3A%3ACA)
- [local::lib](https://metacpan.org/pod/local%3A%3Alib)
[Paws](https://metacpan.org/pod/Paws) is optional. See the "Paws SUPPORT" section.
## AWS X-Ray SUPPORT
[AWS X-Ray](https://aws.amazon.com/xray/) is a service that collects data about requests that your application serves.
You can trace AWS Lambda requests and sends segment data with pre-install module [AWS::XRay](https://metacpan.org/pod/AWS%3A%3AXRay).
use utf8;
use warnings;
use strict;
use AWS::XRay qw/ capture /;
author/update-aws-lambda-al2.pl view on Meta::CPAN
=item L<YAML::XS>
=item L<Net::SSLeay>
=item L<IO::Socket::SSL>
=item L<Mozilla::CA>
=back
L<Paws> is optional. See the "Paws SUPPORT" section.
=head1 LEGACY CUSTOM RUNTIME ON AMAZON LINUX 2
Previously, we provided the layers that named without CPU architectures.
These layers are compatible with x86_64 and only for backward compatibility.
We recommend to specify the CPU architecture.
These layers are NO LONGER MAINTAINED and WILL NOT RECEIVE ANY UPDATES.
=head2 Pre-built Legacy Public Lambda Layers for Amazon Linux 2
examples/cgi/WwwCounter/wwwcount.cgi view on Meta::CPAN
open(OUT, "> $g_file_date");
print(OUT "$now_date");
close(OUT);
}
#
# 仿¥ã®æ¥ä»ãå¾ã
#
sub getCurrentDateAndTime {
my($sec, $min, $hour, $mday, $mon, $year) = localtime(time());
my($now_date) = sprintf("%04d/%02d/%02d", 1900 + $year, $mon + 1, $mday);
my($now_time) = sprintf("%02d:%02d:%02d", $hour, $min, $sec);
return $now_date, $now_time;
}
#
# ã¢ã¯ã»ã¹ãã°ãåæåãã
#
sub clearAccessLog {
open(OUT, "> $g_file_access");
close(OUT);
}
lib/AWS/Lambda.pm view on Meta::CPAN
=item 2
Create a new function and give it a name and an IAM Role.
=item 3
For the "Runtime" selection, select B<Provide your own bootstrap on Amazon Linux 2>.
=item 4
In the "Designer" section of your function dashboard, select the B<Layers> box.
=item 5
Scroll down to the "Layers" section and click B<Add a layer>.
=item 6
Select the B<Provide a layer version ARN> option, then copy/paste the Layer ARN for your region.
=item 7
Click the B<Add> button.
=item 8
lib/AWS/Lambda.pm view on Meta::CPAN
=item 2
Create a new layer and give it a name.
=item 3
For the "Code entry type" selection, select B<Upload a file from Amazon S3>.
=item 4
In the "License" section, input L<https://github.com/shogo82148/p5-aws-lambda/blob/main/LICENSE>.
=item 5
Click B<Create> button.
=item 6
Use the layer created. For detail, see Use Prebuilt Public Lambda Layer section.
=back
URLs for Zip archives are here.
C<https://shogo82148-lambda-perl-runtime-$REGION.s3.amazonaws.com/perl-$VERSION-runtime-al2023-$ARCHITECTURE.zip>
=head2 Use Pre-built Docker Images
Prebuilt Docker Images based on L<https://gallery.ecr.aws/lambda/provided> are available.
lib/AWS/Lambda.pm view on Meta::CPAN
=item L<Net::SSLeay>
=item L<IO::Socket::SSL>
=item L<Mozilla::CA>
=item L<local::lib>
=back
L<Paws> is optional. See the "Paws SUPPORT" section.
=head2 AWS X-Ray SUPPORT
L<AWS X-Ray|https://aws.amazon.com/xray/> is a service that collects data about requests that your application serves.
You can trace AWS Lambda requests and sends segment data with pre-install module L<AWS::XRay>.
use utf8;
use warnings;
use strict;
use AWS::XRay qw/ capture /;
lib/AWS/Lambda/AL2.pm view on Meta::CPAN
=item L<YAML::XS>
=item L<Net::SSLeay>
=item L<IO::Socket::SSL>
=item L<Mozilla::CA>
=back
L<Paws> is optional. See the "Paws SUPPORT" section.
=head1 LEGACY CUSTOM RUNTIME ON AMAZON LINUX 2
Previously, we provided the layers that named without CPU architectures.
These layers are compatible with x86_64 and only for backward compatibility.
We recommend to specify the CPU architecture.
These layers are NO LONGER MAINTAINED and WILL NOT RECEIVE ANY UPDATES.
=head2 Pre-built Legacy Public Lambda Layers for Amazon Linux 2
t/10_lambda_next.t view on Meta::CPAN
'Lambda-Runtime-Aws-Request-Id' => '8476a536-e9f4-11e8-9739-2dfe598c3fcd',
'Lambda-Runtime-Deadline-Ms' => '1542409706888',
'Lambda-Runtime-Invoked-Function-Arn' => 'arn:aws:lambda:us-east-2:123456789012:function:custom-runtime',
'Lambda-Runtime-Trace-Id' => 'Root=1-5bef4de7-ad49b0e87f6ef6c87fc2e700;Parent=9a9197af755a6419;Sampled=1',
'Lambda-Runtime-Aws-Tenant-Id' => 'tenant-1234',
],
[ '{"key1":"a", "key2":"b", "key3":"c"}' ],
]
});
},
max_wait => 10, # seconds
);
my $bootstrap = AWS::Lambda::Bootstrap->new(
handler => "echo.handle",
runtime_api => "example.com",
task_root => "$FindBin::Bin/test_handlers",
runtime_api => "127.0.0.1:" . $app_server->port,
);
my ($payload, $context) = $bootstrap->lambda_next;
t/11_lambda_response.t view on Meta::CPAN
my $env = shift;
my $req = Plack::Request->new($env);
is $req->method, "POST", "http method";
my $body = $req->body;
my $response = decode_json(<$body>);
cmp_deeply $response, {key1=>"a", key2=>"b", key3=>"c"}, "response";
my $res = $req->new_response(200);
$res->finalize;
});
},
max_wait => 10, # seconds
);
my $bootstrap = AWS::Lambda::Bootstrap->new(
handler => "echo.handle",
runtime_api => "example.com",
task_root => "$FindBin::Bin/test_handlers",
runtime_api => "127.0.0.1:" . $app_server->port,
);
my $response = {key1=>"a", key2=>"b", key3=>"c"};
t/12_lambda_error.t view on Meta::CPAN
my $env = shift;
my $req = Plack::Request->new($env);
is $req->method, "POST", "http method";
my $body = $req->body;
my $response = decode_json(<$body>);
cmp_deeply $response, {errorMessage=>"some error ð¨", errorType=>'Error'}, "response";
my $res = $req->new_response(200);
$res->finalize;
});
},
max_wait => 10, # seconds
);
my $bootstrap = AWS::Lambda::Bootstrap->new(
handler => "echo.handle",
runtime_api => "example.com",
task_root => "$FindBin::Bin/test_handlers",
runtime_api => "127.0.0.1:" . $app_server->port,
);
my $error = "some error ð¨";
t/13_lambda_init_error.t view on Meta::CPAN
my $env = shift;
my $req = Plack::Request->new($env);
is $req->method, "POST", "http method";
my $body = $req->body;
my $response = decode_json(<$body>);
cmp_deeply $response, {errorMessage=>"some error ð¨", errorType=>'Error'}, "response";
my $res = $req->new_response(200);
$res->finalize;
});
},
max_wait => 10, # seconds
);
my $bootstrap = AWS::Lambda::Bootstrap->new(
handler => "echo.handle",
runtime_api => "example.com",
task_root => "$FindBin::Bin/test_handlers",
runtime_api => "127.0.0.1:" . $app_server->port,
);
my $error = "some error ð¨";
t/15_lambda_response_streaming.t view on Meta::CPAN
my $res = $req->new_response(200);
$res->content_type("application/json");
$res->body('{}');
$res->finalize;
};
$server->run($app, {
port => $port, host => '127.0.0.1',
});
},
max_wait => 10, # seconds
);
my $bootstrap = AWS::Lambda::Bootstrap->new(
handler => "streaming.handle",
runtime_api => "example.com",
task_root => "$FindBin::Bin/test_handlers",
runtime_api => "127.0.0.1:" . $app_server->port,
);
my $response = sub {
xt/21_mojo_custom_domain.t view on Meta::CPAN
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "JP",
"Host": "xxxxxx.example.com",
"upgrade-insecure-requests": "1",
"User-Agent": "curl/7.54.0",
"Via": "2.0 xxxxxxxxxxxx.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "A3DaibJs0GRv3WgyO-5jEtkSlUOG-BfqY1sQJwjFt5RoqHw0uPjo8w==",
"X-Amzn-Trace-Id": "Root=1-5cb40559-7f2aab91110daa905c11c3c9",
"X-Forwarded-For": "192.0.2.1, 192.0.2.2",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"multiValueHeaders": {
"Accept": [
xt/21_mojo_custom_domain.t view on Meta::CPAN
],
"CloudFront-Is-Tablet-Viewer": [
"false"
],
"CloudFront-Viewer-Country": [
"JP"
],
"Host": [
"xxxxxx.example.com"
],
"upgrade-insecure-requests": [
"1"
],
"User-Agent": [
"curl/7.54.0"
],
"Via": [
"2.0 xxxxxxxxxxxx.cloudfront.net (CloudFront)"
],
"X-Amz-Cf-Id": [
"A3DaibJs0GRv3WgyO-5jEtkSlUOG-BfqY1sQJwjFt5RoqHw0uPjo8w=="