簡體   English   中英

如何將 Minio 連接添加到 Airflow 連接?

[英]How to add a Minio connection to Airflow connections?

我正在嘗試將正在運行的 MinIO 實例添加到 Airflow 連接中,我認為它應該像 GUI 中的此設置一樣簡單(不要介意暴露的憑據,這是一個環境阻塞,之后會更改): 在此處輸入圖像描述

Airflow 和 minio 都在 docker 容器中運行,它們都使用相同的 docker 網絡。 按下測試按鈕會導致以下錯誤:

測試連接時發生“ClientError”錯誤:調用 GetCallerIdentity 操作時發生錯誤 (InvalidClientTokenId):請求中包含的安全令牌無效。

我很好奇我錯過了什么。 這個想法是建立這個連接,然后使用一個桶來進行數據感知調度(=我想在有人上傳文件到桶時立即觸發一個 DAG)

我還面臨端點 URL 拒絕連接的問題。 我所做的是它實際上在 docker 容器中運行,所以我們應該給 docker 主機 url

{ "aws_access_key_id":"your_minio_access_key", "aws_secret_access_key": "your_minio_secret_key", "host": "http://host.docker.internal:9000" }

在此處輸入圖像描述

我在 Airflow 2.5.0 中也遇到了這個錯誤。 我找到了使用已經內置的 boto3 庫的解決方法。

首先,我創建了帶參數的連接:

連接 ID:任何標簽(在我的例子中是 Minio)

連接類型:通用

Host:minio服務器ip和端口

登錄:Minio訪問密鑰

密碼:Minio秘鑰

這是我的代碼:

import boto3
from airflow.hooks.base import BaseHook

conn = BaseHook.get_connection('Minio')

s3 = boto3.resource('s3',
                     endpoint_url=conn.host,
                     aws_access_key_id=conn.login,
                     aws_secret_access_key=conn.password
)
s3client = s3.meta.client 

#and then you can use boto3 methods for manipulating buckets and files
#for example:

bucket = s3.Bucket('test-bucket')
# Iterates through all the objects, doing the pagination for you. Each obj
# is an ObjectSummary, so it doesn't contain the body. You'll need to call
# get to get the whole body.
for obj in bucket.objects.all():
    key = obj.key

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM