AWS-Lambda
view release on metacpan or search on metacpan
author/update-aws-lambda-al.pl view on Meta::CPAN
#!/usr/bin/env perl
use v5.36;
use FindBin;
use Parallel::ForkManager;
use Capture::Tiny ('capture');
my $archs = ['x86_64', 'arm64'];
my $regions = +{ map {
my $arch = $_;
open my $fh, '<', "$FindBin::Bin/regions-$arch.txt" or die "$!";
my @regions = sort { $a cmp $b } map { chomp; $_; } <$fh>;
close($fh);
($arch => \@regions);
} @$archs };
my $versions = [
"5.38",
"5.36",
"5.34",
"5.32",
"5.30",
"5.28",
"5.26",
];
$versions = [sort {version->parse("v$b") <=> version->parse("v$a")} @$versions];
# get the list of layers on Amazon Linux 1
my $layers = {};
my $pm = Parallel::ForkManager->new(10);
$pm->run_on_finish(sub {
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) {
if ($stderr =~ /ValidationError/) {
# the stack doesn't exist; skip it.
$pm->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->finish;
next;
}
die "failed to execute aws cli";
}
my $paws_arn = $stdout;
chomp($runtime_arn);
chomp($paws_arn);
$pm->finish(0, [$version, $region, {
runtime_arn => $runtime_arn,
runtime_version => (split /:/, $runtime_arn)[-1],
paws_arn => $paws_arn,
paws_version => (split /:/, $paws_arn)[-1],
}]);
}
}
$pm->wait_all_children;
chomp(my $module_version = `cat $FindBin::Bin/../META.json | jq -r .version`);
my $latest_perl = $versions->[0];
my $latest_perl_layer = $latest_perl =~ s/[.]/-/r;
my $latest_runtime_arn = $layers->{$latest_perl}{'us-east-1'}{runtime_arn};
my $latest_runtime_version = $layers->{$latest_perl}{'us-east-1'}{runtime_version};
my $latest_paws_arn = $layers->{$latest_perl}{'us-east-1'}{paws_arn};
my $latest_paws_version = $layers->{$latest_perl}{'us-east-1'}{paws_version};
( run in 1.221 second using v1.01-cache-2.11-cpan-39bf76dae61 )