GCP Cloud Composer:get_client_id.py 所需参数错误
GCP Cloud Composer: get_client_id.py error with required arguments
我对 GCP Cloud Composer 有疑问。
验证触发DAG的函数(工作流)
我想通过参考下面文章中的python代码来获取客户端ID。
https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/composer/rest/get_client_id.py
我在 运行 程序时遇到错误。
出现的错误如下。
usage: id.py [-h] project_id location composer_environment
id.py: error: the following arguments are required: project_id, location, composer_environment
错误的意思是argumentsproject_id,location,composer_environment不够用。
我明白意思,但是我很麻烦,因为无论我如何传递参数都会出现同样的错误。
下面是我尝试过的命令和代码的列表。
python3 id.py --project_id project_id --location location --composer_environment composer_environment
python3 id.py --project_id 'project_id' --location 'location' --composer_environment 'composer_environment'
python3 id.py --project_id --location --composer_environment
"""Get the client ID associated with a Cloud Composer environment."""
import argparse
def get_client_id(project_id, location, composer_environment):
# [START composer_get_environment_client_id]
import google.auth
import google.auth.transport.requests
import requests
import six.moves.urllib.parse
# Authenticate with Google Cloud.
# See: https://cloud.google.com/docs/authentication/getting-started
credentials, _ = google.auth.default(
scopes=['https://www.googleapis.com/auth/cloud-platform'])
authed_session = google.auth.transport.requests.AuthorizedSession(
credentials)
# project_id = 'YOUR_PROJECT_ID'
# location = 'us-central1'
# composer_environment = 'YOUR_COMPOSER_ENVIRONMENT_NAME'
environment_url = (
'https://composer.googleapis.com/v1beta1/projects/{}/locations/{}'
'/environments/{}').format(project_id, location, composer_environment)
composer_response = authed_session.request('GET', environment_url)
environment_data = composer_response.json()
airflow_uri = environment_data['config']['airflowUri']
# The Composer environment response does not include the IAP client ID.
# Make a second, unauthenticated HTTP request to the web server to get the
# redirect URI.
redirect_response = requests.get(airflow_uri, allow_redirects=False)
redirect_location = redirect_response.headers['location']
# Extract the client_id query parameter from the redirect.
parsed = six.moves.urllib.parse.urlparse(redirect_location)
query_string = six.moves.urllib.parse.parse_qs(parsed.query)
print(query_string['client_id'][0])
# [END composer_get_environment_client_id]
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('project_id', help='Your Project ID.')
parser.add_argument(
'location', help='Region of the Cloud Composer environent.')
parser.add_argument(
'composer_environment', help='Name of the Cloud Composer environent.')
args = parser.parse_args()
get_client_id(
args.project_id, args.location, args.composer_environment)
在设置参数前加“--”。在 运行ning 脚本之前,请确保在您的 airflow 网络服务器中进行了身份验证。否则在 运行 运行脚本时您将遇到身份验证错误。
parser.add_argument('--project_id', help='Your Project ID.')
parser.add_argument(
'--location', help='Region of the Cloud Composer environent.')
parser.add_argument(
'--composer_environment', help='Name of the Cloud Composer environment.')
示例 运行 命令:
python test.py --project_id=you-project-id-here --location=us-central1 --composer_environment=test-composer
输出:
xxxxx-xxxxxxx.apps.googleusercontent.com
我现在是这个脚本的管理员,我很高兴你提出这个问题,很抱歉这一点都不直观。有几个选项。 (感谢 Ricco D!)。此外,您可以在没有参数的情况下传递值本身。例如:
python get_client_id.py my-gcp-project us-west1 my-composer-environment-name
无论如何,我 100% 同意这不直观,并承认此脚本中发生的错误消息不是最有用的,我将与我的同事一起为该脚本提供一个改进开发者体验的更新,具有更好的错误消息,并且符合 GCP DevRel 实践。
我对 GCP Cloud Composer 有疑问。
验证触发DAG的函数(工作流) 我想通过参考下面文章中的python代码来获取客户端ID。 https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/composer/rest/get_client_id.py
我在 运行 程序时遇到错误。
出现的错误如下。
usage: id.py [-h] project_id location composer_environment
id.py: error: the following arguments are required: project_id, location, composer_environment
错误的意思是argumentsproject_id,location,composer_environment不够用。 我明白意思,但是我很麻烦,因为无论我如何传递参数都会出现同样的错误。
下面是我尝试过的命令和代码的列表。
python3 id.py --project_id project_id --location location --composer_environment composer_environment
python3 id.py --project_id 'project_id' --location 'location' --composer_environment 'composer_environment'
python3 id.py --project_id --location --composer_environment
"""Get the client ID associated with a Cloud Composer environment."""
import argparse
def get_client_id(project_id, location, composer_environment):
# [START composer_get_environment_client_id]
import google.auth
import google.auth.transport.requests
import requests
import six.moves.urllib.parse
# Authenticate with Google Cloud.
# See: https://cloud.google.com/docs/authentication/getting-started
credentials, _ = google.auth.default(
scopes=['https://www.googleapis.com/auth/cloud-platform'])
authed_session = google.auth.transport.requests.AuthorizedSession(
credentials)
# project_id = 'YOUR_PROJECT_ID'
# location = 'us-central1'
# composer_environment = 'YOUR_COMPOSER_ENVIRONMENT_NAME'
environment_url = (
'https://composer.googleapis.com/v1beta1/projects/{}/locations/{}'
'/environments/{}').format(project_id, location, composer_environment)
composer_response = authed_session.request('GET', environment_url)
environment_data = composer_response.json()
airflow_uri = environment_data['config']['airflowUri']
# The Composer environment response does not include the IAP client ID.
# Make a second, unauthenticated HTTP request to the web server to get the
# redirect URI.
redirect_response = requests.get(airflow_uri, allow_redirects=False)
redirect_location = redirect_response.headers['location']
# Extract the client_id query parameter from the redirect.
parsed = six.moves.urllib.parse.urlparse(redirect_location)
query_string = six.moves.urllib.parse.parse_qs(parsed.query)
print(query_string['client_id'][0])
# [END composer_get_environment_client_id]
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('project_id', help='Your Project ID.')
parser.add_argument(
'location', help='Region of the Cloud Composer environent.')
parser.add_argument(
'composer_environment', help='Name of the Cloud Composer environent.')
args = parser.parse_args()
get_client_id(
args.project_id, args.location, args.composer_environment)
在设置参数前加“--”。在 运行ning 脚本之前,请确保在您的 airflow 网络服务器中进行了身份验证。否则在 运行 运行脚本时您将遇到身份验证错误。
parser.add_argument('--project_id', help='Your Project ID.')
parser.add_argument(
'--location', help='Region of the Cloud Composer environent.')
parser.add_argument(
'--composer_environment', help='Name of the Cloud Composer environment.')
示例 运行 命令:
python test.py --project_id=you-project-id-here --location=us-central1 --composer_environment=test-composer
输出:
xxxxx-xxxxxxx.apps.googleusercontent.com
我现在是这个脚本的管理员,我很高兴你提出这个问题,很抱歉这一点都不直观。有几个选项。
python get_client_id.py my-gcp-project us-west1 my-composer-environment-name
无论如何,我 100% 同意这不直观,并承认此脚本中发生的错误消息不是最有用的,我将与我的同事一起为该脚本提供一个改进开发者体验的更新,具有更好的错误消息,并且符合 GCP DevRel 实践。