我正在使用 docker-compose 来设置可扩展的气流集群。我的方法基于这个 Dockerfile https://hub.docker.com/r/puckel/docker-airflow/
我的问题是将日志设置为从 s3 写入/读取。当一个 dag 完成时,我得到这样的错误
*** Log file isn't local.
*** Fetching here: http://ea43d4d49f35:8793/log/xxxxxxx/2017-06-26T11:00:00
*** Failed to fetch log file from worker.
*** Reading remote logs...
Could not read logs from s3://buckets/xxxxxxx/airflow/logs/xxxxxxx/2017-06-
26T11:00:00
我在 airflow.cfg
文件中设置了一个新部分,如下所示
[MyS3Conn]
aws_access_key_id = xxxxxxx
aws_secret_access_key = xxxxxxx
aws_default_region = xxxxxxx
然后在 airflow.cfg
remote_base_log_folder = s3://buckets/xxxx/airflow/logs
remote_log_conn_id = MyS3Conn
我是否正确设置了它并且存在错误?这里有我缺少的成功秘诀吗?
- 更新
我尝试以 URI 和 JSON 格式导出,但似乎都不起作用。然后我导出了 aws_access_key_id 和 aws_secret_access_key 然后气流开始拾取它。现在我在工作日志中得到了他的错误
6/30/2017 6:05:59 PMINFO:root:Using connection to: s3
6/30/2017 6:06:00 PMERROR:root:Could not read logs from s3://buckets/xxxxxx/airflow/logs/xxxxx/2017-06-30T23:45:00
6/30/2017 6:06:00 PMERROR:root:Could not write logs to s3://buckets/xxxxxx/airflow/logs/xxxxx/2017-06-30T23:45:00
6/30/2017 6:06:00 PMLogging into: /usr/local/airflow/logs/xxxxx/2017-06-30T23:45:00
- 更新
我也找到了这个链接 https://www.mail-archive.com/dev@airflow.incubator.apache.org/msg00462.html
然后我进入我的一台工作机器(与网络服务器和调度程序分开)并在 python 中运行这段代码
import airflow
s3 = airflow.hooks.S3Hook('s3_conn')
s3.load_string('test', airflow.conf.get('core', 'remote_base_log_folder'))
我收到此错误。
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
我尝试导出几种不同类型的 AIRFLOW_CONN_
envs,如连接部分 https://airflow.incubator.apache.org/concepts.html 和此问题的其他答案中所述。
s3://<AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@S3
{"aws_account_id":"<xxxxx>","role_arn":"arn:aws:iam::<xxxx>:role/<xxxxx>"}
{"aws_access_key_id":"<xxxxx>","aws_secret_access_key":"<xxxxx>"}
我还导出了 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 但没有成功。
这些凭据存储在数据库中,因此一旦我将它们添加到 UI 中,工作人员应该可以获取它们,但由于某种原因他们无法写入/读取日志。
原文由 JackStat 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要通过 Airflow UI 设置 S3 连接。为此,您需要转到 airflow UI 上的 Admin -> Connections 选项卡,并为您的 S3 连接创建一个新行。
一个示例配置是: