使用Ansible从S3下载文件出现SyntaxError语法错误如何解决
错误产生原因
- 语法错误的根源是Python版本不兼容:报错中指向的
f'{quoted_key}={quoted_value}'是Python 3.6版本才引入的f-string语法,你当前环境使用的Python 2.7不支持该语法 - 你安装的boto3/botocore版本过高:新版botocore已经完全停止对Python 2.7的支持,底层代码使用了大量Python 3专属语法
- 你使用的amazon.aws集合版本与当前环境不兼容:新版AWS集合要求运行环境为Python 3.6+、Ansible 2.10+,与你当前的Ansible 2.9、Python 2.7环境不匹配
- 补充:你提供的任务配置存在YAML缩进错误,
amazon.aws.aws_s3字段的缩进层级应与name字段保持一致,否则也会触发执行错误,修正后的配置参考:
- name: Download file from S3 amazon.aws.aws_s3: aws_access_key: "XXXXXXXXXXXXXXXXXXXXX" aws_secret_key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx" bucket: "bucket-name" mode: "get" object: "file1" dest: "/home/centos/file1"
注:不要将密钥明文写在playbook中,可通过环境变量或Ansible Vault存储敏感信息
修复方案
你可以根据场景选择以下任意一种方案:
方案1(推荐,长期适配):升级运行环境到Python 3
- 卸载当前Python 2环境下安装的ansible、boto3、botocore
- 安装Python 3.6及以上版本,通过pip3安装对应依赖:
pip3 install ansible boto3 botocore - 在playbook或inventory中指定Python 3解释器:
vars: ansible_python_interpreter: /usr/bin/python3
- 重新运行playbook即可。
方案2(兼容现有老旧环境,无需大版本升级):降级依赖到支持Python 2.7的版本
- 降级boto3、botocore到最后支持Python 2.7的版本:
pip install boto3==1.17.112 botocore==1.20.112
- 降级amazon.aws集合到兼容Ansible 2.9、Python 2.7的1.x版本:
ansible-galaxy collection install amazon.aws:==1.5.1
- 重新运行playbook即可。
内容的提问来源于stack exchange,提问作者Kar Kostanyan
相关产品推荐
相关产品推荐

