
shogo82148/p5-aws-lambdaAWS::Lambda镜像基于lambci/lambda构建,旨在简化Perl脚本在AWS Lambda中的运行。通过预构建的Lambda层、Docker本地测试环境及配套工具,开发者可快速开发、部署和调试Perl语言的AWS Lambda函数,支持AWS ***请求追踪和Paws(Perl AWS SDK)调用AWS服务。
AWS::***模块,支持请求追踪和性能分析适用于需要在AWS Lambda中运行Perl代码的开发者,特别是:
创建Perl处理函数handler.pl:
perlsub handle { my ($payload, $context) = @_; return $payload; }
打包代码:
bashzip handler.zip handler.pl
使用AWS CLI创建Lambda函数:
bashaws --region "$REGION" --profile "$PROFILE" lambda create-function \ --function-name "hello-perl" \ --zip-file "fileb://handler.zip" \ --handler "handler.handle" \ --runtime provided.al2 \ --role arn:aws:iam::xxxxxxxxxxxx:role/service-role/lambda-custom-runtime-perl-role \ --layers "arn:aws:lambda:$REGION:445285296882:layer:perl-5-32-runtime-al2:1"
通过代码获取:
perluse AWS::Lambda; my $info = AWS::Lambda::get_layer_info_al2( "5.32", # Perl版本 "us-east-1", # 区域 ); say $info->{runtime_arn}; # 运行时层ARN say $info->{paws_arn}; # Paws SDK层ARN
通过命令行获取:
bash# 获取运行时层ARN perl -MAWS::Lambda -e 'AWS::Lambda::print_runtime_arn_al2("5.32", "us-east-1")' # 获取Paws层ARN perl -MAWS::Lambda -e 'AWS::Lambda::print_paws_arn_al2("5.32", "us-east-1")'
arn:aws:lambda:af-south-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:ap-east-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:ap-northeast-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:ap-northeast-2:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:ap-south-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:ap-southeast-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:ap-southeast-2:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:ca-central-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:eu-central-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:eu-south-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:eu-west-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:eu-west-2:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:eu-west-3:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:me-south-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:sa-east-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:us-east-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:us-east-2:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:us-west-1:445285296882:layer:perl-5-32-runtime-al2:1arn:aws:lambda:us-west-2:445285296882:layer:perl-5-32-runtime-al2:1bashdocker run --rm -v $(PWD):/var/task shogo82148/p5-aws-lambda:build-5.32.al2 \ cpanm --notest --local-lib extlocal --no-man-pages --installdeps .
bashdocker run --rm -v $(PWD):/var/task shogo82148/p5-aws-lambda:5.32.al2 \ handler.handle '{"some":"event"}'
通过AWS::***模块实现请求追踪:
perluse utf8; use warnings; use strict; use AWS::*** qw/ capture /; sub handle { my ($payload, $context) = @_; capture "myApp" => sub { capture "nested" => sub { # 业务逻辑... }; }; capture "another" => sub { # 业务逻辑... }; return; } 1;
Paws是Perl的AWS SDK,可通过预构建层快速集成。
bashaws --region "$REGION" --profile "$PROFILE" lambda create-function \ --function-name "hello-perl-paws" \ --zip-file "fileb://handler.zip" \ --handler "handler.handle" \ --runtime provided.al2 \ --role arn:aws:iam::xxxxxxxxxxxx:role/service-role/lambda-custom-runtime-perl-role \ --layers \ "arn:aws:lambda:$REGION:445285296882:layer:perl-5-32-runtime-al2:1" \ "arn:aws:lambda:$REGION:445285296882:layer:perl-5-32-paws-al2:1"
perluse Paws; my $s3 = Paws->service('S3'); my $buckets = $s3->ListBuckets(); return { buckets => [map { $_->Name } @{$buckets->Buckets}] };
bash# 安装依赖 docker run --rm -v $(PWD):/var/task shogo82148/p5-aws-lambda:build-5.32-paws.al2 \ cpanm --notest --local-lib extlocal --no-man-pages --installdeps . # 运行测试 docker run --rm -v $(PWD):/var/task shogo82148/p5-aws-lambda:5.32-paws.al2 \ handler.handle '{"some":"event"}'
将自定义Perl模块打包为Lambda层:
bash# 创建Some::Module层 docker run --rm \ -v $(PWD):/var/task \ -v $(PATH_TO_LAYER_DIR)/lib/perl5/site_perl:/opt/lib/perl5/site_perl \ shogo82148/p5-aws-lambda:build-5.32.al2 \ cpanm --notest --no-man-pages Some::Module # 打包层 cd $(PATH_TO_LAYER_DIR) && zip -9 -r $(PATH_TO_DIST)/some-module.zip .
提供基于旧版Amazon Linux(runtime=provided)的层,支持Perl 5.32/5.30/5.28/5.26,层ARN格式:
arn:aws:lambda:$REGION:445285296882:layer:perl-$VERSION-runtime:$VERSIONarn:aws:lambda:$REGION:445285296882:layer:perl-$VERSION-paws:$VERSIONMIT许可证(MIT)
版权所有 (C) Ichinose Shogo。
Ichinose Shogo <***>

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务