[アップデート] AWS Lambda で Ruby 3.3 が使えるようになったようなので、使えるか確認してみた
いわさです。
今朝の 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 をお使いの方はバージョンアップの選択肢を意識していただくと良さそうですね。