从 Cloud Function 本身获取 Cloud Function 名称

Posted

技术标签:

【中文标题】从 Cloud Function 本身获取 Cloud Function 名称【英文标题】:Get a Cloud Function name from the Cloud Function itself 【发布时间】:2021-03-02 21:55:41 【问题描述】:

向 Twilio 发送 SMS 时,Twilio 会向指定的 URL 发送多个请求,以提供通过 webhook 发送 SMS 的状态。我想让这个回调异步,所以我开发了一个云函数,它将请求的表示发送到云任务,云任务本身到达我的应用程序的专用端点,在内部重新创建和模拟 Twilio 请求。

Twilio 使用以下命令签署他的请求:

我的 twilio 帐户的密钥 它到达的绝对 URL 以及他的请求正文

所以在我的后端,我应该知道 Twilio 最初到达的端点。我想在 Cloud Function 中执行此操作,并且我想以编程方式执行此操作,因为当人们回复 SMS 时也会使用此“异步 webhook”。

我的 webhook 的当前 URL 具有以下格式:

https://<location>-<project>.cloudfunctions.net/<cloud function name>/<some SMS uuid>

当前发送到我的 Cloud Task 的有效负载如下:

absoluteUri: req.protocol + '://' + req.hostname + req.originalUrl,
relativeUri: req.originalUrl,
queryParams: req.query,
headers: req.headers,
body: req.body,

问题是req.originalUrl不包含完整的URI,我的absoluteUri目前是:

https://<location>-<project>.cloudfunctions.net/<some SMS uuid>

所以这是我的问题:在云函数内部,有没有办法以编程方式获取其名称?

【问题讨论】:

【参考方案1】:

由于云函数名称是入口点并且应该是硬编码的,所以我最终编写了一个部署脚本,其中包含一些占位符。

看起来很丑,如果你有更好的方法欢迎。

【讨论】:

【参考方案2】:

我正在使用 python 3.9 并从奇怪命名的“K_SERVICE”环境变量中获取云函数名称。

import os
print("Current Cloud Function Name ".format(os.environ.get('K_SERVICE')))

尽您所能享受它们,Google 会在每个新语言版本中删除越来越多有用的环境变量。 https://cloud.google.com/functions/docs/configuring/env-var#python_37_and_go_111

【讨论】:

以上是关于从 Cloud Function 本身获取 Cloud Function 名称的主要内容,如果未能解决你的问题,请参考以下文章

小知识:SpringCloudConfigServer从git获取配置信息报错:.c.s.e.MultipleJGitEnvironmentRepository : Error occured clo

从请求中获取用户信息到 Firebase 中的 Cloud Function

如何从 Cloud Function 获取 Firebase 项目名称或 ID

Spring Cloud(15)——配置中心

Cloud Function 构建错误 - 无法从配置文件获取映像的操作系统

如何使用 Cloud Function with Flutter 从新图像中获取 URL?