ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 AWS SDK for PHP 构建 Lambda 无服务器应用:从入门场景到源码级解析

使用 AWS SDK for PHP 构建 Lambda 无服务器应用:从入门场景到源码级解析 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本篇技术指南以 aws-doc-sdk-examples 仓库中的 php/example_code/lambda 为例系统讲解如何用 AWS SDK for PHP v3 调用 AWS Lambda 的核心 API创建函数、上传代码、调用函数、更新配置、列出与删除函数。文中既给出可直接运行的实战命令也结合仓库源码逐行剖析每个 API 的调用参数与底层等待机制读者完成后可以独立编写一套创建 IAM 角色 → 部署 Lambda → 调用 → 更新 → 清理的完整 PHP 工作流。概览这套示例解决什么问题php/example_code/lambda目录展示的是使用 AWS SDK for PHP 操作 AWS Lambda 的完整代码集合。Lambda 允许你运行代码而无需预置或管理服务器示例通过一个交互式命令行场景把无服务器函数生命周期串起来从创建一个允许 Lambda 写入日志的 IAM 角色到上传处理函数代码、同步与异步调用、通过环境变量与新的 Handler 更新函数再到分页列出账户内全部函数最后删除函数与角色完成资源清理。代码集合结构如下均以仓库根目录为基准php/example_code/lambda/README.md本指南对应的说明文档php/example_code/lambda/GettingStartedWithLambda.php入门场景主程序php/example_code/lambda/LambdaService.php封装全部单一操作的服务类php/example_code/lambda/Runner.php命令行运行入口php/example_code/lambda/tests/LambdaTest.phpPHPUnit 集成测试php/example_code/lambda/lambda_handler_basic.zip、php/example_code/lambda/lambda_handler_calculator.zip两个已打包的 Python 处理函数php/example_code/lambda/composer.json依赖声明前提条件参考 php 目录总览 php/README.md运行这些示例需要PHP 8.1 或更高版本Composer用于依赖管理PHPUnit用于运行测试AWS SDK for PHPaws/aws-sdk-php配置好的 AWS 凭据默认走 SDK 的凭据提供链读取共享凭据/配置文件中的defaultprofile特别说明这些示例依赖仓库内的支撑文件IAM 服务类、AWS 工具类、Lambda 函数 zip 包因此需要克隆整个 aws-doc-sdk-examples 仓库并在仓库目录结构中运行而不是只下载单个文件。依赖清单见 php/example_code/lambda/composer.json核心是aws/aws-sdk-php ^3.209与guzzlehttp/guzzle ^7.0并通过 PSR-4 自动加载把Lambda\、Iam\、AwsUtilities\三个命名空间分别映射到../lambda/、../iam/、../aws_utilities/同时加载TestableReadline.php以支持交互式输入测试。代码示例地图仓库把这些示例分成三类对应 AWS 官方文档代码示例体系的三种形态Basics入门基础演示服务内的核心操作见 GettingStartedWithLambda.phpSingle actions单一操作展示如何单独调用服务函数集中在 LambdaService.phpScenarios场景通过多次调用实现具体业务任务包括一个跨服务场景 Create a serverless application to manage photos注意实际目录为 php 版 php/applications/photo_asset_manager单一操作源码解析所有单一操作都封装在Lambda\LambdaService类中它继承自AwsUtilities\AWSServiceClass。构造函数默认使用us-west-2区域、latestAPI 版本与defaultprofile 创建Aws\Lambda\LambdaClient也允许外部传入现成 client。下表汇总 7 个操作及其在源码中的位置与关键参数操作源码位置核心参数说明CreateFunctionLambdaService.php#L31CodeS3Bucket/S3Key、FunctionName、Role、Runtime、Handler从 S3 中的 zip 创建函数GetFunctionLambdaService.php#L50FunctionName获取函数详情含Configuration.StateListFunctionsLambdaService.php#L59MaxItems、Marker分页列出函数InvokeLambdaService.php#L75FunctionName、Payload、LogType调用函数并可选返回日志UpdateFunctionCodeLambdaService.php#L86FunctionName、S3Bucket、S3Key更新函数代码UpdateFunctionConfigurationLambdaService.php#L97FunctionName、Handler、Environment更新 Handler 与环境变量DeleteFunctionLambdaService.php#L108FunctionName删除函数下面逐项深入。createFunction从 S3 上传 zip 创建函数public function createFunction($functionName, $role, $bucketName, $handler) { // This assumes the Lambda function is in an S3 bucket. return $this-customWaiter(function () use ($functionName, $role, $bucketName, $handler) { return $this-lambdaClient-createFunction([ Code [ S3Bucket $bucketName, S3Key $functionName, ], FunctionName $functionName, Role $role[Arn], Runtime python3.9, Handler $handler.lambda_handler, ]); }); }关键点Code指定S3Bucket与S3Key表示函数代码以 zip 形式存放在 S3S3Key复用函数名作为对象键Role传入的是 IAM 角色的ArnRuntime固定为python3.9说明仓库配套的处理函数是 Python 运行时Handler拼接为$handler.lambda_handler即文件模块名.lambda_handler 函数名getFunction轮询函数状态public function getFunction($functionName) { return $this-lambdaClient-getFunction([ FunctionName $functionName, ]); }返回值中的Configuration.State可取Pending、Active、Failed等值场景代码正是靠轮询State Pending来等待函数创建完成。listFunctions分页列出函数public function listFunctions($maxItems 50, $marker null) { if (is_null($marker)) { return $this-lambdaClient-listFunctions([MaxItems $maxItems]); } return $this-lambdaClient-listFunctions([Marker $marker, MaxItems $maxItems]); }支持MaxItems默认 50与Marker两个分页参数场景代码通过NextMarker循环拉取全部函数。invoke同步调用并取回日志public function invoke($functionName, $params, $logType None) { return $this-lambdaClient-invoke([ FunctionName $functionName, Payload json_encode($params), LogType $logType, ]); }Payload由 PHP 数组json_encode而成是传给函数的入参LogType默认None传入Tail时返回结果中的LogResult是 Base64 编码的调用日志场景中通过base64_decode还原显示updateFunctionCode / updateFunctionConfiguration热更新public function updateFunctionCode($functionName, $s3Bucket, $s3Key) { return $this-lambdaClient-updateFunctionCode([ FunctionName $functionName, S3Bucket $s3Bucket, S3Key $s3Key, ]); } public function updateFunctionConfiguration($functionName, $handler, $environment ) { return $this-lambdaClient-updateFunctionConfiguration([ FunctionName $functionName, Handler $handler.lambda_handler, Environment $environment, ]); }前者只换代码包仍从 S3 取后者改运行时配置例如示例中把 Handler 切换为lambda_handler_calculator.lambda_handler并注入LOG_LEVELDEBUG环境变量。底层等待机制customWaiterLambdaService 继承的AwsUtilities\AWSServiceClass见 php/example_code/aws_utilities/AWSServiceClass.php提供了customWaiter默认最多重试 10 次、每次间隔 2 秒捕获AwsException后重试并可通过静态属性$maxWaitAttempts、$waitTime调整开发阶段可打开$verbose输出错误码以便排查根因。示例中的 createFunction、IAM 的 createRole/deleteRole 等调用都包裹了该等待器以应对 AWS 资源创建/删除的最终一致性延迟。入门场景GettingStartedWithLambda 全流程拆解README 的 Learn the basics 描述了 GettingStartedWithLambda.php 的完整流程源码实现精确对应以下步骤创建 IAM 角色用uniqid()生成唯一后缀命名角色test-lambda-role-uniqid信任策略指定Principal.Service lambda.amazonaws.com、Action sts:AssumeRole即允许 Lambda 服务代入该角色随后通过IAMService-attachRolePolicy挂载 AWS 托管策略AWSLambdaBasicExecutionRole见 php/example_code/iam/IAMService.php 的createRole/attachRolePolicy创建 S3 桶并上传代码新建amzn-s3-demo-bucket-uniqid桶把本地lambda_handler_basic.zip读入内存后putObject到桶中Key与函数名一致创建函数并等待就绪调用createFunction随后do…while轮询getFunction直到Configuration.State不再是Pending首次调用以[action increment, number 3]为入参invoke从返回Payload流中json_decode取出result更新代码把lambda_handler_calculator.zip重新上传到 S3调用updateFunctionCode轮询LastUpdateStatus ! Successful等待更新完成更新配置updateFunctionConfiguration切换到 calculator 的 Handler并设置环境变量LOG_LEVELDEBUG再次等待更新完成携带新参数调用传入[action plus, x 5, y 4]LogType Tail打印base64_decode后的执行日志再演示除以 0 时函数返回的错误信息列出账户内函数以MaxItems 5起步利用NextMarker循环合并所有函数名并逐行打印清理资源依次删除 Lambda 函数、IAM 角色listObjectsV2deleteObjects清空桶内对象后删除 S3 桶这段场景是交互式运行的通过控制台提示与输入逐步执行每个阶段都有中文友好的回显输出便于观察整个无服务器生命周期。运行示例安装依赖在php/example_code/lambda目录README 中的说明以仓库实际目录php/example_code/lambda为准执行composer install交互式运行php Runner.phpRunner.php 非常精简加载vendor/autoload.php与GettingStartedWithLambda.php后直接实例化并调用run()。测试驱动运行也可以用 PHPUnit 让选择项自动完成示例 README 给出的命令是..\..\vendor\bin\phpunit LambdaBasicsTests.php实际仓库中的测试文件为 php/example_code/lambda/tests/LambdaTest.php。该测试标注group integ集成测试组其testSingleActionCalls复刻了场景主流程创建桶、上传lambda_handler_calculator.zip、建角色并挂AWSLambdaBasicExecutionRole、createFunction、listFunctions打印、轮询State Pending、以plus/5/4参数invoke校验最后清理函数、角色、桶对象与桶。运行测试同样可能产生 AWS 费用。若要运行整个 PHP 示例集的测试可在php/example_code目录执行phpunit并用--group integ/--group unit与--testsuite testsuite-name过滤详见 php/README.md。场景延伸Photo Asset ManagerREADME 还列出一个跨服务场景 Create a serverless application to manage photosPHP 实现见 php/applications/photo_asset_manager。该应用让用户用标签管理照片图片上传到 S3 后触发 Lambda 函数调用 Amazon Rekognition 识别标签并把标签计数写入 DynamoDBS3 生命周期规则将对象转入 Intelligent-Tiering 节省成本用户按标签请求照片时系统把匹配图片打包成 zip并通过 Amazon SNS 发送下载链接。Lambda 在其中承担上传触发 标签处理的核心职责与本文介绍的函数创建、调用、更新能力直接衔接。费用与安全提醒运行示例或测试都可能在 AWS 账户产生费用详见 AWS Pricing 与 Free Tier 说明建议遵循最小权限原则只授予完成任务所需的最小权限代码并非在所有 AWS 区域测试过区域可用性请以 AWS Regional Services 为准场景代码在结束时主动执行deleteFunction、deleteRole与 S3 桶清理实际生产中应保证资源回收逻辑不遗漏附加资源Lambda Developer Guide 与 Lambda API ReferenceAWS Lambda 文档SDK for PHP 的 Lambda 命名空间 API 参考Aws\Lambda仓库内进一步阅读php/example_code/lambda/LambdaService.php、php/example_code/lambda/GettingStartedWithLambda.php、php/example_code/lambda/tests/LambdaTest.phpCopyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐从0到1掌握kube-state-metrics监控即代码Helm Chart开发实战指南从0到1掌握kube state metrics监控即代码Helm Chart开发实战指南 为什么需要监控即代码 你是否还在为Kubernetes集群监控配后端使用 AWS SDK for .NET 开发 AWS Lambda 代码示例入门、基础操作与实战场景使用 AWS SDK for .NET 开发 AWS Lambda 代码示例入门、基础操作与实战场景 导读 本文基于 dotnetv3/Lambda/READ示例工程教程后端RepViT架构解密repvit_m0_9.dist_300e_in1k如何融合CNN与ViT优势RepViT架构解密repvit_m0_9.dist_300e_in1k如何融合CNN与ViT优势 repvit_m0_9.dist_300e_in1k是一款上一篇3DS自制软件终极管理指南Universal-Updater完整教程下一篇RedeliveryPolicy重试策略详解如何用activemq4cq精确控制消息重发次数与延迟创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表