

# Ruby による Lambda 関数の構築
<a name="lambda-ruby"></a>

Ruby コードは AWS Lambda で実行できます。Lambda は、コードを実行してイベントを処理する Ruby 用の[ランタイム](lambda-runtimes.md)を提供します。コードは、管理している AWS Identity and Access Management (IAM) ロールの認証情報を使用して、AWS SDK for Ruby を含む環境で実行されます。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. [**Create function**] (関数の作成) をクリックします。

1. 以下の設定を行います。
   + **[関数名]**: 関数名を入力します。
   + **[ランタイム]**: **[Ruby 3.4]** を選択します。

1. [**関数の作成**] を選択してください。

コンソールで、`lambda_function.rb` という名前の単一のソースファイルを含む Lambda 関数が作成されます。このファイルを編集し、組み込みのコードエディタでファイルをさらに追加することができます。**[DEPLOY]** セクションで **[デプロイ]** を選択して関数のコードを更新します。次に、コードを実行するには、**[TEST EVENTS]** セクションで **[テストイベントを作成]** を選択します。

`lambda_function.rb` ファイルは、イベントオブジェクトおよびコンテキストオブジェクトを取得する `lambda_handler` という名前の関数をエクスポートします。これは、関数が呼び出されるときに Lambda が呼び出す[ハンドラー関数](ruby-handler.md)です。Ruby 関数のランタイムは、Lambda から呼び出しイベントを取得し、ハンドラーに渡します。関数設定で、ハンドラ値は `lambda_function.lambda_handler` です。

関数コードを保存すると、Lambda コンソールは .zip ファイルアーカイブのデプロイパッケージを作成します。コンソール外で (SDE を使用して) 関数コードを開発するときは、[デプロイパッケージを作成](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)
+ [AWS Lambda での Ruby の作成](ruby-tracing.md)

## ランタイムに含まれる SDK バージョン
<a name="ruby-sdk-included"></a>

Ruby ランタイムに含まれる AWS SDK のバージョンは、ランタイムバージョンと AWS リージョン によって異なります。AWS SDK for Ruby はモジュール式に設計されており、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
```

## もうひとつの Ruby JIT (YJIT) を有効にする
<a name="ruby-yjit"></a>

Ruby ランタイムは、軽量でミニマルな Ruby JIT コンパイラである [YJIT](https://docs.ruby-lang.org/en/master/jit/yjit_md.html) をサポートしています。YJIT はパフォーマンスを大幅に向上しますが、Ruby インタープリタよりも多くのメモリを消費します。Ruby on Rails のワークロードには YJIT が推奨されます。

YJIT は、デフォルトでは有効になっていません。Ruby 関数で YJIT を有効にするには、`RUBY_YJIT_ENABLE` 環境変数を `1` に設定します。YJIT が有効であることを確認するには、`RubyVM::YJIT.enabled?` メソッドの結果を出力します。

**Example — YJIT が有効になっていることの確認**  

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