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 实践。