执行SAM Package命令时YAML文件CORS参数被添额外引号的问题求助
解决SAM Package导致API Gateway CORS重复Origin头问题
问题根源
你遇到的Access-Control-Allow-Origin多值错误,本质是SAM CLI在执行sam package时,对模板中CORS配置参数的引号处理异常,导致生成的最终配置里出现嵌套引号(比如'''*'''),API Gateway解析后返回重复的Origin头。
解决步骤
1. 修正SAM模板的CORS配置写法
直接移除CORS参数的所有引号,用YAML原生字符串格式书写,SAM会自动正确处理转义:
Globals: Function: Timeout: 3 Api: Cors: AllowOrigin: * AllowHeaders: Content-Type AllowMethods: OPTIONS,POST,DELETE,GET,PUT
如果担心YAML解析特殊字符的问题,也可以只加一层单引号:
Globals: Function: Timeout: 3 Api: Cors: AllowOrigin: '*' AllowHeaders: 'Content-Type' AllowMethods: 'OPTIONS,POST,DELETE,GET,PUT'
注意:绝对不要使用多层引号(比如'''*'''),这会触发SAM的错误转义逻辑。
2. 升级SAM CLI到最新版本
老版本的SAM CLI存在引号处理的已知bug,执行对应命令升级到最新稳定版:
# pip安装的SAM pip install --upgrade aws-sam-cli # Homebrew安装的SAM(MacOS) brew upgrade aws-sam-cli
3. 手动修正打包后的模板(临时方案)
如果升级后问题仍存在,可在sam package完成后,找到生成的打包模板文件(通常是packaged.yaml),手动删除CORS参数中的多余引号,再执行sam deploy:
- 将
AllowOrigin: '''*'''修改为AllowOrigin: "*" - 同理修正
AllowHeaders和AllowMethods的引号格式
验证修复
部署完成后,打开浏览器开发者工具的网络面板,触发前端请求,查看响应头中的Access-Control-Allow-Origin,确认仅存在一个*值,CORS错误即可消失。
内容的提问来源于stack exchange,提问作者Joshua Foxworth
相关产品推荐
相关产品推荐

