Google cloud storage CloudSqlInstanceExportOperator的问题

Google cloud storage CloudSqlInstanceExportOperator的问题,google-cloud-storage,airflow,google-cloud-sql,google-cloud-composer,Google Cloud Storage,Airflow,Google Cloud Sql,Google Cloud Composer,我正在尝试做一件看似简单的事情,但我现在无法让它工作。我想使用CloudComposer从SQL数据库收集数据并将其保存在GCS中。我有权限问题 这是我的DAG: from airflow.contrib.operators.gcp_sql_operator import CloudSqlInstanceExportOperator from airflow import models import datetime export_body = { "exportContext": {

我正在尝试做一件看似简单的事情,但我现在无法让它工作。我想使用CloudComposer从SQL数据库收集数据并将其保存在GCS中。我有权限问题

这是我的DAG:

from airflow.contrib.operators.gcp_sql_operator import CloudSqlInstanceExportOperator
from airflow import models
import datetime

export_body = {
  "exportContext": {
    "kind": "sql#exportContext",
    "fileType": "csv",
    "uri": "gs://mybucket/export_sql.csv",
    "csvExportOptions": {
      "selectQuery": "select count(*) as number from some_table"
    }
  }
}

yesterday = datetime.datetime.combine(
    datetime.datetime.today(),
    datetime.datetime.min.time())

start_date = yesterday

JOB_NAME = "job_name"
default_args = {
    'start_date': start_date,
}


with models.DAG(JOB_NAME,
                schedule_interval="@hourly",
                default_args=default_args) as dag:

    sql_export_task = CloudSqlInstanceExportOperator(body=export_body,
                                                     project_id="project_id",
                                                     instance='instance',
                                                     task_id='sql_export_task')
    sql_export_task
我创建了一个具有某些角色的特定服务帐户: 云SQL管理 作曲工人 存储对象创建者

当我创建环境时,我指定这个帐户,然后将上面的DAG上传到相应的bucket中

我得到这个错误:

  "error": 
    "code": 403
    "message": "The service account does not have the required permissions for the bucket."
    "errors": 

        "message": "The service account does not have the required permissions for the bucket."
        "domain": "global"
        "reason": "notAuthorized





Traceback (most recent call last)
  File "/usr/local/lib/airflow/airflow/models/__init__.py", line 1491, in _run_raw_tas
    result = task_copy.execute(context=context
  File "/usr/local/lib/airflow/airflow/contrib/operators/gcp_sql_operator.py", line 643, in execut
    body=self.body
  File "/usr/local/lib/airflow/airflow/contrib/hooks/gcp_api_base_hook.py", line 247, in inner_wrappe
    return func(self, *args, **kwargs
  File "/usr/local/lib/airflow/airflow/contrib/hooks/gcp_sql_hook.py", line 310, in export_instanc
    'Exporting instance {} failed: {}'.format(instance, ex.content
AirflowException: Exporting instance prod failed: 
  "error": 
    "code": 403
    "message": "The service account does not have the required permissions for the bucket."
    "errors": 

        "message": "The service account does not have the required permissions for the bucket."
        "domain": "global"
        "reason": "notAuthorized
我认为存储对象创建者角色应该给我权限。 我是否应该向服务帐户添加其他角色?哪一个? 任何关于如何进行的建议或解决方案都将不胜感激。谢谢

编辑:我添加了存储管理员角色,并删除了此错误。 然而,似乎尽管我的DAG不工作

气流接口发送混合信号:任务没有状态:

但不知何故,这是一个成功

我检查了我的bucket,我希望创建的csv文件丢失了


任何关于如何进行的建议或解决方案都将不胜感激。谢谢

我正在调查你的拒绝许可问题,很高兴你解决了这个问题

我很好奇为什么CSV丢失了,我想这可能与它有关

如果文件类型为CSV,则可以使用此属性或使用优先于此属性的csvExportOptions.selectQuery属性指定一个数据库

使用CSV时,您必须通过使用
exportContext.databases[]
或在正在执行的查询中指定DB来指定DB


让我知道。

我在exportContext中添加了“`”数据库“:[“db_name”]```现在权限问题又回来了:(在我看到的文档中:“与GCS通信的不是Airflow中配置的服务帐户,而是特定云SQL实例的服务帐户。”因此,我正在研究尝试将云SQL角色添加到服务帐户。如果您遇到任何其他问题,请告诉我,我们可以进行调查。airflow服务帐户也是Cloud SQL Admin,我在列表中忘记了它。您是否已设法找到正确的权限?您现在可以向我们提供有关您的问题的更多信息吗?正如我在中告诉您的那样在第一条注释中,我指定了数据库。现在任务的状态为:“失败”。我的错误日志与之前的“消息”相同:“服务帐户没有bucket所需的权限。”文档建议应该允许云SQL实例服务帐户在GCS中写入,我正在尝试这样做。