[アップデート]Serverless FrameworkがLambda 関数URLの新しい認証モデルに対応しました
はじめに
先日、Lambda 関数URLの認証モデルが変更になった旨の記事を公開しました。
AWS SAMでは既に変更に追従している旨は上記の記事でもご紹介しましたが、Serverless Frameworkでも2025/11/05にリリースされた バージョン 4.23.0 で対応したようなので、確認してみます。

(参考)
確認してみた
リソースの作成
ディレクトリ構成は以下の通りです。
.
├── handler
│ └── lambda_functions_url.py
├── package.json
└── serverless.yml
package.json は以下の通りです。
{
"dependencies": {
"serverless": "4.23.0"
},
"scripts": {
"deploy": "sls deploy --verbose",
"remove": "sls remove --verbose"
},
"name": "functions-url-sample"
}
Serverless Frameworkのバージョンを 4.23.0 で指定をしています。
serverless.yml は以下の通りです。
service: functions-url-sample
frameworkVersion: '4'
configValidationMode: error
licenseKey: ${ssm:<ライセンスキーのパス>}
provider:
name: aws
runtime: python3.11
stackName: ${self:service}
stage: ${env:ENV, 'dev'}
region: ap-northeast-1
deploymentBucket:
name: <バケット名>
package:
individually: true
patterns:
- '!handler/**'
- '!.git/**'
- '!.gitignore'
- '!.serverless'
- '!.serverless/**'
- '!README.md'
- '!package.json'
- '!serverless.yml'
- '!yarn.lock'
- '!node_modules'
- '!node_modules/**'
- '!__pycache__'
- '!package-lock.json'
functions:
MyLambdaFunction:
name: "uehara-functions-url-sample"
handler: handler/lambda_functions_url.lambda_handler
role: MyLambdaFunctionRole
runtime: python3.11
reservedConcurrency: 5
package:
patterns:
- 'handler/lambda_functions_url.py'
url:
cors:
allowCredentials: false
allowedMethods:
- GET
allowedOrigins:
- "*"
allowedHeaders:
- "*"
maxAge: 86400
resources:
Resources:
MyLambdaFunctionRole:
Type: AWS::IAM::Role
Properties:
RoleName: "uehara-functions-url-sample-lambda-role"
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
Service:
- lambda.amazonaws.com
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
上記ではServerless FrameworkのライセンスキーをSSM Parameter Storeから読み取るようにしていますが、ご自身の環境にあわせ適宜ご変更下さい。
デプロイに利用するバケット名についても同様に適宜変更下さい。
Lambda 関数URLに関しては、認証タイプを設定せず、GETリクエストを受け付けるようにしています。
冒頭で示したブログ記事と同様になりますが、Lambdaのスクリプトである handler/lambda_functions_url.py は以下の通りです。
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info(f"Event: {json.dumps(event)}")
return {"statusCode": 200, "body": "OK"}
受けたGETリクエストに対し200 OKを返すだけの単純なものです。
ファイルの用意ができたら、まずパッケージのインストールを行います。
$ npm install
インストールが完了したら念のためServerless Frameworkのバージョンの確認を行います。
$ npx sls --version
4.23.0 になっていれば問題ありません。

バージョンが確認できたら、以下コマンドでデプロイを行います。
$ npm run deploy
コマンド実行後、以下のように表示されたらデプロイ完了です。

作成されたリソースの確認
作成されたLambda関数のリソースベースポリシーを確認すると、 lambda:InvokeFunctionUrl と lambda:InvokeFunction の両方が許可されていることが確認できました。

実際に curl コマンドを利用し、作成した関数URLにアクセスしてみます。

期待通りレスポンスが返って来ました。
まとめ
2025/10よりLambda 関数URLの認証モデルが変更されましたが、Serverless Frameworkにおきましてもバージョン 4.23.0から対応がされています。
参考になりましたら幸いです。







