いわさです。
今朝の 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 をお使いの方はバージョンアップの選択肢を意識していただくと良さそうですね。