【问题标题】:"Google Cloud" connection not listed when adding new connection on Airflow Webserver在 Airflow Web 服务器上添加新连接时未列出“Google Cloud”连接
【发布时间】:2022-12-09 13:16:15
【问题描述】:

我安装了谷歌提供商

pip install 'apache-airflow[google]'  

也尝试过

pip install apache-airflow-providers-google

但是我在通过airflow webserver添加新连接时找不到Google Cloud选项,如下图:

我只找到了Google Dataprep

我已尝试多次重启网络服务器,但仍未列出 Google Cloud 选项。当我启动网络服务器时它返回此信息:

{providers_manager.py:215} INFO - Optional provider feature disabled when importing 'airflow.providers.google.leveldb.hooks.leveldb.LevelDBHook' from 'apache-airflow-providers-google' package

还尝试在 airflow.cfg 上设置 lazy_discover_providers = False 但没有成功。

任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: google-cloud-platform airflow airflow-webserver


    【解决方案1】:

    我对 MWAA 也有类似的问题。我有两个选项来创建连接:

    1. 使用Airflow CLI。为了简化使用 CLI 创建它,我建议使用 python 生成它,然后在 CLI 中运行脚本:
      import json
      from airflow.models.connection import Connection
      
      connection_extra = {
          "extra__google_cloud_platform__key_path":"path/to/key",
          "extra__google_cloud_platform__key_secret_name": "key_file_name_if_it_is_stored_in_secret_manager",
          "extra__google_cloud_platform__keyfile_dict":"{"
              ""type": "service_account","
              " "project_id": "<PROJECT_ID>","
              " "private_key_id": "<PRIVATE_KEY_ID>","
              " "private_key": "-----BEGIN PRIVATE KEY-----\n<PRIVATE_KEY>\n-----END PRIVATE KEY-----\n","
              " "client_email": "<CLIENT_EMAIL>","
              " "client_id": "<CLIENT_ID>","
              " "auth_uri": "https://<AUTH_URI>","
              " "token_uri": "https://<TOKEN_URI>","
              " "auth_provider_x509_cert_url": "https://<AUTH_CERT_URI>","
              " "client_x509_cert_url": "https://<CLIENT_CERT_URI>""
          "}",
          "extra__google_cloud_platform__num_retries":"5",
          "extra__google_cloud_platform__project":"PROJECR_NAME",
          "extra__google_cloud_platform__scope":"https://www.googleapis.com/auth/cloud-platform"
      }
      
      c = Connection(
          conn_id="gcp_conn",
          conn_type="google-cloud-platform",
          description="A connection to access GCP resources",
          extra=connection_extra
      )
      
      my_connection_json = {
          "conn_type": c.conn_type,
          "login": c.login,
          "password": c.password,
          "host":c.host,
          "port": c.port,
          "schema": c.schema,
          "extra": c.extra
      }
      
      print(f"airflow connections add '{c.conn_id}' --conn-json '{json.dumps(my_connection_json)}'")
      

      您可以在您的调度程序主机上运行此脚本,它将打印一个 Airflow CLI 命令,复制、粘贴并在终端中运行它以创建连接。

      1. 从类型为http的用户界面(您不应该设置所有变量),您可以检查这个doc
      {
         "extra__google_cloud_platform__project":"<POJECT NAME>",
         "extra__google_cloud_platform__key_path":"",
         "extra__google_cloud_platform__keyfile_dict":{
            "type":"service_account",
            "project_id":"<PROJECT ID>",
            "private_key_id":"<PRIVATE KEY ID>",
            "private_key":"-----BEGIN PRIVATE KEY-----
      <PRIVATE KEY>
      -----END PRIVATE KEY-----
      ",
            "client_email":"<CLIENT EMAIL>",
            "client_id":"<CLIENT ID>",
            "auth_uri":"https://<AUTH URI>",
            "token_uri":"https://<TOKEN URI>",
            "auth_provider_x509_cert_url":"https://<AUTH CERT URI>",
            "client_x509_cert_url":"https://<CLIENT CERT URI>"
         },
         "extra__google_cloud_platform__scope":"",
         "extra__google_cloud_platform__num_retries":"10"
      }
      

      您也可以使用环境变量创建它,但它不安全:

      export AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT='google-cloud-platform://?extra__google_cloud_platform__project=<PROJECT_NAMR>&extra__google_cloud_platform__scope=<SCOPE>&extra__google_cloud_platform__key_path=<KEY_PATH>&extra__google_cloud_platform__num_retries=10'
      
      

    【讨论】:

    • 嗨,侯赛因,非常感谢您的帮助!我也在探索 CLI,但目前还行不通。您有如何执行此操作的分步示例吗? (我应该在 CLI 中输入什么)from the UI with type http (you are not supposed to set all the variables), you can check this doc 我应该把你附加的 JSON 放在哪个文件上? “http 类型的用户界面”是什么意思?谢谢!
    • 通过 HTTP 类型,我的意思是您可以通过 UI 创建连接,而不是选择不在您的连接类型列表中的 Google Cloud,您可以选择 HTTP 并添加额外的字典。对于 CLI,我将在我的回答中添加一个示例。
    【解决方案2】:

    请尝试使用“airflow db upgrade”升级您的数据库。一旦完成,您就可以重新启动服务器。我在升级时遇到表创建错误,然后我不得不删除数据库并重新初始化它。显然这是不可取的,因为它会删除历史记录。如果您没有任何要保留的东西,您也可以检查一下。

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 2013-06-15
      • 2018-08-14
      • 2021-06-18
      • 2022-07-05
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      相关资源
      最近更新 更多