我需要使用Google Functions在Google计算实例中执行bash脚本/命令并获得响应。 AWS拥有一个名为SSM的代理,该代理使我可以轻松使用Lambda进行此操作,但是我在Google Cloud上找不到类似的东西。 在使用nodejs lambda的AWS上,我使用以下示例:
ssm.sendCommand({
DocumentName: documentName,
InstanceIds: [ instanceId ],
TimeoutSeconds: 3600,
Parameters: {
'commands' : commands
}
}
如何在Google Cloud上实现我想要的?谢谢。
答案 0 :(得分:0)
这是不可能的。您可以通过Cloud Function执行某些操作,例如start a VM or stop it,但无法获取或列出VM中的目录。在这种情况下,将使用Compute Engine API,但仅达到。 解决方法是在VM中创建一个请求处理程序,以便CF可以对其进行分派。为了避免安全问题和匿名呼叫者的请求,将实施适当的安全性。您可以使用公共IP来访问您的VM。
答案 1 :(得分:0)
Google Cloud Functions的本质是它是无服务器范例中最抽象的。它假定您所提供的只是以一种支持的语言执行的无状态逻辑。您不应该知道也不关心该逻辑如何执行。例如,运行bash
假设您的Cloud Function在运行bash的Unix之类的环境中运行。尽管这可能是一个正确的声明,但它并不是Cloud Function环境所拥有的“核心”合同的一部分。
我建议的另一种解决方案是研究Google的Cloud Run概念。就像Cloud Functions一样,Cloud Run是无服务器的(您不提供任何服务器,它的规模可扩展为零),但是区别在于执行的是docker容器。在该容器中,您的“代码”在调用时在容器环境中执行。 Google会根据需要调高/调低这些容器,以满足您的传入负载。由于它在容器中运行,因此您可以100%控制自己的逻辑……包括运行bash命令并提供能够运行所需的任何脚本或其他环境。
答案 2 :(得分:0)
您可以使用Bash Docker映像在Google Cloud Run上运行Bash脚本。例如-https://github.com/sethvargo/cloud-run-bash-example
然后,您可以从其他现有的Google Cloud Functions,AppEngine等中调用此Cloud Run服务。