通过命令行将 GCP 凭据添加到气流
Add GCP credentials to airflow via command line
Airflow 允许我们通过命令行添加连接信息airflow connections。这有助于通过 ansible 或其他开发操作工具自动部署气流装置。
不清楚如何通过命令行将到 google 云平台(服务帐户)的连接添加到 ariflow。
airflow 1.9 之前的以下示例概述了如何使用 DAG 添加连接信息:https://gist.github.com/yu-iskw/42f9f0aa6f2ff0a2a375d43881e13b49
def add_gcp_connection(ds, **kwargs):
""""Add a airflow connection for GCP"""
new_conn = Connection(
conn_id=<CONNECTION_ID>,
conn_type='google_cloud_platform',
)
scopes = ['https://www.googleapis.com/auth/cloud-platform']
conn_extra = {
"extra__google_cloud_platform__scope": ",".join(scopes),
"extra__google_cloud_platform__project":
"<GCP_PROJECT_NAME>",
"extra__google_cloud_platform__key_path":
"<GCP_CREDENTIALS_ABSOLUTE_PATH.json>"
}
conn_extra_json = json.dumps(conn_extra)
new_conn.set_extra(conn_extra_json)
session = settings.Session()
session.add(new_conn)
session.commit()
从airflow 1.9向前一罐:
airflow connections -a \
--conn_id=<CONNECTION_ID> \
--conn_type=google_cloud_platform \
--conn_extra='{ "extra__google_cloud_platform__key_path":" '`
`'<GCP_CREDENTIALS_ABSOLUTE_PATH.json>", '`
`'"extra__google_cloud_platform__project": '`
`'"<GCP_PROJECT_NAME>", '`
`'"extra__google_cloud_platform__scope": '`
`'"https://www.googleapis.com/auth/cloud-platform"}'
自发布以来,已添加 Google 云连接的文档:https://airflow.apache.org/docs/apache-airflow-providers-google/stable/connections/gcp.html
作为使用 --conn_extra
的替代方法,您可以使用 conn_uri
,因为使用 --conn_extra
可能很难将值代入 json 字符串。例如:
# AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT='google-cloud-platform://'
# GCP_PROJECT='<your-gcp-project>'
airflow connections \
--add \
--conn_id '<CONNECTION_ID>' \
--conn_uri "${AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT}?extra__google_cloud_platform__project=${GCP_PROJECT}"
您可以根据需要在其中添加尽可能多的附加 uri 参数,以 &s 分隔。
另一个在 Airflow 2.2.5 中工作的更具可读性的示例。
这里是 JSON 文件 test.json:
{"test2_gcp_connection": {
"conn_type": "google_cloud_platform",
"description": null,
"host": null,
"login": null,
"password": null,
"schema": null,
"port": null,
"extra": "{ \"extra__google_cloud_platform__key_path\": \"/path/to/key.json\", \"extra__google_cloud_platform__project\": \"project_name\", \"extra__google_cloud_platform__scope\": \"https://www.googleapis.com/auth/cloud-platform\"}"}}
然后您可以使用命令:
airflow connections import test.json
您的 GCP 连接将被创建。
以类似的方式,您可以使用以下命令在名为 test.json 的文件中导出已创建的气流连接:
airflow connections export test.json
与第一个答案类似但更简化的另一种写法:
airflow connections add 'test_gcp_connection' --conn-type=google_cloud_platform --conn-extra='{ "extra__google_cloud_platform__key_path": "path/to/key.json", "extra__google_cloud_platform__project": "projectname", "extra__google_cloud_platform__scope": "https://www.googleapis.com/auth/cloud-platform"}'
Airflow 允许我们通过命令行添加连接信息airflow connections。这有助于通过 ansible 或其他开发操作工具自动部署气流装置。
不清楚如何通过命令行将到 google 云平台(服务帐户)的连接添加到 ariflow。
airflow 1.9 之前的以下示例概述了如何使用 DAG 添加连接信息:https://gist.github.com/yu-iskw/42f9f0aa6f2ff0a2a375d43881e13b49
def add_gcp_connection(ds, **kwargs):
""""Add a airflow connection for GCP"""
new_conn = Connection(
conn_id=<CONNECTION_ID>,
conn_type='google_cloud_platform',
)
scopes = ['https://www.googleapis.com/auth/cloud-platform']
conn_extra = {
"extra__google_cloud_platform__scope": ",".join(scopes),
"extra__google_cloud_platform__project":
"<GCP_PROJECT_NAME>",
"extra__google_cloud_platform__key_path":
"<GCP_CREDENTIALS_ABSOLUTE_PATH.json>"
}
conn_extra_json = json.dumps(conn_extra)
new_conn.set_extra(conn_extra_json)
session = settings.Session()
session.add(new_conn)
session.commit()
从airflow 1.9向前一罐:
airflow connections -a \
--conn_id=<CONNECTION_ID> \
--conn_type=google_cloud_platform \
--conn_extra='{ "extra__google_cloud_platform__key_path":" '`
`'<GCP_CREDENTIALS_ABSOLUTE_PATH.json>", '`
`'"extra__google_cloud_platform__project": '`
`'"<GCP_PROJECT_NAME>", '`
`'"extra__google_cloud_platform__scope": '`
`'"https://www.googleapis.com/auth/cloud-platform"}'
自发布以来,已添加 Google 云连接的文档:https://airflow.apache.org/docs/apache-airflow-providers-google/stable/connections/gcp.html
作为使用 --conn_extra
的替代方法,您可以使用 conn_uri
,因为使用 --conn_extra
可能很难将值代入 json 字符串。例如:
# AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT='google-cloud-platform://'
# GCP_PROJECT='<your-gcp-project>'
airflow connections \
--add \
--conn_id '<CONNECTION_ID>' \
--conn_uri "${AIRFLOW_CONN_GOOGLE_CLOUD_DEFAULT}?extra__google_cloud_platform__project=${GCP_PROJECT}"
您可以根据需要在其中添加尽可能多的附加 uri 参数,以 &s 分隔。
另一个在 Airflow 2.2.5 中工作的更具可读性的示例。
这里是 JSON 文件 test.json:
{"test2_gcp_connection": {
"conn_type": "google_cloud_platform",
"description": null,
"host": null,
"login": null,
"password": null,
"schema": null,
"port": null,
"extra": "{ \"extra__google_cloud_platform__key_path\": \"/path/to/key.json\", \"extra__google_cloud_platform__project\": \"project_name\", \"extra__google_cloud_platform__scope\": \"https://www.googleapis.com/auth/cloud-platform\"}"}}
然后您可以使用命令:
airflow connections import test.json
您的 GCP 连接将被创建。
以类似的方式,您可以使用以下命令在名为 test.json 的文件中导出已创建的气流连接:
airflow connections export test.json
与第一个答案类似但更简化的另一种写法:
airflow connections add 'test_gcp_connection' --conn-type=google_cloud_platform --conn-extra='{ "extra__google_cloud_platform__key_path": "path/to/key.json", "extra__google_cloud_platform__project": "projectname", "extra__google_cloud_platform__scope": "https://www.googleapis.com/auth/cloud-platform"}'