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

如何在Google Cloud Function中配置Kaggle API密钥使其可被识别?

解决Google Cloud Function中Kaggle API无法找到密钥的问题

核心问题排查与解决方案

1. 优先使用环境变量认证(最可靠,避免文件路径问题)

Kaggle API支持直接通过环境变量KAGGLE_USERNAME和KAGGLE_KEY完成认证,无需依赖kaggle.json文件,这是在Serverless环境下最稳妥的方式:

import os
import json
from google.cloud import secretmanager

def access_secret_version(project_id, secret_id, version_id="latest"):
    client = secretmanager.SecretManagerServiceClient()
    name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"
    response = client.access_secret_version(request={"name": name})
    return response.payload.data.decode("UTF-8")

def main(event, context):
    # 替换为你的项目ID和Secret名称
    project_id = "your-project-id"
    secret_id = "kaggle-api-key"
    
    # 从Secret Manager读取密钥内容
    kaggle_secret = access_secret_version(project_id, secret_id)
    kaggle_config = json.loads(kaggle_secret)
    
    # 设置Kaggle认证环境变量
    os.environ["KAGGLE_USERNAME"] = kaggle_config["username"]
    os.environ["KAGGLE_KEY"] = kaggle_config["key"]
    
    # 必须在设置环境变量后再导入kaggle模块
    import kaggle
    # 执行数据集下载
    kaggle.api.dataset_download_files("your-dataset-name", path="/tmp", unzip=True)
    
    # 后续上传至GCS的代码...

2. 若坚持使用kaggle.json文件,需修正以下问题

如果一定要用文件方式认证,你可能踩了这几个坑:

(1)环境变量设置时机错误

Kaggle模块在导入时就会读取配置路径,如果你的代码先导入kaggle再设置KAGGLE_CONFIG_DIR,环境变量的修改不会生效。必须先完成环境变量和文件准备,再导入kaggle:

import os
import json

def prepare_kaggle_config():
    # 读取挂载的密钥文件
    with open("/.kaggle/kaggle.json", 'r') as f:
        kaggle_api_key = f.read().strip()
    
    # 写入/tmp目录
    tmp_config_path = "/tmp/kaggle.json"
    with open(tmp_config_path, 'w') as f:
        json.dump(json.loads(kaggle_api_key), f)
    
    # 关键:设置文件权限为600,Kaggle要求配置文件不能被其他用户读取
    os.chmod(tmp_config_path, 0o600)
    
    # 设置配置目录环境变量
    os.environ["KAGGLE_CONFIG_DIR"] = "/tmp"

def main(event, context):
    # 先准备配置
    prepare_kaggle_config()
    # 再导入kaggle
    import kaggle
    # 执行下载操作
    kaggle.api.dataset_download_files("your-dataset-name", path="/tmp", unzip=True)
(2)Secret挂载路径错误

检查Cloud Function的Secret挂载配置:确保挂载的是文件路径/.kaggle/kaggle.json,而非目录/.kaggle。如果挂载到目录,密钥内容会被存放在目录下以Secret名称命名的文件中,而非kaggle.json,导致API找不到文件。

(3)文件权限不符合要求

Kaggle API要求kaggle.json的权限必须为600(仅所有者可读可写),否则会拒绝读取。务必在写入文件后执行os.chmod(tmp_config_path, 0o600)。

内容的提问来源于stack exchange,提问作者Sean MacInnis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:32:08