命令 aws 在 logGroupName 记录创建导出任务错误 (InvalidParameterException)

Command aws logs create-export-task Error (InvalidParameterException) at logGroupName

我有一个 bash 脚本,我正在尝试执行

 aws logs create-export-task 

命令。 command 在 s3 存储桶中创建任务并在时间戳间隔内删除 cloudwatch 日志。

我的脚本还有一些变量,例如日志组名称,它需要作为命令中的选项参数

logGroup='/aws/lambda/lambda-name'

然后我在命令中传递:

createTaskLogs="aws logs create-export-task 
--log-group-name \"$logGroup\"  \
...

echo ${createTaskLogs}
eval ${createTaskLogs}

加上一些其他强制选项。

我得到的错误是:

 An error occurred (InvalidParameterException) when calling the CreateExportTask operation: 1 
validation error detected: Value 'C:/Program Files/Git/aws/lambda/lambda-name' at 'logGroupName' failed 
to satisfy constraint: Member must satisfy regular expression pattern: [\.\-_/#A-Za-z0-9]+

据我了解 bash 是将“/aws/lambda/lambda-name”值作为路径插入并将第一个斜杠转换为本地路径 C:// 。 在 bash 语言中有什么方法可以避免这种情况,或者是 aws logs 命令中的错误?

感谢以后的帮助。

一个解决方案是放置反斜杠而不使用引号:

logGroup='\/aws/lambda/lambda-name'
createTaskLogs="aws logs create-export-task 
--log-group-name $logGroup  \
...

反斜杠将阻止 bash 将“/aws/lambda/lambda-name”值作为路径插入并将第一个斜杠转换为本地路径 C://

更新

你能试试这个吗?

aws2(){ MSYS_NO_PATHCONV=1 python C:/Users/user/AppData/Local/Programs/Python/Python37/Scripts/aws "$@"; }
aws2 logs create-export-task ...

问题出在您使用 Git Bash 到 运行 命令。 Mingw 会将用作参数的 POSIX 路径转换为 ​​Win32 路径。参见 here

首先在路径前加上双正斜杠,然后在双引号内加上反斜杠 ("//aws\lambda\lambda-name") 应该可以防止这种情况发生,或者您可以按照讨论的方式设置 MSYS_NO_PATHCONV=1 here.

另一种解决方案是使用不同的 shell,例如 Windows Subsystem for Linux or Mobaxterm