猿问

从 AWS SageMaker 访问 Google BigQuery

在本地运行时,我的 Jupyter notebook 能够像这样引用 Google BigQuery:


%%bigquery some_bq_table


SELECT *

FROM

  `some_bq_dataset.some_bq_table` 

因此,稍后在我的笔记本中,我可以将 some_bq_table 引用为 Pandas 数据框,如下所示:https ://cloud.google.com/bigquery/docs/visualize-jupyter


我想在 AWS SageMaker 上运行我的笔记本来测试一些东西。要使用 BigQuery 进行身份验证,似乎只有两种方法是使用 GCP(或本地)上的服务帐户或使用 env var 将 SDK 指向凭证 JSON(如此处所述:https : //cloud.google.com/文档/身份验证/入门)。


例如


export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json"

是否有一种简单的方法可以从 SageMaker 连接到 bigquery?我现在最好的想法是从某处下载 JSON 到 SageMaker 实例,然后从 python 代码设置环境变量。


例如,我会这样做:


os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/home/user/Downloads/[FILE_NAME].json"

但是,这不是很安全 - 我不喜欢将我的凭据 JSON 下载到 SageMaker 实例的想法(这意味着我必须将凭据上传到某个私有 s3 存储桶,然后将它们存储在 SageMaker 实例上)。不是世界末日,但我宁愿避免这种情况。


有任何想法吗?


开满天机
浏览 198回答 1
1回答

慕妹3146593

正如您提到的,GCP 目前使用服务帐户、凭据 JSON 和 API 令牌进行身份验证。您可以考虑使用 AWS Secrets Manager 或 AWS Systems Manager Parameter Store 来存储 GCP 凭证,然后在 Jupyter notebook 中获取它们,而不是将凭证存储在 S3 存储桶中。通过这种方式可以保护凭证,并且仅在需要时才从 Secrets Manager 创建凭证文件。这是我之前用于从 SageMaker 实例连接到 BigQuery 的示例代码。import osimport jsonimport boto3from google.cloud.bigquery import magicsfrom google.oauth2 import service_accountdef get_gcp_credentials_from_ssm(param_name):    # read credentials from SSM parameter store    ssm = boto3.client('ssm')    # Get the requested parameter    response = ssm.get_parameters(Names=[param_name], WithDecryption=True)    # Store the credentials in a variable    gcp_credentials = response['Parameters'][0]['Value']    # save credentials temporarily to a file    credentials_file = '/tmp/.gcp/service_credentials.json'    with open(credentials_file, 'w') as outfile:          json.dump(json.loads(gcp_credentials), outfile)    # create google.auth.credentials.Credentials to use for queries     credentials = service_account.Credentials.from_service_account_file(credentials_file)    # remove temporary file    if os.path.exists(credentials_file):        os.remove(credentials_file)    return credentials# this will set the context credentials to use for queries performed in jupyter # using bigquery cell magicmagics.context.credentials = get_gcp_credentials_from_ssm('my_gcp_credentials')请注意,SageMaker 执行角色应该有权访问 SSM,当然还有其他必要的路径来连接到 GCP。我不确定这是否是最好的方法。希望有人有更好的方法。
随时随地看视频慕课网APP

相关分类

Python
我要回答