view release on metacpan or search on metacpan
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
"us-east-1", # Region
"x86_64", # Architecture ("x86_64" or "arm64", optional, the default is "x86_64")
);
say $info->{runtime_arn}; # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-38-runtime-al2023-x86_64:1
say $info->{runtime_version}; # 1
say $info->{paws_arn} # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-38-paws-al2023-x86_64:1
say $info->{paws_version} # 1,
Or, you can use following one-liner.
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
author/pod-stripper/scripts/pod_stripper.pl view on Meta::CPAN
my @dirs;
if (@ARGV) {
@dirs = @ARGV;
} else {
@dirs = ('local/');
}
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, @dirs);
say "Original module size: $original_bytes";
say "Stripped to: $final_bytes";
say sprintf "Won %0.02f%%", (1- ($final_bytes / $original_bytes)) * 100;
exit;
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size);
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size) = lstat($_);
$original_bytes += $size;
if (-f $_ && /^.*\.pm\z/s) {
author/publish-perl-runtime-archives.pl view on Meta::CPAN
use File::Basename 'basename';
use JSON qw(decode_json encode_json);
my $force = ($ARGV[0] // '') eq '-f';
sub head_or_put {
my ($key, $zip) = @_;
my $object = decode_json(`aws --output json --region us-east-1 s3api head-object --bucket shogo82148-lambda-perl-runtime-us-east-1 --key "$key" || echo "{}"`);
my $current = $object->{Metadata}{md5chksum} || "";
if (!$current) {
say STDERR "Upload $zip to 3://shogo82148-lambda-perl-runtime-us-east-1/$key";
my $cmd = "aws --output json --region 'us-east-1' s3api put-object --bucket 'shogo82148-lambda-perl-runtime-us-east-1' --key '$key' --body '$zip'";
say STDERR "Executing: $cmd";
if ($force) {
$object = decode_json(`$cmd`);
die "exit: $!" if $! != 0;
}
} else {
say STDERR "s3://shogo82148-lambda-perl-runtime-us-east-1/$key is already updated";
}
return $object;
}
sub run_command {
my @cmd = @_;
say STDERR "Executing: @cmd";
if ($force) {
my $code = system(@cmd);
die "exit: $code" if $! != 0;
}
}
sub publish {
my ($suffix, $arch, $arch_suffix) = @_;
$arch_suffix //= "-$arch";
author/publish-perl-runtime-archives.pl view on Meta::CPAN
head_or_put("$name/$sha256.zip", $zip);
my $metadata = encode_json({
url => "https://shogo82148-lambda-perl-runtime-us-east-1.s3.amazonaws.com/$name/$sha256.zip",
});
run_command("echo '$metadata' | aws --region 'us-east-1' s3 cp --content-type application/json - s3://shogo82148-lambda-perl-runtime-us-east-1/$name.json");
}
}
if ($force) {
say STDERR "FORCE TO DEPLOY";
} else {
say STDERR "DRY RUN";
}
publish("runtime-al2023", "x86_64");
publish("paws-al2023", "x86_64");
publish("runtime-al2023", "arm64");
publish("paws-al2023", "arm64");
1;
author/publish-perl-runtimes.pl view on Meta::CPAN
use File::Basename 'basename';
use JSON qw(decode_json);
my $force = ($ARGV[0] // '') eq '-f';
sub head_or_put {
my ($region, $key, $zip, $md5) = @_;
my $object = decode_json(`aws --output json --region "$region" s3api head-object --bucket "shogo82148-lambda-perl-runtime-$region" --key "$key" || echo "{}"`);
my $current = $object->{Metadata}{md5chksum} || "";
if ($current ne $md5) {
say STDERR "Upload $zip to 3://shogo82148-lambda-perl-runtime-$region/$key";
my $cmd = "aws --output json --region '$region' s3api put-object --bucket 'shogo82148-lambda-perl-runtime-$region' --key '$key' --body '$zip' --content-md5 '$md5' --metadata md5chksum='$md5'";
say STDERR "Executing: $cmd";
if ($force) {
$object = decode_json(`$cmd`);
die "exit: $!" if $! != 0;
}
} else {
say STDERR "$zip in s3://shogo82148-lambda-perl-runtime-$region/$key is already updated";
}
return $object;
}
sub run_command {
my @cmd = @_;
say STDERR "Executing: @cmd";
if ($force) {
my $code = system(@cmd);
die "exit: $code" if $! != 0;
}
}
sub publish {
my ($suffix, $arch, $arch_suffix) = @_;
$arch_suffix //= "-$arch";
my $pm = Parallel::ForkManager->new(10);
author/publish-perl-runtimes.pl view on Meta::CPAN
};
for my $zip(glob "$FindBin::Bin/../.perl-layer/dist/perl-*-$suffix-$arch.zip") {
chomp(my $md5 = `openssl dgst -md5 -binary "$zip" | openssl enc -base64`);
my $name = basename($zip, '.zip');
next unless $name =~ /^perl-([0-9]+)-([0-9]+)-/;
my $perl_version = "$1.$2";
my $stack = $perl_version =~ s/[.]/-/r;
for my $region(@$regions) {
$pm->start("$region/$perl_version") and next;
say STDERR "$region/$perl_version: START";
my $object = head_or_put($region, "perl-$stack-$suffix$arch_suffix.zip", $zip, $md5);
my $version = $object->{VersionId} // 'UNKNOWN';
my $stack_name = "lambda-$stack-$suffix$arch_suffix" =~ s/_/-/r;
say STDERR "deploying stack $stack_name in $region...";
run_command('aws', '--region', $region, 'cloudformation', 'deploy',
'--stack-name', $stack_name,
'--template-file', "$FindBin::Bin/cfn-layer-$suffix-$arch.yml",
'--parameter-overrides', "PerlVersion=$perl_version", "Name=perl-$stack-$suffix$arch_suffix", "ObjectVersion=$version");
say STDERR "$region/$perl_version: DONE";
$pm->finish(0);
}
}
$pm->wait_all_children;
}
if ($force) {
say STDERR "FORCE TO DEPLOY";
} else {
say STDERR "DRY RUN";
}
publish("runtime-al2023", "x86_64");
publish("paws-al2023", "x86_64");
publish("runtime-al2023", "arm64");
publish("paws-al2023", "arm64");
1;
author/update-aws-lambda-al.pl view on Meta::CPAN
my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $data) = @_;
return unless $data;
my ($version, $region, $arn) = @$data;
return unless $version && $region && $arn;
$layers->{$version} //= {};
$layers->{$version}{$region} = $arn;
});
for my $version (@$versions) {
for my $region (@{$regions->{x86_64}}) {
say STDERR "loading $version in $region...";
$pm->start("$version/$region") and next;
my $runtime_stack = "lambda-@{[ $version =~ s/[.]/-/r ]}-runtime";
my $paws_stack = "lambda-@{[ $version =~ s/[.]/-/r ]}-paws";
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) {
author/update-aws-lambda-al.pl view on Meta::CPAN
=head1 SYNOPSIS
You can get the layer ARN in your script by using C<get_layer_info>.
use AWS::Lambda::AL;
my $info = AWS::Lambda::AL::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::AL::print_runtime_arn("@@LATEST_PERL@@", "us-east-1")'
perl -MAWS::Lambda -e 'AWS::Lambda::AL::print_paws_arn("@@LATEST_PERL@@", "us-east-1")'
The list of all available layer ARN is:
=over
author/update-aws-lambda-al2.pl view on Meta::CPAN
return unless $data;
my ($version, $region, $arn) = @$data;
return unless $version && $region && $arn;
$layers_al2_x86_64->{$version} //= {};
$layers_al2_x86_64->{$version}{$region} = $arn;
});
for my $version (@$versions_al2) {
for my $region (@{$regions->{x86_64}}) {
say STDERR "loading $version in $region...";
$pm_al2_x86_64->start("$version/$region") and next;
my $runtime_stack = "lambda-$version-runtime-al2" =~ s/[._]/-/gr;
my $paws_stack = "lambda-$version-paws-al2" =~ 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) {
author/update-aws-lambda-al2.pl view on Meta::CPAN
my ($version, $region, $arch, $arn) = @$data;
return unless $version && $region && $arch && $arn;
$layers_al2->{$version} //= {};
$layers_al2->{$version}{$region} //= {};
$layers_al2->{$version}{$region}{$arch} = $arn;
});
for my $version (@$versions_al2) {
for my $arch (@$archs) {
for my $region (@{$regions->{$arch}}) {
say STDERR "loading $version in $region...";
$pm_al2->start("$version/$region/$arch") and next;
my $runtime_stack = "lambda-$version-runtime-al2-$arch" =~ s/[._]/-/gr;
my $paws_stack = "lambda-$version-paws-al2-$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) {
author/update-aws-lambda-al2.pl view on Meta::CPAN
=head1 SYNOPSIS
You can get the layer ARN in your script by using C<get_layer_info>.
use AWS::Lambda::AL2;
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
author/update-aws-lambda-al2023.pl view on Meta::CPAN
my ($version, $region, $arch, $arn) = @$data;
return unless $version && $region && $arch && $arn;
$layers_al2023->{$version} //= {};
$layers_al2023->{$version}{$region} //= {};
$layers_al2023->{$version}{$region}{$arch} = $arn;
});
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) {
author/update-aws-lambda-al2023.pl view on Meta::CPAN
=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
lib/AWS/Lambda.pm view on Meta::CPAN
=back
You can get the layer ARN in your script by using C<get_layer_info>.
use AWS::Lambda;
my $info = AWS::Lambda::get_layer_info_al2023(
"5.38", # Perl Version
"us-east-1", # Region
"x86_64", # Architecture ("x86_64" or "arm64", optional, the default is "x86_64")
);
say $info->{runtime_arn}; # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-38-runtime-al2023-x86_64:1
say $info->{runtime_version}; # 1
say $info->{paws_arn} # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-38-paws-al2023-x86_64:1
say $info->{paws_version} # 1,
Or, you can use following one-liner.
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 L<AWS::Lambda::AL2023>.
=head2 Use Pre-built Zip Archives
lib/AWS/Lambda/AL.pm view on Meta::CPAN
=head1 SYNOPSIS
You can get the layer ARN in your script by using C<get_layer_info>.
use AWS::Lambda::AL;
my $info = AWS::Lambda::AL::get_layer_info(
"5.38", # Perl Version
"us-east-1", # Region
"x86_64", # Architecture ("x86_64" or "arm64", optional, the default is "x86_64")
);
say $info->{runtime_arn}; # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-38-runtime:1
say $info->{runtime_version}; # 1
say $info->{paws_arn} # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-38-paws:1
say $info->{paws_version} # 1,
Or, you can use following one-liner.
perl -MAWS::Lambda -e 'AWS::Lambda::AL::print_runtime_arn("5.38", "us-east-1")'
perl -MAWS::Lambda -e 'AWS::Lambda::AL::print_paws_arn("5.38", "us-east-1")'
The list of all available layer ARN is:
=over
lib/AWS/Lambda/AL2.pm view on Meta::CPAN
=head1 SYNOPSIS
You can get the layer ARN in your script by using C<get_layer_info>.
use AWS::Lambda::AL2;
my $info = AWS::Lambda::get_layer_info(
"5.42", # Perl Version
"us-east-1", # Region
"x86_64", # Architecture ("x86_64" or "arm64", optional, the default is "x86_64")
);
say $info->{runtime_arn}; # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-42-runtime-al2-x86_64:2
say $info->{runtime_version}; # 2
say $info->{paws_arn} # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-42-paws-al2-x86_64:1
say $info->{paws_version} # 1,
Or, you can use following one-liner.
perl -MAWS::Lambda -e 'AWS::Lambda::print_runtime_arn("5.42", "us-east-1")'
perl -MAWS::Lambda -e 'AWS::Lambda::print_paws_arn("5.42", "us-east-1")'
The list of all available layer ARN is here:
=over
lib/AWS/Lambda/AL2023.pm view on Meta::CPAN
=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(
"5.42", # Perl Version
"us-east-1", # Region
"x86_64", # Architecture ("x86_64" or "arm64", optional, the default is "x86_64")
);
say $info->{runtime_arn}; # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-42-runtime-al2023-x86_64:5
say $info->{runtime_version}; # 5
say $info->{paws_arn} # arn:aws:lambda:us-east-1:445285296882:layer:perl-5-42-paws-al2023-x86_64:3
say $info->{paws_version} # 3,
Or, you can use following one-liner.
perl -MAWS::Lambda -e 'AWS::Lambda::print_runtime_arn("5.42", "us-east-1")'
perl -MAWS::Lambda -e 'AWS::Lambda::print_paws_arn("5.42", "us-east-1")'
The list of all available layer ARN is here:
=over