[アップデート] AWS Lambda で Ruby 3.3 が使えるようになったようなので、使えるか確認してみた

2024.04.05

いわさです。

今朝の AWS CLI のアップデートはみなさんもうチェックしましたか?
AWS Lambda のマネージドランタイムで Ruby 3.3 がサポートされたっぽいです。アップデートアナウンスがまだ出ていないのですが。

公式ドキュメントで April 2024 リリース予定と紹介されており、いつ頃にリリースされるのかなぁと思っていましたが、予定どおりリリースされました。

Ruby 3.3 は 2023 年 12 月にリリースされた最新バージョンです。
公式リリースから約 4 ヶ月ほど遅れてリリースされた形ですね。

AWS CLI のアップデートにあわせて AWS SAM CLI の v1.114.0 でも Ruby 3.3 がサポートされるようになりました。対応が早い。

本日は Lambda コンソールと SAM CLI からそれぞれ Ruby 3.3 関数を作成してみました。

Lambda コンソールからの作成

特筆すべきことはあまりないのですが、関数作成のマネージドランタイム選択時に次のように Ruby 3.3 が選択可能になっています。
なお、従来の Ruby 3.2 も引き続き選択可能です。

初期作成されるコードは Ruby 3.2 の時と同じです。

SAM CLI を使って作成

SAM CLI の v1.114.0 以上にアップグレードした後sam initを実行します。
ランタイム選択画面で Ruby 3.3 が選択出来るようになっています。

% sam init
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Data processing
        3 - Hello World Example with Powertools for AWS Lambda
        4 - Multi-step workflow
        5 - Scheduled task
        6 - Standalone function
        7 - Serverless API
        8 - Infrastructure event management
        9 - Lambda Response Streaming
        10 - Serverless Connector Hello World Example
        11 - Multi-step workflow with Connectors
        12 - GraphQLApi Hello World Example
        13 - Full Stack
        14 - Lambda EFS example
        15 - DynamoDB Example
        16 - Machine Learning
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]: 

Which runtime would you like to use?
        1 - aot.dotnet7 (provided.al2)
        2 - dotnet8
        3 - dotnet6
        4 - go (provided.al2)
        5 - go (provided.al2023)
        6 - graalvm.java11 (provided.al2)
        7 - graalvm.java17 (provided.al2)
        8 - java21
        9 - java17
        10 - java11
        11 - java8.al2
        12 - nodejs20.x
        13 - nodejs18.x
        14 - nodejs16.x
        15 - python3.9
        16 - python3.8
        17 - python3.12
        18 - python3.11
        19 - python3.10
        20 - ruby3.3
        21 - ruby3.2
        22 - rust (provided.al2)
        23 - rust (provided.al2023)
Runtime: 20

What package type would you like to use?

:

テンプレートから関数含め一式が作成出来たら、ビルドとデプロイを行います。
ビルド環境と Ruby バージョンを合わせる必要がありますので注意してください。

以下はローカルの Ruby バージョンが 3.3 より低い場合に発生するエラー内容です。

% sam build
Starting Build use cache                                                                                                                                                             
Manifest file is changed (new hash: 2884769c4cf11ae189aea4172b7fd575) or dependency folder (.aws-sam/deps/eedf6e09-0570-412a-a68c-1c71291bda74) is missing for (HelloWorldFunction), 
downloading dependencies and copying/building source                                                                                                                                 
Building codeuri: /Users/iwasa.takahito/work/hoge0405ruby/hoge0405ruby/hello_world runtime: ruby3.3 metadata: {} architecture: x86_64 functions: HelloWorldFunction                  
 Running RubyBundlerBuilder:CopySource                                                                                                                                               
 Running RubyBundlerBuilder:RubyBundle                                                                                                                                               

Build Failed
Error: RubyBundlerBuilder:RubyBundle - Bundler Failed: Your Ruby version is 2.6.10, but your Gemfile specified ~> 3.3

次のようにビルド環境の Ruby バージョンを 3.3 にすることでビルドに成功し、デプロイすることが出来ました。

% ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
% sam build                    
Starting Build use cache                                                                                   

:

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
[*] Deploy: sam deploy --guided
% sam deploy
        Creating the required resources...
        Successfully created!

                Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-235izeblrrnq
                A different default S3 bucket can be set in samconfig.toml
                Or by specifying --s3-bucket explicitly.
        Uploading to 3c00c9cfcec212760c588a941738e302  209751 / 209751  (100.00%)

        Deploying with following values
        ===============================
        Stack name                   : hoge0405ruby
        Region                       : ap-northeast-1
        Confirm changeset            : True
        Disable rollback             : False
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisourcebucket-235izeblrrnq
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}

:

Successfully created/updated stack - hoge0405ruby in ap-northeast-1

マネジメントコンソールでも確認してみましょう。
ランタイムバージョンが Ruby 3.3 で作成されていますね。

今回は HelloWorld テンプレートを選択したので生成コードも最低限の感じです。
Gemfile にはhttpartyのみが定義されています。

2024.04.05 追記

その後アナウンスも出ました。Amazon Linux 2023 ランタイム上で構築されているみたいですね。

さいごに

本日は AWS Lambda で Ruby 3.3 が使えるようになった気配を感じたので実際にマネジメントコンソールや SAM CLI で使ってみました。

私自身は Ruby で Lambda 関数を作成する習慣があまり無いのですが、Ruby 3.2 をお使いの方はバージョンアップの選択肢を意識していただくと良さそうですね。