AWS-Lambda
view release on metacpan or search on metacpan
author/update-aws-lambda-al2023.pl view on Meta::CPAN
for my $version (@$versions_al2023) {
for my $arch (@$archs) {
for my $region (@{$regions->{$arch}}) {
say STDERR "loading $version in $region...";
$pm_al2023->start("$version/$region/$arch") and next;
my $runtime_stack = "lambda-$version-runtime-al2023-$arch" =~ s/[._]/-/gr;
my $paws_stack = "lambda-$version-paws-al2023-$arch" =~ s/[._]/-/gr;
my ($stdout, $stderr, $exit);
($stdout, $stderr, $exit) = capture {
system("aws --region $region cloudformation describe-stacks --output json --stack-name $runtime_stack | jq -r .Stacks[0].Outputs[0].OutputValue");
};
if ($exit != 0) {
if ($stderr =~ /ValidationError/) {
# the stack doesn't exist; skip it.
$pm_al2023->finish;
next;
}
die "failed to execute aws cli";
}
my $runtime_arn = $stdout;
($stdout, $stderr, $exit) = capture {
system("aws --region $region cloudformation describe-stacks --output json --stack-name $paws_stack | jq -r .Stacks[0].Outputs[0].OutputValue");
};
if ($exit != 0) {
if ($stderr =~ /ValidationError/) {
# the stack doesn't exist; skip it.
$pm_al2023->finish;
next;
}
die "failed to execute aws cli";
}
my $paws_arn = $stdout;
chomp($runtime_arn);
chomp($paws_arn);
$pm_al2023->finish(0, [$version, $region, $arch, {
runtime_arn => $runtime_arn,
runtime_version => (split /:/, $runtime_arn)[-1],
paws_arn => $paws_arn,
paws_version => (split /:/, $paws_arn)[-1],
}]);
}
}
}
$pm_al2023->wait_all_children;
chomp(my $module_version = `cat $FindBin::Bin/../META.json | jq -r .version`);
my $latest_perl = $versions_al2023->[0];
my $latest_perl_layer = $latest_perl =~ s/[.]/-/r;
my $latest_runtime_arn = $layers_al2023->{$latest_perl}{'us-east-1'}{x86_64}{runtime_arn};
my $latest_runtime_version = $layers_al2023->{$latest_perl}{'us-east-1'}{x86_64}{runtime_version};
my $latest_paws_arn = $layers_al2023->{$latest_perl}{'us-east-1'}{x86_64}{paws_arn};
my $latest_paws_version = $layers_al2023->{$latest_perl}{'us-east-1'}{x86_64}{paws_version};
open my $fh, '>', "$FindBin::Bin/../lib/AWS/Lambda/AL2023.pm" or die "$!";
sub printfh :prototype($) {
my $contents = shift;
$contents =~ s/\@\@VERSION\@\@/$module_version/g;
$contents =~ s/\@\@LATEST_PERL\@\@/$latest_perl/g;
$contents =~ s/\@\@LATEST_PERL_LAYER\@\@/$latest_perl_layer/g;
$contents =~ s/\@\@LATEST_RUNTIME_ARN\@\@/$latest_runtime_arn/g;
$contents =~ s/\@\@LATEST_RUNTIME_VERSION\@\@/$latest_runtime_version/g;
$contents =~ s/\@\@LATEST_PAWS_ARN\@\@/$latest_paws_arn/g;
$contents =~ s/\@\@LATEST_PAWS_VERSION\@\@/$latest_paws_version/g;
print $fh $contents;
}
printfh(<<'EOS');
package AWS::Lambda::AL2023;
use 5.026000;
use strict;
use warnings;
our $VERSION = "@@VERSION@@";
EOS
print $fh "# This list is auto generated by authors/update-aws-lambda-al2023.pl; DO NOT EDIT\n";
print $fh "our \$LAYERS = {\n";
for my $version (@$versions_al2023) {
print $fh " '$version' => {\n";
for my $arch (@$archs) {
print $fh " '$arch' => {\n";
for my $region (@{$regions->{$arch}}) {
next unless $layers_al2023->{$version}{$region}{$arch}{runtime_arn};
print $fh <<EOS
'$region' => {
runtime_arn => "$layers_al2023->{$version}{$region}{$arch}{runtime_arn}",
runtime_version => $layers_al2023->{$version}{$region}{$arch}{runtime_version},
paws_arn => "$layers_al2023->{$version}{$region}{$arch}{paws_arn}",
paws_version => $layers_al2023->{$version}{$region}{$arch}{paws_version},
},
EOS
}
print $fh " },\n";
}
print $fh " },\n";
}
print $fh "};\n\n";
printfh(<<'EOS');
sub get_layer_info {
my ($version, $region, $arch) = @_;
$arch //= 'x86_64';
return $LAYERS->{$version}{$arch}{$region};
}
sub print_runtime_arn {
my ($version, $region, $arch) = @_;
$arch //= 'x86_64';
print $LAYERS->{$version}{$arch}{$region}{runtime_arn};
}
sub print_paws_arn {
my ($version, $region, $arch) = @_;
$arch //= 'x86_64';
print $LAYERS->{$version}{$arch}{$region}{paws_arn};
}
1;
__END__
=encoding utf-8
=head1 NAME
AWS::Lambda::AL2023 - AWS Lambda Custom Runtimes based on Amazon Linux 2023
=head1 SYNOPSIS
You can get the layer ARN in your script by using C<get_layer_info>.
use AWS::Lambda::AL2023;
my $info = AWS::Lambda::get_layer_info(
"@@LATEST_PERL@@", # Perl Version
"us-east-1", # Region
"x86_64", # Architecture ("x86_64" or "arm64", optional, the default is "x86_64")
);
say $info->{runtime_arn}; # @@LATEST_RUNTIME_ARN@@
say $info->{runtime_version}; # @@LATEST_RUNTIME_VERSION@@
say $info->{paws_arn} # @@LATEST_PAWS_ARN@@
say $info->{paws_version} # @@LATEST_PAWS_VERSION@@,
Or, you can use following one-liner.
perl -MAWS::Lambda -e 'AWS::Lambda::print_runtime_arn("@@LATEST_PERL@@", "us-east-1")'
perl -MAWS::Lambda -e 'AWS::Lambda::print_paws_arn("@@LATEST_PERL@@", "us-east-1")'
The list of all available layer ARN is here:
=over
EOS
for my $version (@$versions_al2023) {
print $fh "=item Perl $version\n\n=over\n\n";
for my $arch(@$archs) {
print $fh "=item $arch architecture\n\n=over\n\n";
for my $region (@{$regions->{$arch}}) {
next unless $layers_al2023->{$version}{$region}{$arch}{runtime_arn};
print $fh "=item C<$layers_al2023->{$version}{$region}{$arch}{runtime_arn}>\n\n";
}
print $fh "=back\n\n";
}
print $fh "=back\n\n";
}
printfh(<<'EOS');
=back
And Paws layers:
=over
EOS
for my $version (@$versions_al2023) {
print $fh "=item Perl $version\n\n=over\n\n";
for my $arch(@$archs) {
print $fh "=item $arch architecture\n\n=over\n\n";
for my $region (@{$regions->{$arch}}) {
next unless $layers_al2023->{$version}{$region}{$arch}{paws_arn};
print $fh "=item C<$layers_al2023->{$version}{$region}{$arch}{paws_arn}>\n\n";
}
print $fh "=back\n\n";
}
print $fh "=back\n\n";
}
printfh(<<'EOS');
=back
=head2 Use Pre-built Zip Archives
URLs for Zip archives are:
C<https://shogo82148-lambda-perl-runtime-$REGION.s3.amazonaws.com/perl-$VERSION-runtime-al2023-$ARCHITECTURE.zip>
And Paws:
C<https://shogo82148-lambda-perl-runtime-$REGION.s3.amazonaws.com/perl-$VERSION-paws-al2023-$ARCHITECTURE.zip>
=head2 Pre-installed modules
The following modules are pre-installed for convenience.
=over
=item L<AWS::Lambda>
=item L<AWS::XRay>
=item L<JSON>
=item L<Cpanel::JSON::XS>
=item L<JSON::MaybeXS>
=item L<YAML>
=item L<YAML::Tiny>
=item L<YAML::XS>
=item L<Net::SSLeay>
=item L<IO::Socket::SSL>
=item L<Mozilla::CA>
=back
L<Paws> is optional
=head1 SEE ALSO
=over
=item L<AWS::Lambda>
=item L<AWS::Lambda::Bootstrap>
=item L<AWS::Lambda::Context>
=item L<AWS::Lambda::PSGI>
=item L<Paws>
=item L<AWS::XRay>
( run in 0.345 second using v1.01-cache-2.11-cpan-5735350b133 )