SAM CLI の local invoke の関数名として指定できるフォーマットのパターンが増えました

SAM CLI の local invoke の関数名として指定できるフォーマットのパターンが増えました

2025.11.28

いわさです。

AWS SAM CLI がアップデートされまして、新しい v1.148.0 がリリースされています。
そのもう少し前になるのですが、v1.146.0 がリリースされたタイミングでいくつか新機能が追加されていました。

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

その中の次の機能がきになりました。

feat: Support all formats of function name in invoke (#8351)

sam local invokeで開発中の Lambda 関数をローカル実行できるわけですが、これまでは SAM テンプレート上の関数論理名を指定する必要がありました。
例えば次の SAM テンプレートと関数があったとします。

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

:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.13
      Architectures:
        - arm64
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: get

:

この時次のコマンドでローカル関数として実行できます。

% sam local invoke HelloWorldFunction          
Invoking app.lambda_handler (python3.13)                                                                                                                                                  
Local image is up-to-date                                                                                                                                                                 
Using local image: public.ecr.aws/lambda/python:3.13-rapid-arm64.                                                                                                                         

Mounting /Users/iwasa.takahito/work/hoge1110sam/hoge1110sam2/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container                                        
START RequestId: 794976ce-0fe3-4f46-9a77-8f554a790c25 Version: $LATEST
END RequestId: 284b9397-c0a5-40cb-a1b8-bddf996c0d6b
REPORT RequestId: 284b9397-c0a5-40cb-a1b8-bddf996c0d6b  Init Duration: 0.03 ms  Duration: 47.37 ms      Billed Duration: 48 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}

ただし、このsam local invokeは ARN 形式やエイリアスを指定した形式ではエラーになります。

% sam local invoke arn:aws:lambda:ap-northeast-1:123456789012:function:HelloWorldFunction
arn:aws:lambda:ap-northeast-1:123456789012:function:HelloWorldFunction not found. Possible options in your template: ['HelloWorldFunction']                                               
Error: Function arn:aws:lambda:ap-northeast-1:123456789012:function:HelloWorldFunction not found in template
% sam local invoke 123456789012:function:HelloWorldFunction                              
123456789012:function:HelloWorldFunction not found. Possible options in your template: ['HelloWorldFunction']                                                                             
Error: Function 123456789012:function:HelloWorldFunction not found in template
% sam local invoke HelloWorldFunction:hogeAlias                                          
HelloWorldFunction:hogeAlias not found. Possible options in your template: ['HelloWorldFunction']                                                                                         
Error: Function HelloWorldFunction:hogeAlias not found in template

この 8351 のイシューの大元は次のイシューでして、どうやら外部システムによっては実際のリモート関数と同じ ARN 形式やバージョンを指定した形式で呼び出せるようにする必要があるのではないかという意見です。なるほど。

https://github.com/aws/aws-sam-cli/issues/8289

私自身はこれまで外部システムから SAM ローカル関数を ARN 形式で実行する場合を経験したことがないのですが、今後使うこともあるかもしれないので今回最新バージョンでの挙動を確認してみました。

最新バージョンで色々なパターンを試してみる

事前に SAM CLI をブログ執筆時点の最新バージョン v1.146.0 にアップデートしておきます。

% sam --version                                                            
SAM CLI, version 1.146.0

先程の旧バージョンではエラーになった ARN 形式やエイリアスを指定した形式などを試してみましょう。

% sam local invoke arn:aws:lambda:ap-northeast-1:123456789012:function:HelloWorldFunction                          
Invoking app.lambda_handler (python3.13)                                                                                                                                                  
Local image is up-to-date                                                                                                                                                                 
Using local image: public.ecr.aws/lambda/python:3.13-rapid-arm64.                                                                                                                         

Mounting /Users/iwasa.takahito/work/hoge1110sam/hoge1110sam2/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container                                        
SAM_CONTAINER_ID: 06a9c8611083b92ffb006077154605424ef0846b0bb1a3b37b14b33937258001                                                                                                        
START RequestId: 6a92eb8c-e181-4d7a-a99d-808107446399 Version: $LATEST
END RequestId: 65bbdca7-a0cd-4f56-97d4-257b8eb2c8c9
REPORT RequestId: 65bbdca7-a0cd-4f56-97d4-257b8eb2c8c9  Init Duration: 0.06 ms  Duration: 55.80 ms      Billed Duration: 56 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
% sam local invoke 123456789012:function:HelloWorldFunction                                                        
Invoking app.lambda_handler (python3.13)                                                                                                                                                  
Local image is up-to-date                                                                                                                                                                 
Using local image: public.ecr.aws/lambda/python:3.13-rapid-arm64.                                                                                                                         

Mounting /Users/iwasa.takahito/work/hoge1110sam/hoge1110sam2/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container                                        
SAM_CONTAINER_ID: 2b1371aa6b3c09c9ae5d7b5cd0f9e56f152acd6a1d6c1da329449a56c2641c23                                                                                                        
START RequestId: ea59b0e6-f393-4741-b6be-c128ded0112c Version: $LATEST
END RequestId: 6238903e-f162-4fba-8f17-302fbb3af0b8
REPORT RequestId: 6238903e-f162-4fba-8f17-302fbb3af0b8  Init Duration: 0.10 ms  Duration: 65.03 ms      Billed Duration: 66 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
% sam local invoke HelloWorldFunction:hogeAlias                                                                    
Invoking app.lambda_handler (python3.13)                                                                                                                                                  
Local image is up-to-date                                                                                                                                                                 
Using local image: public.ecr.aws/lambda/python:3.13-rapid-arm64.                                                                                                                         

Mounting /Users/iwasa.takahito/work/hoge1110sam/hoge1110sam2/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container                                        
SAM_CONTAINER_ID: 545704df2555b0b7b73eefe8c99403418b4abcf75064158e74b477e761c303ca                                                                                                        
START RequestId: 02229219-172d-499f-9882-342ea5f79b63 Version: $LATEST
END RequestId: f5395ebd-c5a1-46fd-9fc4-032a9d984f64
REPORT RequestId: f5395ebd-c5a1-46fd-9fc4-032a9d984f64  Init Duration: 0.02 ms  Duration: 45.63 ms      Billed Duration: 46 ms  Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}

なるほど、すべて成功しました。

リモート関数の ARN を指定してローカル INVOKE 出来るわけではない

ここで指定する ARN は実在の ARN というわけではなく、あくまでの ARN 形式であって内部的にはそこから正規表現で関数名を抽出して local invoke に使っているみたいです。
そのため、私が検証前に勘違いしていたのですが次のようにリモートデプロイした時の ARN を指定しても、関数名が違っている場合はエラーになります。

% sam deploy

:

Key                 HelloWorldFunction                                                                                                                                                
Description         Hello World Lambda Function ARN                                                                                                                                   
Value               arn:aws:lambda:ap-northeast-1:123456789012:function:hoge1110sam2-HelloWorldFunction-3kbm3KGveEQq                                                                  
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Successfully created/updated stack - hoge1110sam2 in ap-northeast-1

% sam local invoke arn:aws:lambda:ap-northeast-1:123456789012:function:hoge1110sam2-HelloWorldFunction-3kbm3KGveEQq
arn:aws:lambda:ap-northeast-1:123456789012:function:hoge1110sam2-HelloWorldFunction-3kbm3KGveEQq not found. Possible options in your template: ['HelloWorldFunction']                     
Error: Function arn:aws:lambda:ap-northeast-1:123456789012:function:hoge1110sam2-HelloWorldFunction-3kbm3KGveEQq not found in template

さいごに

本日は SAM CLI の local invoke の関数名として指定できるフォーマットのパターンが増えたので試してみました。

これまで使っていた方に影響が出ることはないので意識しなくても大丈夫ですが、こういった指定の仕方もできるようになったと覚えておいても良いですね。
使うかわからないですけど。

この記事をシェアする

FacebookHatena blogX

関連記事