我想解决我在 Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 环境中使用 Apache Airflow 命令行界面 (CLI) 时收到的错误。
简短描述
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误消息,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
Amazon MWAA 允许用户使用 Apache Airflow CLI 命令与 Apache Airflow 环境进行交互。这些命令由 Amazon MWAA 环境的 Web 服务器处理,并使用 Apache Airflow CLI 令牌进行身份验证。
**注意:**最佳实践是仅使用 Apache Airflow CLI 执行同步操作,例如一次性操作。使用 Apache Airflow CLI 执行异步操作(例如调用 DAG)并不是最佳实践。为保持 Web 服务器对所有用户的可用性,请将 Apache Airflow 命令的使用限制为最多 4 个并发命令。
以下是您在 Amazon MWAA 环境中使用 Apache Airflow CLI 时可能遇到的常见错误:
- 访问遭拒错误
- 找不到 DAG 错误
- 4## HTTP 响应代码错误
- 5## HTTP 响应代码错误
解决方法
根据以下错误类型,解决您在使用 Apache Airflow CLI 时收到的错误消息:
访问遭拒错误
检查您是否收到了以下错误消息或类似信息:
"AccessDeniedException: An error occurred (AccessDeniedException) when calling the CreateCliToken operation: User: is not authorized to perform: airflow:CreateCliToken on resource."
要解决此错误,请确保所配置的 AWS Identity and Access Management (IAM) 主体具有所需的权限策略语句。权限策略语句必须允许 IAM 主体执行 airflow:CreateCliToken API。将以下 IAM 策略附加到您的 IAM 主体,以允许创建 Apache Airflow CLI 令牌:
**注意:**将 example-region 替换为所需的 AWS 区域,将 example-account-number 替换为所需的账号,将 example-environment-name 替换为环境名称。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"airflow:CreateCliToken"
],
"Resource": "arn:aws:airflow:::environment/"
}
]
}
找不到 DAG 错误
Apache Airflow CLI 命令(如 dags list 和 dags next-execution)需要对 DAG 文件进行解析。如果处理您的 DAG 的软件包并没有安装在 Web 服务器上,则会出现以下错误或类似错误:
"airflow.exceptions.AirflowException: Dag 'sample\_\_dag' could not be found; either it does not exist or it failed to parse."
对于仅使用私有 Web 服务器的 Amazon MWAA 环境,Web 服务器无法访问互联网来安装额外的软件包。这些额外的软件包可以在 Python Package Index 公共存储库中找到。有关更多信息,请参阅 Python Package Index 网站上的 Python Package Index。如果 Web 服务器尝试从 Python Package Index 或其他公共托管存储库安装软件包,则软件包安装将失败。要解决此问题,请通过 Python wheels (.whl) 文件安装需求文件中列出的软件包。
**注意:**在 Web 服务器上安装额外的软件包后,需要解析 DAG 文件的 Apache Airflow CLI 命令行界面命令将成功运行。
4## HTTP 响应错误代码
400 HTTP 响应 - 命令解析错误
此错误表示 Apache Airflow 命令解析错误。当使用不正确的语法(例如缺少参数或选项无效)提交 Apache Airflow CLI 命令时,就会出现此错误。要解决此错误,请确保您使用的 Apache Airflow CLI 命令语法正确。有关更多信息,请参阅 Apache Airflow 网站上的命令行界面和环境变量参考。
**注意:**对于开源 Apache Airflow CLI 命令,使用 airflow [-h] GROUP_OR_COMMAND 命令结构。对于 Amazon MWAA 环境中的 Apache Airflow CLI 命令,使用 [-h] GROUP_OR_COMMAND 命令结构。
403 禁止的 HTTP 响应 - 您无权访问所请求的资源
此错误表示您没有权限访问所请求的资源,并且该资源要么受读保护,要么无法被服务器读取。当使用过期的身份验证令牌提交 Apache Airflow CLI 命令时,就会出现此错误。身份验证令牌的有效期为 60 秒,是一个无法调整或增加的硬性限制。要解决此错误,请生成一个新令牌并再次提交 Apache Airflow CLI 命令。
**注意:**Amazon MWAA 使用两个令牌进行身份验证:CLI 令牌和 Web 登录令牌。CLI 令牌对用户进行身份验证并允许用户提交 Apache Airflow CLI 命令。Web 登录令牌会对登录到环境中的 Apache Airflow 用户界面的用户进行身份验证。如果 Apache Airflow CLI 请求使用 Web 登录令牌,则该令牌无效,Web 服务器会返回 403 禁止 HTTP 响应。要解决此问题,请更新为 Amazon MWAA 环境创建 CLI 令牌的脚本。
405 HTTP 响应 - 提交的请求无效
此错误表明提交的请求无效。当您未使用 POST 请求来向 Web 服务器提交 Apache Airflow CLI 命令时,就会出现此错误。要解决此错误,请更新您的脚本,以使用 POST 方法向 Web 服务器发出请求。
405 HTTP 响应 - Oops! Something bad has happened
此错误表示提交了不受支持的 Apache Airflow CLI 命令。要解决此问题,请检查您的环境中使用的 Apache Airflow 版本是否支持您使用的命令。
5## HTTP 响应错误代码
500 HTTP 响应 - 响应超时
Apache Airflow CLI 命令由Amazon MWAA 环境中的 Web 服务器处理。如果您的环境配置为仅限私有访问,则无法公开路由 Web 服务器。要解决此错误,请提供从提交 Apache Airflow CLI 命令的本地计算机到私有 Web 服务器的可用路由。有关更多信息,请参阅如何在 Amazon MWAA 环境中使用私有网络访问模式访问 Apache Airflow 用户界面?
503 HTTP 响应
此错误表示您已经超过了推荐的 Apache Airflow CLI 命令并发量。这会导致您的 Web 服务器资源利用率增加,并可能导致 Web 服务器不可用。要解决此错误,请降低提交 Apache Airflow CLI 命令的速率。在提交新命令之前,请确保先前的命令已完成。