You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prefect中正确使用Blocks加载AWS S3凭证?

Prefect加载AWS Credentials Block正确方法

问题原因

你遇到的AttributeError是因为AwsCredentials.load()是异步方法,直接调用不会返回凭证实例,而是返回一个coroutine对象,所以无论是直接传给s3_download还是访问aws_access_key_id属性都会报错。

正确使用方式

在异步流函数中,必须用await关键字调用AwsCredentials.load(),获取实际的AWS凭证实例后再传入s3_download。

完整可运行代码

import asyncio

from prefect_aws.s3 import s3_download
from prefect_aws.credentials import AwsCredentials

from prefect import flow, get_run_logger


@flow
async def fetch_taxi_data():
    logger = get_run_logger()
    # 用await加载AWS Credentials Block
    aws_credentials_block = await AwsCredentials.load("aws-credentials-block")
    data = await s3_download(
        bucket="hongbomiao-bucket",
        key="hm-airflow/taxi.csv",
        aws_credentials=aws_credentials_block,
    )
    logger.info(data)

if __name__ == "__main__":
    asyncio.run(fetch_taxi_data())

补充说明

  • 完全推荐使用Prefect Blocks管理凭证,这是官方最佳实践,能避免硬编码敏感信息,还能统一管理、动态更新凭证。
  • 所有Prefect Block的load()方法都是异步的,在异步上下文中必须用await调用;如果是同步函数,需要用asyncio.run()包裹调用。

内容的提问来源于stack exchange,提问作者Hongbo Miao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:30:30