通过Lambda调用SSM执行EC2实例Python脚本提示命令未识别如何解决
问题原因
SSM Agent执行AWS-RunPowerShellScript文档时默认使用Local System账户运行命令,存在两种常见路径不生效的情况:
- 你配置的Python路径属于当前登录用户的用户级环境变量,Local System账户无法读取
- 就算配置了系统级环境变量,SSM Agent未重启的情况下不会加载更新后的环境变量
解决方案
方案1(最稳妥,无需修改实例配置):直接调用Python的绝对路径
- 登录EC2实例,在可正常执行Python的PowerShell窗口运行以下命令获取Python可执行文件的完整路径:
(Get-Command python).Source
假设返回结果为C:\Python311\python.exe,将你的Lambda代码中的命令替换为使用全路径调用即可:
response = ssm_client.send_command( InstanceIds=['i-*********'], DocumentName="AWS-RunPowerShellScript", Parameters={'commands': [f'set-location -path {path}; C:\\Python311\\python.exe myfile.py']}, )
方案2:修复环境变量加载问题
如果你需要直接使用python别名调用,按以下步骤操作:
- 确认你已经将Python安装目录(比如
C:\Python311)和Scripts目录(比如C:\Python311\Scripts)添加到系统环境变量的Path中,而非当前用户的Path - 登录EC2实例执行以下命令重启SSM Agent,加载最新的系统环境变量:
Restart-Service AmazonSSMAgent
排查方法
如果还是有问题,可以先通过SSM发送以下命令打印当前运行环境的PATH变量,确认Python路径是否已经被加载:
$env:PATH
内容的提问来源于stack exchange,提问作者Sairam Ravuri
相关产品推荐
相关产品推荐

