创建 Apache Airflow CLI 令牌 - Amazon Managed Workflows for Apache Airflow
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建 Apache Airflow CLI 令牌

您可以使用本页上的命令生成 CLI 令牌,然后直接在命令 shell 中调用 Amazon MWAA API。例如,您可以获取令牌,然后使用 Amazon MWAA API 以编程方式部署 DAG。下一节包括使用 Amazon CLI、curl 脚本、Python 脚本或 bash 脚本创建 Apache Airflow CLI 令牌的步骤。响应中返回的令牌在 60 秒内有效。

注意

Amazon CLI 令牌旨在替代同步 shell 操作,而不是异步 API 命令。因此,可用的并发是有限的。为确保 Web 服务器对用户保持响应能力,建议在前一个请求成功完成之前不要打开新的 Amazon CLI 请求。

先决条件

下一节介绍了使用本页上的命令和脚本所需的初步步骤。

访问

Amazon CLI

Amazon Command Line Interface(Amazon CLI)是一种开源工具,让您能够在命令行 Shell 中使用命令与 Amazon 服务进行交互。要完成本节中的步骤,您需要以下满足以下条件:

使用 Amazon CLI

以下示例使用 Amazon CLI 中的 create-cli-token 命令创建 Apache Airflow CLI 令牌。

aws mwaa create-cli-token --name YOUR_ENVIRONMENT_NAME

使用 curl 脚本

以下示例使用 curl 脚本调用 Amazon CLI 中的 create-web-login-token 命令,通过 Apache Airflow Web 服务器上的端点调用 Apache Airflow CLI。

Apache Airflow v2
  1. 从文本文件中复制 curl 语句并将其粘贴到命令 shell 中。

    注意

    将其复制到剪贴板后,可能需要使用 shell 菜单中的 编辑 > 粘贴

    CLI_JSON=$(aws mwaa --region YOUR_REGION create-cli-token --name YOUR_ENVIRONMENT_NAME) \ && CLI_TOKEN=$(echo $CLI_JSON | jq -r '.CliToken') \ && WEB_SERVER_HOSTNAME=$(echo $CLI_JSON | jq -r '.WebServerHostname') \ && CLI_RESULTS=$(curl --request POST "https://$WEB_SERVER_HOSTNAME/aws_mwaa/cli" \ --header "Authorization: Bearer $CLI_TOKEN" \ --header "Content-Type: text/plain" \ --data-raw "dags trigger YOUR_DAG_NAME") \ && echo "Output:" \ && echo $CLI_RESULTS | jq -r '.stdout' | base64 --decode \ && echo "Errors:" \ && echo $CLI_RESULTS | jq -r '.stderr' | base64 --decode
  2. 用环境的 Amazon 区域、YOUR_DAG_NAMEYOUR_ENVIRONMENT_NAME 替换 YOUR_REGION 的占位符。例如,公有网络的主机名可能如下所示(没有 https://)

    123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
  3. 您应该在命令提示符中看到如下内容:

    { "stderr":"<STDERR of the CLI execution (if any), base64 encoded>", "stdout":"<STDOUT of the CLI execution, base64 encoded>" }
Apache Airflow v1
  1. 从文本文件中复制 cURL 语句并将其粘贴到命令 shell 中。

    注意

    将其复制到剪贴板后,可能需要使用 shell 菜单中的 编辑 > 粘贴

    CLI_JSON=$(aws mwaa --region YOUR_REGION create-cli-token --name YOUR_ENVIRONMENT_NAME) \ && CLI_TOKEN=$(echo $CLI_JSON | jq -r '.CliToken') \ && WEB_SERVER_HOSTNAME=$(echo $CLI_JSON | jq -r '.WebServerHostname') \ && CLI_RESULTS=$(curl --request POST "https://$WEB_SERVER_HOSTNAME/aws_mwaa/cli" \ --header "Authorization: Bearer $CLI_TOKEN" \ --header "Content-Type: text/plain" \ --data-raw "trigger_dag YOUR_DAG_NAME") \ && echo "Output:" \ && echo $CLI_RESULTS | jq -r '.stdout' | base64 --decode \ && echo "Errors:" \ && echo $CLI_RESULTS | jq -r '.stderr' | base64 --decode
  2. 用环境的 Amazon 区域、YOUR_DAG_NAMEYOUR_HOST_NAME 替换 YOUR_REGION 的占位符。例如,公有网络的主机名可能如下所示(没有 https://)

    123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
  3. 您应该在命令提示符中看到如下内容:

    { "stderr":"<STDERR of the CLI execution (if any), base64 encoded>", "stdout":"<STDOUT of the CLI execution, base64 encoded>" }
  4. 用占位符替换 YOUR_ENVIRONMENT_NAMEYOUR_DAG_NAME

使用 bash 脚本

以下示例使用 bash 脚本来调用 Amazon CLI 中的 create-cli-token 命令创建 Apache Airflow CLI 令牌。

Apache Airflow v2
  1. 复制以下代码示例的内容,并在本地另存为 get-cli-token.sh

    # brew install jq aws mwaa create-cli-token --name YOUR_ENVIRONMENT_NAME | export CLI_TOKEN=$(jq -r .CliToken) && curl --request POST "https://YOUR_HOST_NAME/aws_mwaa/cli" \ --header "Authorization: Bearer $CLI_TOKEN" \ --header "Content-Type: text/plain" \ --data-raw "dags trigger YOUR_DAG_NAME"
  2. 红色占位符替换 YOUR_ENVIRONMENT_NAMEYOUR_HOST_NAMEYOUR_DAG_NAME。例如,公有网络的主机名可能如下所示(没有 https://)

    123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
  3. (可选)macOS 和 Linux 用户可能需要运行以下命令以确保脚本可执行。

    chmod +x get-cli-token.sh
  4. 运行以下脚本可创建 Apache Airflow CLI 令牌。

    ./get-cli-token.sh
Apache Airflow v1
  1. 复制以下代码示例的内容,并在本地另存为 get-cli-token.sh

    # brew install jq aws mwaa create-cli-token --name YOUR_ENVIRONMENT_NAME | export CLI_TOKEN=$(jq -r .CliToken) && curl --request POST "https://YOUR_HOST_NAME/aws_mwaa/cli" \ --header "Authorization: Bearer $CLI_TOKEN" \ --header "Content-Type: text/plain" \ --data-raw "trigger_dag YOUR_DAG_NAME"
  2. 红色占位符替换 YOUR_ENVIRONMENT_NAMEYOUR_HOST_NAMEYOUR_DAG_NAME。例如,公有网络的主机名可能如下所示(没有 https://)

    123456a0-0101-2020-9e11-1b159eec9000.c2.us-east-1.airflow.amazonaws.com
  3. (可选)macOS 和 Linux 用户可能需要运行以下命令以确保脚本可执行。

    chmod +x get-cli-token.sh
  4. 运行以下脚本可创建 Apache Airflow CLI 令牌。

    ./get-cli-token.sh

使用 Python 脚本

以下示例使用 Python 脚本中的 boto3 create_cli_token 方法来创建 Apache Airflow CLI 令牌,并触发 DAG。您可以在 Amazon MWAA 之外运行此脚本。您只需安装 boto3 库。您可能需要创建一个虚拟环境来安装该库。该环境假设您已经为账户配置了 Amazon 身份验证凭证

Apache Airflow v2
  1. 复制以下代码示例的内容,并在本地另存为 create-cli-token.py

    """ Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ import boto3 import json import requests import base64 mwaa_env_name = 'YOUR_ENVIRONMENT_NAME' dag_name = 'YOUR_DAG_NAME' mwaa_cli_command = 'dags trigger' client = boto3.client('mwaa') mwaa_cli_token = client.create_cli_token( Name=mwaa_env_name ) mwaa_auth_token = 'Bearer ' + mwaa_cli_token['CliToken'] mwaa_webserver_hostname = 'https://{0}/aws_mwaa/cli'.format(mwaa_cli_token['WebServerHostname']) raw_data = '{0} {1}'.format(mwaa_cli_command, dag_name) mwaa_response = requests.post( mwaa_webserver_hostname, headers={ 'Authorization': mwaa_auth_token, 'Content-Type': 'text/plain' }, data=raw_data ) mwaa_std_err_message = base64.b64decode(mwaa_response.json()['stderr']).decode('utf8') mwaa_std_out_message = base64.b64decode(mwaa_response.json()['stdout']).decode('utf8') print(mwaa_response.status_code) print(mwaa_std_err_message) print(mwaa_std_out_message)
  2. 用占位符替换 YOUR_ENVIRONMENT_NAMEYOUR_DAG_NAME

  3. 运行以下脚本可创建 Apache Airflow CLI 令牌。

    python3 create-cli-token.py
Apache Airflow v1
  1. 复制以下代码示例的内容,并在本地另存为 create-cli-token.py

    import boto3 import json import requests import base64 mwaa_env_name = 'YOUR_ENVIRONMENT_NAME' dag_name = 'YOUR_DAG_NAME' mwaa_cli_command = 'trigger_dag' client = boto3.client('mwaa') mwaa_cli_token = client.create_cli_token( Name=mwaa_env_name ) mwaa_auth_token = 'Bearer ' + mwaa_cli_token['CliToken'] mwaa_webserver_hostname = 'https://{0}/aws_mwaa/cli'.format(mwaa_cli_token['WebServerHostname']) raw_data = '{0} {1}'.format(mwaa_cli_command, dag_name) mwaa_response = requests.post( mwaa_webserver_hostname, headers={ 'Authorization': mwaa_auth_token, 'Content-Type': 'text/plain' }, data=raw_data ) mwaa_std_err_message = base64.b64decode(mwaa_response.json()['stderr']).decode('utf8') mwaa_std_out_message = base64.b64decode(mwaa_response.json()['stdout']).decode('utf8') print(mwaa_response.status_code) print(mwaa_std_err_message) print(mwaa_std_out_message)
  2. 用占位符替换 YOUR_ENVIRONMENT_NAMEYOUR_DAG_NAME

  3. 运行以下脚本可创建 Apache Airflow CLI 令牌。

    python3 create-cli-token.py

接下来做什么?

  • createClitoken 上浏览用于创建 CLI 令牌的 Amazon MWAA API 操作。