You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在buildspec.yml中运行Python脚本时AWS CodeBuild报YAML_FILE_ERROR

解决AWS CodeBuild buildspec.yml的YAML语法错误

问题根源

你遇到的YAML_FILE_ERROR是因为在echo命令里直接写Python代码时,YAML解析器把代码中的冒号、特殊结构误判为YAML的键值分隔符,触发语法解析失败。

可行解决办法

方法1:用Here Document将Python代码写入文件后执行

这是最稳妥的方式,避免YAML解析特殊字符的问题,步骤如下:
在buildspec.yml的build阶段命令中,通过Here Document把Python代码写入临时文件,再执行该脚本:

version: 0.2
phases:
  build:
    commands:
      - |
        cat > send_email.py << 'EOF'
        import os
        import boto3
        # 以下是你的SES发送邮件代码
        def send_email():
            ses_client = boto3.client('ses', region_name=os.environ['AWS_REGION'])
            # 补充你的邮件发送逻辑
            response = ses_client.send_email(
                Source='sender@example.com',
                Destination={'ToAddresses': ['recipient@example.com']},
                Message={
                    'Subject': {'Data': 'Test Email from CodeBuild'},
                    'Body': {'Text': {'Data': 'This is a test email.'}}
                }
            )
            print(response)
        if __name__ == '__main__':
            send_email()
        EOF
      - python send_email.py

注意:

  • 用'EOF'(单引号包裹)可以防止YAML解析时替换代码中的环境变量或特殊字符
  • 确保整个代码块的缩进和YAML结构匹配,统一用空格缩进(不能用制表符)

方法2:将Python脚本单独作为项目文件

把发送邮件的Python代码单独保存为send_email.py,放到CodeBuild构建的源码目录中,然后在buildspec.yml里直接执行:

version: 0.2
phases:
  build:
    commands:
      - python send_email.py

这种方式更利于代码维护,也完全规避了YAML解析多行代码的问题,推荐优先使用。

方法3:转义特殊字符(不推荐,仅适用于单行代码)

如果必须用echo单行写代码,需要对YAML敏感字符(比如冒号、大括号)进行转义,但多行代码转义会非常繁琐,示例:

- echo "import os\; import boto3\; ses_client = boto3.client('ses')" > send_email.py

这种方式仅适合极短的代码,不推荐用于完整的邮件发送脚本。

内容的提问来源于stack exchange,提问作者Yiffany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:32:10