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

在Google Colaboratory用pyathena调用AWS Athena遇NoCredentialsError求解决

解决Google Colaboratory中pyathena的NoCredentialsError问题

既然相同代码在Sagemaker能正常运行,那问题大概率出在Colab的凭证加载机制和Sagemaker不同——Sagemaker通常会自动关联IAM角色或环境变量里的凭证,但Colab是独立的云端环境,默认不会自动获取你的AWS凭证。下面是几个靠谱的解决办法,按安全性和便捷性排序:

方法1:使用Colab的「秘密管理」存储凭证(推荐)

这是最安全的方式,避免把密钥硬编码在代码里:

  1. 打开Colab左侧面板,点击「🔑 Secrets」选项卡
  2. 点击「Add a new secret」,分别添加两个秘密:
    • 名称:AWS_ACCESS_KEY_ID,值填你的AWS访问密钥ID
    • 名称:AWS_SECRET_ACCESS_KEY,值填你的AWS秘密访问密钥
  3. 在代码里勾选「Notebook access」,然后通过环境变量调用:
import os
from pyathena import connect

# 从Colab Secrets获取凭证
os.environ['AWS_ACCESS_KEY_ID'] = os.getenv('AWS_ACCESS_KEY_ID')
os.environ['AWS_SECRET_ACCESS_KEY'] = os.getenv('AWS_SECRET_ACCESS_KEY')

# 连接Athena
conn = connect(
    s3_staging_dir='s3://your-staging-bucket/path/',
    region_name='us-east-1'  # 替换成你的Athena区域
)

方法2:手动传入凭证到pyathena连接

如果只是临时测试,可以直接把凭证参数传给connect()方法,但绝对不要把代码共享出去:

from pyathena import connect

conn = connect(
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY',
    s3_staging_dir='s3://your-staging-bucket/path/',
    region_name='us-east-1'
)

方法3:通过boto3配置默认会话

如果你习惯用boto3管理凭证,也可以先配置boto3会话,pyathena会自动复用这个会话的凭证:

import boto3
from pyathena import connect

# 配置boto3会话
boto3.setup_default_session(
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY',
    region_name='us-east-1'
)

# pyathena会自动使用上面的会话凭证
conn = connect(s3_staging_dir='s3://your-staging-bucket/path/')

方法4:关联IAM角色(适合企业用户)

如果你的AWS账号允许,可以通过STS服务获取临时凭证,关联到特定IAM角色:

import boto3
from pyathena import connect

# 假设你有一个允许访问Athena的IAM角色ARN
sts_client = boto3.client('sts')
response = sts_client.assume_role(
    RoleArn='arn:aws:iam::123456789012:role/YourAthenaAccessRole',
    RoleSessionName='ColabAthenaSession'
)

# 使用临时凭证连接
conn = connect(
    aws_access_key_id=response['Credentials']['AccessKeyId'],
    aws_secret_access_key=response['Credentials']['SecretAccessKey'],
    aws_session_token=response['Credentials']['SessionToken'],
    s3_staging_dir='s3://your-staging-bucket/path/',
    region_name='us-east-1'
)

额外检查点

  • 确认你的Athena查询使用的区域和凭证的权限区域一致,Sagemaker可能默认配置了区域,但Colab需要显式指定
  • 检查Colab的网络环境,确保没有代理阻止AWS API请求
  • 验证你的IAM用户/角色确实有AmazonAthenaFullAccess(或更细粒度的权限)以及S3 staging bucket的读写权限

内容的提问来源于stack exchange,提问作者michi kan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:59