[アップデート]Serverless FrameworkがLambda 関数URLの新しい認証モデルに対応しました

[アップデート]Serverless FrameworkがLambda 関数URLの新しい認証モデルに対応しました

2025.11.07

はじめに

先日、Lambda 関数URLの認証モデルが変更になった旨の記事を公開しました。

https://dev.classmethod.jp/articles/aws-lambda-function-url-change-policy/

AWS SAMでは既に変更に追従している旨は上記の記事でもご紹介しましたが、Serverless Frameworkでも2025/11/05にリリースされた バージョン 4.23.0 で対応したようなので、確認してみます。

20251107_sls_01
参考

確認してみた

リソースの作成

ディレクトリ構成は以下の通りです。

.
├── handler
│   └── lambda_functions_url.py
├── package.json
└── serverless.yml

package.json は以下の通りです。

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 は以下の通りです。

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 は以下の通りです。

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 になっていれば問題ありません。

20251107_sls_02

バージョンが確認できたら、以下コマンドでデプロイを行います。

$ npm run deploy

コマンド実行後、以下のように表示されたらデプロイ完了です。

20251107_sls_03

作成されたリソースの確認

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

20251107_sls_04

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

20251107_sls_05

期待通りレスポンスが返って来ました。

まとめ

2025/10よりLambda 関数URLの認証モデルが変更されましたが、Serverless Frameworkにおきましてもバージョン 4.23.0から対応がされています。

参考になりましたら幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事