

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

您可以在 AWS Lambda中執行 Ruby 程式碼。Lambda 提供用於執行程式碼來處理事件的 Ruby [執行期](lambda-runtimes.md)。您的程式碼會在包含 的環境中執行 適用於 Ruby 的 AWS SDK，其中包含您管理之 AWS 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 日  |  2026 年 9 月 30 日  | 

**建立 Ruby 函式**

1. 開啟 [Lambda 主控台](https://console.aws.amazon.com/lambda)。

1. 選擇**建立函數**。

1. 進行下列設定：
   + **函數名稱**：輸入函數名稱。
   + **執行時間**：選擇 **Ruby 3.4。**

1. 選擇**建立函數**。

主控台將建立一個 Lambda 函數，其具有名為 `lambda_function.rb` 的單一來源檔案。您可以使用內建的程式碼編輯器編輯該檔案並加入更多檔案。在 **DEPLOY** 區段中，選擇**部署**以更新函數的程式碼。然後，若要執行程式碼，請在**測試事件**區段中選擇**建立測試事件**。

`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)
+ [啟用 Yet Another 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)
+ [在 中檢測 Ruby 程式碼 AWS Lambda](ruby-tracing.md)

## 包含執行時期的 SDK 版本
<a name="ruby-sdk-included"></a>

Ruby 執行時間中包含的 AWS SDK 版本取決於執行時間版本和您的 AWS 區域。適用於 Ruby 的 AWS SDK 設計為模組化，並以 分隔 AWS 服務。若要尋找您使用之執行時期中包含的特定服務 Gem 的版本編號，請使用下列格式的程式碼建立 Lambda 函數。將 `aws-sdk-s3` 和 `Aws::S3` 取代為程式碼使用的服務 Gem 名稱。

```
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
```

## 啟用 Yet Another 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
```