AWS SAM CLI で AWS Lambda の Node.js 24 をデプロイしてみた

AWS SAM CLI で AWS Lambda の Node.js 24 をデプロイしてみた

2025.11.29

いわさです。

先日(2025 年 11 月 25 日)ついに AWS Lambda で Node.js 24 がサポートされましたね。

https://dev.classmethod.jp/articles/aws-lambda-node-js-24/

この AWS Lambda の Node.js 24 サポートですが、実は約 1 ヶ月前の 10 月 23 日には AWS の各ツールではなぜか対応版がリリースされていました。
例えば AWS CLI であれば 10 月 23 日の v1.42.58 でサポートされており、各種 SDK もそのタイミングで Lambda の Node.js 24 サポートが実装されています。

https://github.com/aws/aws-cli/commit/211684cef5465ec4dcfe41c6fb717903066fdffd

また、Slacklet や TreustOnCloud などサードパーティの AWS API 変更通知サイトでも 10月 24 日に Lambda API が Node.js 24 をサポートしたことを通知しています。

https://awsapichanges.info/archive/changes/6bedfc-lambda.html

https://awsapichanges.com/archive/changes/6bedfc-lambda.html

ただし、実際にはマネジメントコンソール上ではまだ Node.js 24 を使うことは出来ず、AWS CLI や SDK から関数を作成しようとしても Node.js 24 ランタイムの指定はサポートされていないというエラーが発生しつづけていました。

こんな形で CLI や SDK がなぜか先に対応して API としてはまだ使えないという謎な状況が続いていたのですが、AWS SAM CLI については先行で対応していませんでした。
そして 11 月 21 日のリリース v1.147.1 でついに Node.js 24 がサポートされています。

https://github.com/aws/aws-sam-cli/releases/tag/v1.147.1

マネジメントコンソール側もサポートされているので、今回は私が Lambda 関数のデプロイに使っている SAM CLI をアップデートし、Node.js 24 テンプレートを使ったデプロイを行いました。

845BD95C-5266-4DD6-BA96-3AD9BFECB859.png

SAM CLI アップデート

私は普段 macOS(Arm64)で検証しています。
多くの方は以下からインストーラーリンクにアクセスしてインストーラーをダウンロードしてアップデートしていると思います。

https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html

罠がひとつあったのですが、昨日ブログを執筆した時点では SAM CLI の Latest がなぜか 1.146.0 を指している状態で、Node.js 24 ランタイムが指定できない状態でした。初めての事象でした。(本日時点では治っていました)
なので、GitHub のリリースページから直接最新版のインストーラーを取得しています。
検証用に旧バージョンへのロールバックを含めてバージョンを指定したインストーラを取得したい場合は GitHub のリリースページを使ってみてください。

https://github.com/aws/aws-sam-cli/releases/tag/v1.148.0

image.png

バージョンは問題なしです。

% sam --version
SAM CLI, version 1.148.0

Node.js 24 ランタイムを指定する

AWS SAM CLI のバージョンアップが出来たので、あとはクイックスタートテンプレートを使って起動するだけです。
私の環境は ARM64 なので-a arm64を指定するか、デフォルトのx86の場合はコンテナを使ったビルドオプション--use-containerが必要です。

% sam init -a arm64
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 - GraphQLApi Hello World Example
        11 - Full Stack
        12 - Lambda EFS example
        13 - Serverless Connector Hello World Example
        14 - Multi-step workflow with Connectors
        15 - DynamoDB Example
        16 - Machine Learning
Template: 1
a
Use the most popular runtime and package type? (python3.14 and zip) [y/N]: 

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

Node.js 24 の指定が出来るようになりました。
作成された SAM テンプレート上でもRuntimenodejs24.xが指定されていますね。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  hoge1128nodejs

  Sample SAM Template for hoge1128nodejs
  
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs24.x
      Architectures:
        - arm64
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get

Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.${AWS::URLSuffix}/Prod/hello/"
  HelloWorldFunction:
    Description: "Hello World Lambda Function ARN"
    Value: !GetAtt HelloWorldFunction.Arn
  HelloWorldFunctionIamRole:
    Description: "Implicit IAM Role created for Hello World function"
    Value: !GetAtt HelloWorldFunctionRole.Arn

あとはsam buildsam deployをします。
マネジメントコンソールを確認してみると無事 Node.js 24 ランタイムの関数が作成できていました。

A04A3C0B-422B-46FF-AE0A-2C953E435357_1_105_c.jpeg

さいごに

本日は AWS SAM CLI で AWS Lambda の Node.js 24 をデプロイしてみました。
各種ツールや API の対応タイミングがバラバラで、個人的にかなり混乱したこの Lambda Node.js 24 周りのアップデートでしたが、無事 SAM CLI 側もサポートされてひととおり落ち着いた感じです。

Node.js 24 が先に一部ツールなどでアップデートのアナウンスがされていたのにもかかわらず Python 3.14 や Java 25 だけが先に SAM CLI でサポートされて、Node.js 24 は使えない状況で困っていたのですが、ついに使えるようになって安心しました。

https://dev.classmethod.jp/articles/sam-deploy-python314/

https://dev.classmethod.jp/articles/aws-lambda-java-25/

SAM CLI で Node.js 使っていた方は v1.147.1 以上にアップデートして使ってみてください。

この記事をシェアする

FacebookHatena blogX

関連記事