

# 使用 Ruby 构建 Lambda 函数
<a name="lambda-ruby"></a>

您可以在 Amazon Lambda 中运行 Ruby 代码。Lambda 可为 Ruby 提供[运行时](lambda-runtimes.md)，用于运行代码来处理事件。您的代码在包含 适用于 Ruby 的 Amazon SDK 的环境中运行，其中包含来自您管理的 Amazon Identity and Access Management (IAM) 角色的凭证。要了解有关 Ruby 运行时随附的 SDK 版本的更多信息，请参阅 [包含运行时的 SDK 版本](#ruby-sdk-included)。

Lambda 支持以下 Ruby 运行时：


| 名称 | 标识符 | 操作系统 | 弃用日期 | 阻止函数创建 | 阻止函数更新 | 
| --- | --- | --- | --- | --- | --- | 
|  Ruby 3.4  |  `ruby3.4`  |  Amazon Linux 2023  |   2028 年 3 月 31 日   |   2028 年 4 月 30 日   |   2028 年 5 月 31 日   | 
|  Ruby 3.3  |  `ruby3.3`  |  Amazon Linux 2023  |   2027 年 3 月 31 日   |   2027 年 4 月 30 日   |   2027 年 5 月 31 日   | 
|  Ruby 3.2  |  `ruby3.2`  |  Amazon Linux 2  |   2026 年 3 月 31 日   |   2026 年 8 月 31 日   |   Sep 30, 2026   | 

**创建 Ruby 函数**

1. 打开 [Lambda 控制台](https://console.amazonaws.cn/lambda)。

1. 选择 **Create function**（创建函数）。

1. 配置以下设置：
   + **函数名称**：输入函数名称。
   + **运行时**：选择 **Ruby 3.4**。

1. 选择**创建函数**。

控制台将使用名为 `lambda_function.rb` 的源文件创建一个 Lambda 函数。您可以在内置代码编辑器中编辑此文件并添加更多文件。在**部署**部分，选择**部署**以更新函数的代码。然后，要运行您的代码，请在**测试事件**部分中选择**创建测试事件**。

`lambda_function.rb` 文件会导出一个名为 `lambda_handler` 的函数，此函数将接受事件对象和上下文对象。这是 Lambda 在调用函数时调用的[处理函数](ruby-handler.md)。Ruby 函数运行时从 Lambda 获取调用事件并将其传递到处理程序。在函数配置中，处理程序值为 `lambda_function.lambda_handler`。

保存函数代码时，Lambda 控制台会创建一个 .zip 文件归档部署包。在控制台外部开发函数代码时（使用 IDE），您需要[创建部署程序包](ruby-package.md)将代码上载到 Lambda 函数。

除了调用事件之外，函数运行时还将上下文对象传递给处理程序。[上下文对象](ruby-context.md)包含有关调用、函数和执行环境的其他信息。环境变量中提供了更多信息。

您的 Lambda 函数附带了 CloudWatch Logs 日志组。函数运行时会将每次调用的详细信息发送到 CloudWatch Logs。该运行时会中继调用期间[函数输出的任何日志](ruby-logging.md)。如果您的函数返回错误，则 Lambda 将为错误设置格式，并将其返回给调用方。

**Topics**
+ [包含运行时的 SDK 版本](#ruby-sdk-included)
+ [再启用一个 Ruby JIT（YJIT）](#ruby-yjit)
+ [定义采用 Ruby 的 Lambda 函数处理程序](ruby-handler.md)
+ [使用 .zip 文件归档部署 Ruby Lambda 函数](ruby-package.md)
+ [使用容器镜像部署 Ruby Lambda 函数](ruby-image.md)
+ [使用 Ruby Lambda 函数的层](ruby-layers.md)
+ [使用 Lambda 上下文对象检索 Ruby 函数信息](ruby-context.md)
+ [Ruby Lambda 函数日志记录和监控](ruby-logging.md)
+ [在 Amazon Lambda 中检测 Ruby 代码](ruby-tracing.md)

## 包含运行时的 SDK 版本
<a name="ruby-sdk-included"></a>

Ruby 运行时中包含的 Amazon SDK 版本取决于运行时版本和您的 Amazon Web Services 区域。适用于 Ruby 的 Amazon SDK 采用模块化设计，并按照 Amazon Web Services 服务各自独立。要查找您正在使用的运行时中包含的特定服务 Gem 的版本号，请使用以下格式的代码创建 Lambda 函数。用您的代码使用的服务 Gem 的名称替换 `aws-sdk-s3` 和 `Aws::S3`。

```
require 'aws-sdk-s3'

def lambda_handler(event:, context:)
  puts "Service gem version: #{Aws::S3::GEM_VERSION}"
  puts "Core version: #{Aws::CORE_GEM_VERSION}"
end
```

## 再启用一个 Ruby JIT（YJIT）
<a name="ruby-yjit"></a>

Ruby 运行时系统支持 [YJIT](https://docs.ruby-lang.org/en/master/jit/yjit_md.html)，这是一款轻量级的极简 Ruby JIT 编译器。YJIT 提供的性能有显著提升，但消耗的内存也比 Ruby 解释器更多。建议将 YJIT 用于 Ruby on Rails 工作负载。

默认情况下，将不会启用 YJIT。要为 Ruby 函数启用 YJIT，请将 `RUBY_YJIT_ENABLE` 环境变量设置为 `1`。要确认已启用 YJIT，请打印 `RubyVM::YJIT.enabled?` 方法的结果。

**Example ：确认已启用 YJIT**  

```
puts(RubyVM::YJIT.enabled?())
# => true
```