[英]How to add a Minio connection to Airflow connections?
我正在嘗試將正在運行的 MinIO 實例添加到 Airflow 連接中,我認為它應該像 GUI 中的此設置一樣簡單(不要介意暴露的憑據,這是一個環境阻塞,之后會更改):
Airflow 和 minio 都在 docker 容器中運行,它們都使用相同的 docker 網絡。 按下測試按鈕會導致以下錯誤:
測試連接時發生“ClientError”錯誤:調用 GetCallerIdentity 操作時發生錯誤 (InvalidClientTokenId):請求中包含的安全令牌無效。
我很好奇我錯過了什么。 這個想法是建立這個連接,然后使用一個桶來進行數據感知調度(=我想在有人上傳文件到桶時立即觸發一個 DAG)
我在 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.