小编bar*_*man的帖子

Google Cloud Tasks 无法通过 Cloud Run 进行身份验证

我正在尝试使用 Cloud Tasks 调用 Cloud Run 服务,如此处文档中所述。

我有一个正在运行的 Cloud Run 服务。如果我公开该服务,它就会按预期运行。

我创建了一个云队列,并使用本地脚本安排云任务。这个是用我自己的账号。脚本看起来像这样

from google.cloud import tasks_v2

client = tasks_v2.CloudTasksClient()

project = 'my-project'
queue = 'my-queue'
location = 'europe-west1'
url = 'https://url_to_my_service'

parent = client.queue_path(project, location, queue)

task = {
        'http_request': {
            'http_method': 'GET',
            'url': url,
            'oidc_token': {
               'service_account_email': 'my-service-account@my-project.iam.gserviceaccount.com'
            }
        }
}

response = client.create_task(parent, task)
print('Created task {}'.format(response.name))
Run Code Online (Sandbox Code Playgroud)

我看到该任务出现在队列中,但它失败并立即重试。其原因(通过检查日志)是 Cloud Run 服务返回 401 响应。

我自己的用户具有“服务帐户令牌创建者”和“服务帐户用户”角色。它没有明确的“云任务入队”,但由于我能够在队列中创建任务,我想我已经继承了所需的权限。服务帐户“my-service-account@my-project.iam.gserviceaccount.com”(我在任务中使用它来获取 OIDC 令牌)具有以下角色:

  • 云任务入队(尽管我认为它不需要这个,因为我正在使用自己的帐户创建任务)
  • 云任务任务运行器
  • 云任务查看器
  • 服务帐户令牌创建者(我不确定是否应将其添加到我自己的帐户(安排任务的帐户)或应添加到应执行对 Cloud Run 的调用的服务帐户)
  • 服务帐户用户(此处相同)
  • 云运行调用者

所以我做了一个肮脏的伎俩:我为服务帐户创建了一个密钥文件,将其下载到本地,并通过使用密钥文件将帐户添加到我的 gcloud …

service-accounts google-cloud-tasks google-cloud-run

9
推荐指数
2
解决办法
5995
查看次数

如何有效地将 Google BigTable 中的行读取到 pandas DataFrame 中

使用案例:

我正在使用 Google BigTable 来存储这样的计数:

|  rowkey  |    columnfamily    |
|          | col1 | col2 | col3 |
|----------|------|------|------|
| row1     | 1    | 2    | 3    |
| row2     | 2    | 4    | 8    |
| row3     | 3    | 3    | 3    |
Run Code Online (Sandbox Code Playgroud)

我想读取给定范围的行键的所有行(在本例中假设所有行)并聚合每列的值。

一个简单的实现将查询行并在聚合计数时迭代行,如下所示:

from google.cloud.bigtable import Client

instance = Client(project='project').instance('my-instance')
table = instance.table('mytable')

col1_sum = 0
col2_sum = 0
col3_max = 0

table.read_rows()
row_data.consume_all()

for row in row_data.rows:
    col1_sum += int.from_bytes(row['columnfamily']['col1'.encode('utf-8')][0].value(), byteorder='big')
    col2_sum += int.from_bytes(row['columnfamily']['col2'.encode('utf-8')][0].value(), …
Run Code Online (Sandbox Code Playgroud)

python bigtable pandas pyarrow

5
推荐指数
1
解决办法
6097
查看次数

如何让 Google Cloud Composer (airflow) 在不同的 kubernetes 集群上运行作业?

我想让我的 Cloud Composer 环境(Google Cloud 的托管 Apache Airflow 服务)在不同的kubernetes 集群上启动pod。我该怎么做?

请注意,Cloud composer 在 kubernetes 集群上运行气流。该集群被认为是作曲家的“环境”。使用 的默认值KubernetesPodOperator,composer 将在自己的集群上调度 pod。但是,在这种情况下,我有一个不同的 kubernetes 集群,我想在其上运行 pod。

我可以连接到工作 Pod 并在gcloud container clusters get-credentials CLUSTERNAME那里运行,但 Pod 时不时会被回收,所以这不是一个持久的解决方案。

我注意到 theKubernetesPodOperator既有 anin_cluster又有cluster_context论点,这似乎很有用。我希望这会起作用:

pod = kubernetes_pod_operator.KubernetesPodOperator(
    task_id='my-task',
    name='name',
    in_cluster=False,
    cluster_context='my_cluster_context',
    image='gcr.io/my/image:version'
)
Run Code Online (Sandbox Code Playgroud)

但这导致 kubernetes.config.config_exception.ConfigException: Invalid kube-config file. Expected object with name CONTEXTNAME in kube-config/contexts list

虽然如果我kubectl config get-contexts在工作 Pod 中运行,我可以看到列出的集群配置。

所以我无法弄清楚的是:

  • 如何确保我的其他 kubernetes 集群的上下文在我的 Composer 环境的工作 …

google-cloud-platform kubernetes airflow google-cloud-composer

1
推荐指数
1
解决办法
1235
查看次数