Airflow S3 ClientError - 禁止:使用 UI 的错误 s3 连接设置

Airflow S3 ClientError - Forbidden: Wrong s3 connection settings using UI

我在我的任务中使用 S3Hook 从 DigitalOcean 空间上的 s3 存储桶下载文件。下面是一个凭据示例,它与 boto3 完美配合,但在 S3Hook 中使用时会导致错误:

[s3_bucket]
default_region = fra1
default_endpoint=https://fra1.digitaloceanspaces.com
default_bucket=storage-data
bucket_access_key=F7QTVFMWJF73U75IB26D
bucket_secret_key=mysecret

这是我在 Admin->Connections 中填写连接表单的方式:

这是我在任务的 .log 文件中看到的内容:

ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden

所以,我猜,连接形式是错误的。正确填充所有 S3 参数的正确方法是什么? (即密钥、秘密、存储桶、主机、区域等)

host 变量移动到 Extra 对我有用。

出于某种原因,如果自定义 S3 主机(与 AWS 不同,例如 DigitalOcean)不在 Extra 变量中,airflow 无法建立连接。

此外,region_name 可以从 Extra 中删除,以防像我这样。

为了在 Digital Ocean Spaces 上使用 Airflow 2.1.0,我必须在此处添加 aws_conn_id:

s3_client = S3Hook(aws_conn_id='123.ams3.digitaloceanspaces.com')

填写 Schema 作为存储桶名称、Login(密钥)和密码(secret),然后 UI 中的 Extra 字段包含区域和主机:

{"host": "https://ams3.digitaloceanspaces.com","region_name": "ams3"}