Google cloud storage CloudSqlInstanceExportOperator的问题
我正在尝试做一件看似简单的事情,但我现在无法让它工作。我想使用CloudComposer从SQL数据库收集数据并将其保存在GCS中。我有权限问题 这是我的DAG: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": {
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中写入,我正在尝试这样做。