You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地运行Apache Airflow:调试cryptography.fernet.InvalidToken异常

问题:AWS MWAA Local Runner测试Airflow DAG时Fernet InvalidToken错误

使用aws-mwaa-local-runner本地测试Airflow DAG时,触发EMR任务出现如下错误,测试前刚更新过AWS令牌:

[2023-05-18, 20:57:40 UTC] {{emr.py:571}} INFO - Creating job flow using aws_conn_id: aws_default, emr_conn_id: emr_default
[2023-05-18, 20:57:40 UTC] {{base.py:71}} INFO - Using connection ID 'emr_default' for task execution.
[2023-05-18, 20:57:40 UTC] {{taskinstance.py:1851}} ERROR - Task failed with exception
Traceback (most recent call last):
  File "/usr/local/airflow/dags/emr.py", line 583, in execute
    response = self._emr_hook.create_job_flow(job_flow_overrides)
  File "/usr/local/airflow/.local/lib/python3.10/site-packages/airflow/providers/amazon/aws/hooks/emr.py", line 129, in create_job_flow
    config = emr_conn.extra_dejson.copy()
  File "/usr/local/airflow/.local/lib/python3.10/site-packages/airflow/models/connection.py", line 400, in extra_dejson
    if self.extra:
  File "/usr/local/airflow/.local/lib/python3.10/site-packages/sqlalchemy/orm/attributes.py", line 573, in __get__
    retval = self.descriptor.__get__(instance, owner)
  File "/usr/local/airflow/.local/lib/python3.10/site-packages/airflow/models/connection.py", line 290, in get_extra
    extra_val = fernet.decrypt(bytes(self._extra, 'utf-8')).decode()
  File "/usr/local/airflow/.local/lib/python3.10/site-packages/cryptography/fernet.py", line 195, in decrypt
    raise InvalidToken

错误原因

该错误与更新AWS令牌无关,核心是Airflow尝试解密emr_default连接的extra字段时失败:

  • emr_default连接的extra字段是用旧Fernet密钥加密的,而当前本地runner使用的是新密钥,导致解密失败
  • extra字段被手动修改过,加密内容损坏
  • 本地runner的Fernet密钥配置与创建连接时使用的密钥不一致

调试与解决步骤

  • 检查并重置emr_default连接配置:
    1. 进入Airflow UI的Admin > Connections,找到emr_default
    2. 清空现有Extra字段内容,填入正确的EMR配置(例如{"region_name": "你的AWS区域"})
    3. 保存连接,Airflow会自动用当前Fernet密钥重新加密该字段
  • 确认本地runner的Fernet密钥:
    打开本地runner的config/airflow.cfg文件,查看fernet_key配置项,确保该密钥与创建emr_default连接时使用的密钥一致。如果是新启动的本地runner,默认会生成新密钥,需替换为旧密钥或重新创建连接
  • 重新创建连接:
    若不确定旧Fernet密钥,直接删除emr_default连接,重新创建并填入正确的认证信息(可复用aws_default的AWS令牌配置)
  • 验证AWS令牌有效性:
    进入本地runner容器,执行aws sts get-caller-identity命令,确认更新后的令牌能正常访问AWS服务(排除令牌本身的问题)

内容的提问来源于stack exchange,提问作者Youssef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:22:43