【发布时间】:2021-04-05 19:30:10
【问题描述】:
我在气流作曲家 usign gcloud 命令中创建连接时遇到问题。问题是当尝试将值传递给 extra__google_cloud_platform__keyfile_dict 到 --conn_extra 时。从 dag 访问私有文件的值是错误的。此连接类型为 google_cloud_platform。命令示例的值为:
命令:
gcloud composer environments run COMPOSER --location LOCATION connections -- --add --conn_id=CONNECTION --conn_type=google_cloud_platform --conn_extra="{\"extra__google_cloud_platform__keyfile_dict\":{\"type\":\"service_account\",\"project_id\":\"PROJECT_ID\",\"private_key_id\":\"-----BEGIN PRIVATE KEY-----\\VALUE\\n-----END PRIVATE KEY-----\\n\"}",\"extra__google_cloud_platform__project\":\"PROJECT_ID\",\"extra__google_cloud_platform__scope\":\"SCOPE\"}"
错误日期:
[2021-04-05 17:53:46,046] {base_task_runner.py:113} INFO - Job 12399: Subtask Initial_query File "/usr/local/lib/airflow/airflow/contrib/hooks/gcp_api_base_hook.py", line 216, in _authorize
[2021-04-05 17:53:46,046] {base_task_runner.py:113} INFO - Job 12399: Subtask Initial_query credentials = self._get_credentials()
[2021-04-05 17:53:46,047] {base_task_runner.py:113} INFO - Job 12399: Subtask Initial_query File "/usr/local/lib/airflow/airflow/contrib/hooks/gcp_api_base_hook.py", line 164, in _get_credentials
[2021-04-05 17:53:46,047] {base_task_runner.py:113} INFO - Job 12399: Subtask Initial_query keyfile_dict = json.loads(keyfile_dict)
[2021-04-05 17:53:46,047] {base_task_runner.py:113} INFO - Job 12399: Subtask Initial_query File "/opt/python3.6/lib/python3.6/json/__init__.py", line 348, in loads
[2021-04-05 17:53:46,048] {base_task_runner.py:113} INFO - Job 12399: Subtask Initial_query 'not {!r}'.format(s.__class__.__name__))
[2021-04-05 17:53:46,048] {base_task_runner.py:113} INFO - Job 12399: Subtask Initial_query TypeError: the JSON object must be str, bytes or bytearray, not 'dict
我认为我在使用 scape 引号(' 或 ")时遇到了问题。我以不同的方式进行了测试,但仍然无法正常工作。最后我可以在此源中看到 gcp_api_base_hook。该 keyfile_dict 用于
keyfile_dict = json.loads(keyfile_dict)
我不知道出了什么问题。我希望你能帮助我。谢谢
【问题讨论】:
-
您似乎到处都在使用双引号
"。尝试用单引号'替换第一个和最后一个,以像这样在它们之间包含整个 json:--conn_extra='{\"extra__google_cloud_platform__keyfile_dict\":{\"type\":\"service_account\",\"project_id\":\"PROJECT_ID\",\"private_key_id\":\"-----BEGIN PRIVATE KEY-----\\VALUE\\n-----END PRIVATE KEY-----\\n\"}",\"extra__google_cloud_platform__project\":\"PROJECT_ID\",\"extra__google_cloud_platform__scope\":\"SCOPE\"}' -
感谢您的帮助@itroulli。我可以耐心地再次测试并工作。我将更新到在我的测试中有效的解决方案
标签: python airflow gcloud google-cloud-composer