aws-sam-cli(v1.91.0)でremote invokeが実行できない(ModuleNotFoundError)

2023.07.20

初めに

v1.91.0sam remote invokeがStep Functionsに対応しているような更新が含まれていたので動作確認をしていたところLambda関数のみの状況でも実行できない状況となりました。

$ sam remote invoke --debug
2023-07-19 19:04:36,898 | Config file location: /xxxx/sam-app-remote/samconfig.toml
2023-07-19 19:04:36,899 | Loading configuration values from [default.['remote', 'invoke'].parameters] (env.command_name.section) in config file at '/xxxx/sam-app-remote/samconfig.toml'...
2023-07-19 19:04:36,900 | Configuration values successfully loaded.
2023-07-19 19:04:36,900 | Configuration values are: {'stack_name': 'sam-app-remote'}
2023-07-19 19:04:36,900 | Converting provided --output option value to Enum
2023-07-19 19:04:36,935 | Using config file: samconfig.toml, config environment: default
2023-07-19 19:04:36,936 | Expand command line arguments to:
2023-07-19 19:04:36,936 | --stack_name=sam-app-remote --output=RemoteInvokeOutputFormat.TEXT
2023-07-19 19:04:36,937 | Telemetry endpoint configured to be https://aws-serverless-tools-telemetry.us-west-2.amazonaws.com/metrics
2023-07-19 19:04:36,984 | Telemetry endpoint configured to be https://aws-serverless-tools-telemetry.us-west-2.amazonaws.com/metrics
2023-07-19 19:04:36,986 | Unable to find Click Context for getting session_id.
2023-07-19 19:04:36,986 | Sending Telemetry: {'metrics': [{'commandRun': {'requestId': '467cc95e-b86a-4fa8-ac84-1afb86a1556e', 'installationId': '4e91b0f1-0a87-4da7-95f9-c9c6301a0dc0', 'sessionId': 'a02ab33d-bd73-4527-83ed-02333e1f4cf2',
'executionEnvironment': 'CLI', 'ci': False, 'pyversion': '3.11.4', 'samcliVersion': '1.91.0', 'awsProfileProvided': False, 'debugFlagProvided': True, 'region': '', 'commandName': 'sam remote invoke', 'metricSpecificAttributes':
{'projectType': 'CFN', 'gitOrigin': None, 'projectName': '8ecbd3c825736f3f328990f07cd180720320559db28602c0b469ea1f3a07bf20', 'initialCommit': None}, 'duration': 2, 'exitReason': 'ModuleNotFoundError', 'exitCode': 255}}]}
2023-07-19 19:04:36,988 | Sending Telemetry: {'metrics': [{'events': {'requestId': '0a143a3b-3302-48f2-88e2-fa5f3e39324b', 'installationId': '4e91b0f1-0a87-4da7-95f9-c9c6301a0dc0', 'sessionId': 'a02ab33d-bd73-4527-83ed-02333e1f4cf2',
'executionEnvironment': 'CLI', 'ci': False, 'pyversion': '3.11.4', 'samcliVersion': '1.91.0', 'metricSpecificAttributes': {'events': [{'event_name': 'SamConfigFileExtension', 'event_value': '.toml', 'thread_id':
'68cac41a737f4a7b9c50bcc9a948655e', 'time_stamp': '2023-07-19 10:04:36.898', 'exception_name': None}]}}}]}
2023-07-19 19:04:37,513 | HTTPSConnectionPool(host='aws-serverless-tools-telemetry.us-west-2.amazonaws.com', port=443): Read timed out. (read timeout=0.1)
2023-07-19 19:04:37,516 | HTTPSConnectionPool(host='aws-serverless-tools-telemetry.us-west-2.amazonaws.com', port=443): Read timed out. (read timeout=0.1)

Error: No module named 'mypy_boto3_lambda'
Traceback:
...

原因

v1.91.0での実装に起因するバグです。

#5458で追加された型指定に利用しているライブラリが開発用のrequirementのみに入っており本番には存在していないことが原因のようです。

解消方法

バグが解消されたバージョン(v1.92.0)以降にアップデートしてください。

執筆時点(2023/07/20 10:30頃)ではbrewの標準のFomulaはv1.91.0のままなので早急に対応したい場合はaws/tap/aws-sam-cliからインストールするかpip経由でインストールしたものを利用する形になります。

なお見つけるきっかけとなったremote invokeのStep Functions対応は内部だけの実装のマージコミットだけとなるのかまだコマンドから実際に実行することはできませんでした。

終わりに

バージョンを指定を行ってない場合昨日v1.91.0がリリースされてから今朝v1.92.0がリリースされるまでにインストールしてしまった方という極一部の方が受ける影響となるものとはなりますがご注意ください。

余談: 初めてパブリックリポジトリに対してissuesを上げました。

個人的な話ではあるのですが実はOSSのリポジトリに対してissuesを上げるのは今回が初めての経験でした。
(翌朝には返答どころか対応バージョンのリリースまで行われていて驚いてました)

英語→日本語は翻訳する機会は多いものの日本語→英語については機会がなくこんな表現で大丈夫かと心配になってしまったり、基本動作で起こると環境依存とか仕様を考えてしまいなかなか上げられなかったのですが、今回は違うなという雰囲気を感じたので上げるきっかけにできました。
(と言いつつもコメントつくまでは本当に環境依存ではないか?英語表現大丈夫か?とか心配してました)

実際に挙げてみると(プロジェクトによると思いますが)報告テンプレートがしっかりしてるので最低限埋めてもそれなりの形になりますし、これくらいの片言でも対応していただけたのでOSSに対するバグ報告に対する心理的な障壁がだいぶ薄くなった気がします。

SAMはリリースに気づいたのちできる限り早く新機能を試そうとしているのでバグか?と思うような現象に出会うことも時折あるので、今後もせめて報告だけでもできたらなと思っています。

次は機会があればプルリクを出してみると等で貢献をステップアップできればと思います。