添加带有gdrive范围的BigQuery连接?

时间:2018-08-08 19:04:39

标签: google-cloud-composer

我有一个外部Sheets表,我想通过Airflow中的BigQueryOperator查询。

我希望使用Cloud Composer服务帐户。

我通过Airflow UI使用以下参数创建了新连接:

Conn Id: bigquery_with_gdrive_scope
Conn Type: google_cloud_platform
Project Id: <my project id>
Keyfile path: <none>
Keyfile JSON: <none>
Scopes: https://www.googleapis.com/auth/bigquery,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive

在我的DAG中,我使用:BigQueryOperator(..., bigquery_conn_id='bigquery_with_gdrive_scope')

日志报告:Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.

任务属性显示:bigquery_conn_id bigquery_with_gdrive_scope

几乎bigquery_conn_id参数被忽略。

2 个答案:

答案 0 :(得分:2)

万一遇到同样的问题,除非提供gcloud authKeyfile path,否则(Composer 1.0.0,Airflow 1.9.0)会退回到Keyfile json。这将忽略任何范围参数。

Airflow的主分支解决了这个问题;但现在您必须为服务帐户生成一个凭证文件,并告诉Airflow这些凭证位于何处。

有逐步说明here

对于我的用例,我为airflow的服务帐户创建了一个密钥,并按如下所示建立了连接:

Conn Id: bigquery_with_gdrive_scope
Conn Type: google_cloud_platform
Project Id: <my project id>
Keyfile path: <none>
Keyfile JSON: <contents of keyfile for airflow service account>
Scopes: https://www.googleapis.com/auth/bigquery,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive

答案 1 :(得分:1)

添加GCP API范围(如在接受的答案中)对我们不起作用。经过大量调试后,GCP似乎具有在创建过程中分配给环境的“根”作用域,并且无法通过Airflow Connections覆盖。看来这只会影响GCP API范围。

作为参考,我们使用了composer 1.4.0airflow 1.10.0

如果要在Cloud Composer上添加与GCP有关的范围,则必须在create the environment时添加。事后便无法修改。

创建环境时,请确保添加https://www.googleapis.com/auth/drive。具体来说,您可以将以下标志添加到gcloud composer environment create命令中:

--oauth-scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive

最后,请不要忘记与服务帐户电子邮件共享文档(除非您已授予服务帐户域范围的访问权限)