如何将 Kaggle api 密钥包含到 google 云函数中以便 Kaggle api 可以找到它?

问题描述 投票:0回答:1

我正在尝试编写一个谷歌云函数,自动从某个kaggle数据集下载数据并将其上传到谷歌云存储桶。无论我如何尝试将我的 kaggle api 密钥包含在我的 google 云功能中,kaggle api 都找不到它!

我将我的 Kaggle api 密钥上传到秘密管理器,并编写了一些代码将密钥值写入存储在 /tmp 中的文件中,并将 KAGGLE_CONFIG_DIR 设置为 /tmp。我授予了云功能秘密管理器管理员权限,并创建了一个运行时服务帐户,该帐户还具有访问 Kaggle 密钥的权限,只是为了确保

我通过在此处设置的安装路径引用秘密

enter image description here

首先,我尝试将 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,我不太确定我在做什么。请帮忙!

python google-cloud-platform google-cloud-functions kaggle google-secret-manager
1个回答
0
投票

我不是 Kaggle 用户 但是希望这个例子能有所帮助。

有 3 个(可能是 2 个)步骤,但重要的是您必须创建一个卷,然后创建一个卷挂载:

  1. KAGGLE_CONFIG_DIR
  2. 创建环境变量
  3. 使用 Secret
     创建一个卷(例如 
    KAGGLE-CONFIG-DIR
  4. 创建卷挂载(例如
    /.kaggle

将环境变量 (

KAGGLE_CONFIG_DIR
) 设置为
/.kaggle
:

Environment Variable

创建卷:

Volume

创建容器卷挂载:

Volume Mount

还有一些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"}
© www.soinside.com 2019 - 2024. All rights reserved.