我正在尝试使用 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 令牌)具有以下角色:
所以我做了一个肮脏的伎俩:我为服务帐户创建了一个密钥文件,将其下载到本地,并通过使用密钥文件将帐户添加到我的 gcloud …
使用案例:
我正在使用 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) 我想让我的 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 中运行,我可以看到列出的集群配置。
所以我无法弄清楚的是:
google-cloud-platform kubernetes airflow google-cloud-composer