我正在尝试编写一个谷歌云函数,自动从某个kaggle数据集下载数据并将其上传到谷歌云存储桶。无论我如何尝试将我的 kaggle api 密钥包含在我的 google 云功能中,kaggle api 都找不到它!
我将我的 Kaggle api 密钥上传到秘密管理器,并编写了一些代码将密钥值写入存储在 /tmp 中的文件中,并将 KAGGLE_CONFIG_DIR 设置为 /tmp。我授予了云功能秘密管理器管理员权限,并创建了一个运行时服务帐户,该帐户还具有访问 Kaggle 密钥的权限,只是为了确保
我通过在此处设置的安装路径引用秘密
首先,我尝试将 KAGGlE_CONFIG_DIR 设置为安装路径,但这不起作用:
os.environ["KAGGLE_CONFIG_DIR"] = "/.kaggle"
然后我尝试将密钥写入 /tmp,并将 KAGGlE_CONFIG_DIR 设置为 /tmp,但这也不起作用。
def get_kaggle_api_key():
kaggle_key_path = "/.kaggle/kaggle.json"
#read the kaggle key
with open(kaggle_key_path, 'r') as f:
kaggle_api_key = f.read().strip()
#save the key to /tmp/
kaggle_config_path = "/tmp/kaggle.json"
with open(kaggle_config_path, 'w') as f:
json.dump(json.loads(kaggle_api_key), f)
os.environ["KAGGLE_CONFIG_DIR"] = "/tmp"
我总是收到此错误:
OSError:找不到kaggle.json。确保它位于 /www-data-home/.config/kaggle 中。或者使用环境方法。请参阅设置说明https://github.com/Kaggle/kaggle-api/
设置说明没有帮助,他们只是说将 KAGGLE_CONFIG_DIR 设置为存储密钥的位置,我就是这么做的。
这是我第一次尝试编写云函数来访问 api,我不太确定我在做什么。请帮忙!
我不是 Kaggle 用户 但是希望这个例子能有所帮助。
有 3 个(可能是 2 个)步骤,但重要的是您必须创建一个卷,然后创建一个卷挂载:
KAGGLE_CONFIG_DIR
创建一个卷(例如
KAGGLE-CONFIG-DIR
/.kaggle
)将环境变量 (
KAGGLE_CONFIG_DIR
) 设置为 /.kaggle
:
创建卷:
创建容器卷挂载:
还有一些Python:
@functions_framework.http
def root(request):
# Get the value from the environment
kaggle_config_dir = os.getenv("KAGGLE_CONFIG_DIR")
# Open the file
with open(f"{kaggle_config_dir}/kaggle.json", 'r') as file:
content = file.read()
# Return the content
return f"{kaggle_config_dir}/kaggle.json: {content}:
产量:
.kaggle/kaggle.json: {"your":"JSON"}