Cloud Composer中使用S3FileTransformOperator执行脚本遇权限拒绝错误
解决Cloud Composer中S3FileTransformOperator执行shell脚本的权限拒绝问题
针对你遇到的PermissionError: [Errno 13] Permission denied错误,以下是几个可行的解决方法:
给脚本添加可执行权限
Cloud Composer同步GCS插件目录到本地时,可能会重置文件权限。可以在上传脚本到GCS的插件桶时,先执行chmod +x transform.sh,或者在DAG中先通过BashOperator设置权限:from airflow.operators.bash import BashOperator set_permission_task = BashOperator( task_id='set_script_permission', bash_command='chmod +x /home/airflow/gcs/plugins/some_plugin/scripts/transform.sh' )再将这个任务设置为S3FileTransformOperator任务的上游依赖。
通过bash命令间接执行脚本
跳过脚本自身的可执行权限检查,直接用bash解释器调用脚本。修改S3FileTransformOperator的command参数:from airflow.providers.amazon.aws.operators.s3_file_transform import S3FileTransformOperator transform_task = S3FileTransformOperator( task_id='run_transform_script', source_s3_key='s3://your-source-bucket/input.file', dest_s3_key='s3://your-dest-bucket/output.file', command='bash /home/airflow/gcs/plugins/some_plugin/scripts/transform.sh' )验证GCS插件桶的同步和权限
确认脚本已经成功同步到Cloud Composer的本地插件目录:- 进入Composer环境的Web UI,打开终端(Admin -> Terminal)
- 执行
ls -l /home/airflow/gcs/plugins/some_plugin/scripts/查看脚本是否存在及权限
同时检查GCS插件桶(gs://<composer-bucket>/plugins/)中脚本的存储对象ACL,确保Composer的服务账户有读取权限。
检查脚本内的路径权限
如果脚本中涉及读写其他本地路径,要确保Airflow运行用户(通常是airflow)对这些路径有相应权限,避免脚本内部触发权限错误被外层捕获。
内容的提问来源于stack exchange,提问作者spak
相关产品推荐
相关产品推荐

