用 erlcloud 调用 AWS Lambda函数部署与调用的完整教程【免费下载链接】erlcloudAWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc)项目地址: https://gitcode.com/gh_mirrors/er/erlcloud在 Erlang 生态中erlcloud 是最流行的 AWS 客户端库而其中对 AWS Lambda 的支持更是让 Erlang 开发者无需切换语言就能完成函数部署与调用。这篇教程将带你从零开始掌握用 erlcloud 创建 Lambda 函数、更新代码、同步/异步调用函数的核心方法全程配有可直接运行的代码示例适合新手快速上手。为什么选择 erlcloud 操作 AWS Lambdaerlcloud 是一套纯 Erlang 实现的 AWS API 库覆盖 EC2、S3、SQS、DynamoDB、ELB 等数十项服务其中 Lambda 相关接口集中在 src/erlcloud_lambda.erl支持创建函数、删除函数、发布版本、管理别名、创建事件源映射等完整能力。使用它的优势非常明显纯 Erlang 实现与你的业务代码无缝集成不需要额外启动代理进程签名由库自动处理SigV4 请求签名、HTTP 传输全部封装在底层API 简洁通常一两行代码即可完成一次云端操作支持多账户通过aws_config配置对象可灵活切换不同 AWS 账户部署前的准备获取凭证与配置1. 获取 AWS 访问凭证在开始之前你需要准备好Access Key ID和Secret Access Key在 IAM 中创建一个具备 Lambda 执行权限的IAM Role ARNErlang/OTP 环境erlcloud 支持 OTP 19.3 到 27.1 的多个版本2. 获取 erlcloud 源码先获取项目源码git clone https://gitcode.com/gh_mirrors/er/erlcloud cd erlcloud make3. 两种配置方式erlcloud 提供两种配置方式你可以按需选择方式一进程字典全局配置适合简单任务erlcloud_lambda:configure(AKID, SecretKey).方式二配置对象适合多账户场景Config erlcloud_lambda:new(AKID, SecretKey), %% 也可以指定自定义 endpoint 和端口 Config2 erlcloud_lambda:new(AKID, SecretKey, lambda.cn-north-1.amazonaws.com.cn, 443).配置对象的定义位于 include/erlcloud_aws.hrl其中lambda_host默认指向lambda.us-east-1.amazonaws.com。用 erlcloud 部署 Lambda 函数准备函数代码erlcloud 支持两种代码来源通过erlcloud_lambda_code记录定义在 include/erlcloud_lambda.hrl描述S3 上的代码包指定s3Bucket和s3Key本地 ZIP 内容直接传入zipFile二进制-include(erlcloud_lambda.hrl). %% 方式一从 S3 加载代码 Code #erlcloud_lambda_code{s3Bucket my-bucket, s3Key my-function.zip}, %% 方式二直接传入 zip 二进制 Code2 #erlcloud_lambda_code{zipFile ZipBinary}.一键创建 Lambda 函数使用create_function/6即可完成部署核心参数包括代码、函数名、处理器、角色和运行时{ok, Result} erlcloud_lambda:create_function( Code, my_hello_fn, %% FunctionName index.handler, %% Handler arn:aws:iam::123456789012:role/lambda-basic, %% Role nodejs, %% Runtime [] %% Options如描述、超时、内存等 ).函数签名位于 src/erlcloud_lambda.erl返回的 JSON 中包含FunctionArn、CodeSha256等部署信息。还可在 Options 中传入{Timeout, 30}、{MemorySize, 256}等额外配置项。更新函数代码与配置当业务代码迭代后无需重建函数直接更新代码即可%% 更新代码并发布新版本 erlcloud_lambda:update_function_code(my_hello_fn, true, Code).修改函数的内存、超时等运行时配置使用update_function_configuration/6erlcloud_lambda:update_function_configuration( my_hello_fn, 新描述, %% Description index.handler, %% Handler 512, %% MemorySize undefined, %% Role保持不变传 undefined 60 %% Timeout秒 ).调用 AWS Lambda 函数同步与异步函数部署完成后最关键的一步就是调用它。erlcloud 的invoke系列函数见 src/erlcloud_lambda.erl支持多种调用模式。1. 最简单的同步调用%% 无参数调用 erlcloud_lambda:invoke(my_hello_fn). %% 携带 JSON payload 调用 Payload {\name\:\erlcloud\}, {ok, Result} erlcloud_lambda:invoke(my_hello_fn, Payload).2. 通过 Options 控制调用行为Options 中可以设置 AWS Lambda 的标准头实现同步/异步切换和日志控制%% 异步调用Event 模式不等待函数执行结果 erlcloud_lambda:invoke(my_hello_fn, [], [{X-Amz-Invocation-Type, Event}, {X-Amz-Log-Type, None}], Config). %% 同步调用并返回响应头包含执行日志 {ok, Headers, Data} erlcloud_lambda:invoke(my_hello_fn, [], [{show_headers, true}, {X-Amz-Log-Type, Tail}, {X-Amz-Invocation-Type, RequestResponse}], Config).调用类型说明调用类型X-Amz-Invocation-Type行为同步RequestResponse等待函数执行完成并返回结果异步Event立即返回后台执行干跑DryRun仅验证权限不真正执行3. 调用指定版本或别名通过Qualifier参数可调用特定版本或别名实现灰度发布erlcloud_lambda:invoke(my_hello_fn, Payload, [], v1, Config). %% 或调用别名 erlcloud_lambda:invoke(my_hello_fn, Payload, [], prod, Config).函数管理与清理查询、删除与版本控制列出所有函数erlcloud_lambda:list_functions(). %% 列出全部 erlcloud_lambda:list_functions(50, undefined). %% 分页每页 50 个获取函数详情与配置erlcloud_lambda:get_function(my_hello_fn). erlcloud_lambda:get_function_configuration(my_hello_fn).发布版本与管理别名%% 发布一个新版本 erlcloud_lambda:publish_version(my_hello_fn, [], Config). %% 为版本创建别名 erlcloud_lambda:create_alias(my_hello_fn, $LATEST, prod, [], Config).删除不再使用的函数erlcloud_lambda:delete_function(my_hello_fn). %% 删除指定版本 erlcloud_lambda:delete_function(my_hello_fn, v1, Config).常见问题与排错技巧1. 返回AccessDeniedException检查 IAM Role 是否绑定了 Lambda 执行策略AWSLambdaBasicExecutionRole以及凭证是否有lambda:CreateFunction、lambda:InvokeFunction权限。2. 函数代码一直部署失败确认 ZIP 包结构正确Node.js 要求入口文件在包根目录且Handler格式为文件名.导出函数名。3. 异步调用看不到结果异步调用默认不返回执行结果建议开启 CloudWatch Logs通过X-Amz-Log-Type: Tail查看同步调用日志或直接去控制台查看函数日志流。4. 想调试 API 请求细节erlcloud 底层 HTTP 逻辑在 src/erlcloud_httpc.erl可以在此设置调试级别观察完整请求与响应。总结通过本文你已经掌握了用 erlcloud 操作 AWS Lambda 的完整链路配置凭证 → 部署函数 → 更新代码 → 同步/异步调用 → 版本与别名管理 → 清理回收。整个模块的接口实现都在 src/erlcloud_lambda.erl 中配合 test/erlcloud_lambda_tests.erl 中的大量测试用例可以快速验证每个 API 的用法。现在就拉取 erlcloud 源码动手部署你的第一个 Erlang 驱动的 Lambda 函数吧【免费下载链接】erlcloudAWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc)项目地址: https://gitcode.com/gh_mirrors/er/erlcloud创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考