使用相同的DAG创建新环境时缺少FERNET_密钥配置

2024-04-28 02:04:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在谷歌云中使用Composer(气流)。我想创建一个新环境,并将旧环境中相同的DAG和变量带到新环境中

为了实现这一点,我将执行以下操作:

  • 我检查了几个变量,并将它们导出到JSON文件中
  • 在我的新环境中,我导入了相同的JSON文件
  • 我使用gsutil并将相同的DAG上载到新环境

然而,在新的环境中,由于FERNET_KEY configuration is missing,我的所有DAG都被破坏了。我最好的猜测是,这与导入使用单独的Fernet密钥加密的变量有关,但我不确定

以前有人遇到过这个问题吗?如果是,您是如何修复的


Tags: 文件keyjson环境is密钥configurationdag
3条回答

我们在FERNET_键上也犯了同样的错误。我认为新版本(composer-1.9.0)中有一个bug。他们说Fernet密钥现在存储在Kubernetes Secrets中,而不是配置映射中 即使重新输入您的连接,它们也无法正常工作否

他们已经解决了版本1.9.1中的问题:

https://cloud.google.com/composer/docs/release-notes

根据文档,Fernet Key是由Composer生成的,它是唯一的。可以从Composer气流配置(Composer bucket -> airflow.cfg)中检索fernet key值。您需要检查fernet_key是否存在

由于二进制卷展中的竞争条件,可能导致在Web服务器中设置新的fernet密钥,从而使元数据数据库中以前加密的值无法解密,因此存在一个已知问题

您可以尝试的是在Admin -> Variables下的气流UI中重新创建key Composer对象路径

通过执行以下操作,我可以可靠地重现Composer 1.9/1.10.6中的问题:

  1. 创建一个新的Composer集群
  2. 上载引用气流连接的DAG
  3. 在Composer中设置环境变量
  4. 等待airflow-schedulerairflow-worker重新启动

除了FERNET_KEY configuration is missing之外,该问题还通过以下错误横幅表现出来:

Broken DAG: [/home/airflow/gcs/dags/MY_DAG.py] in invalid literal for int() with base 10: 'XXX'
Broken DAG: [/home/airflow/gcs/dags/MY_DAG.py] Expecting value: line 1 column 1 (char 0)

问题的根本原因是添加新的环境变量会从airflow-schedulerairflow-workerKubernetes部署规范Pod模板中删除AIRFLOW__CORE__FERNET_KEY环境变量:

 - name: AIRFLOW__CORE__FERNET_KEY
      valueFrom:
        secretKeyRef:
          key: fernet_key
          name: airflow-secrets

作为一种解决方法,可以应用Kubernetes部署规范修补程序:

$ cat config/composer_airflow_scheduler_fernet_key_patch.yaml
spec:
  template:
    spec:
      containers:
      - name: airflow-scheduler
        env:
        - name: AIRFLOW__CORE__FERNET_KEY
          valueFrom:
            secretKeyRef:
              key: fernet_key
              name: airflow-secrets

$ kubectl patch deployment airflow-scheduler  namespace=$AIRFLOW_ENV_GKE_NAMESPACE  patch "$(cat config/composer_airflow_scheduler_fernet_key_patch.yaml)"

注意:此修补程序还必须应用于airflow-worker

相关问题 更多 >