【问题标题】:Error using gcloud command in Python script running as Google Cloud Function在作为 Google Cloud Function 运行的 Python 脚本中使用 gcloud 命令时出错
【发布时间】:2020-06-12 02:22:43
【问题描述】:

我在 Google Cloud 函数中运行了以下 python 代码。

pname = format(os.environ.get('GCP_PROJECT'))
project_metadata_file = "/tmp/" + pname + "_proj_metadata.json"
bucket_name = "XXXX"
H = open(project_metadata_file, "w")
project_list_command = "gcloud projects describe " + pname + " --format json"
project_output = subprocess.check_output(shlex.split(project_list_command))
project_output_json = json.loads(project_output)
H.write(project_output_json)
H.close()
upload_blob(bucket_name, project_metadata_file, os.path.basename(project_metadata_file))
return pname

这是我从 Cloud 函数中得到的错误。您能否告知我如何将 gcloud 作为此云功能的要求。请指教。

Error: function terminated. Recommended action: inspect logs for termination reason. Details:
[Errno 2] No such file or directory: 'gcloud': 'gcloud'

谢谢

【问题讨论】:

  • 我怀疑您将很难尝试使用您的代码部署一个完全配置的 gcloud 实例。您可能想考虑直接调用 Google Cloud API。
  • 对@doug-stevenson 回答是。请不要这样做!您正在尝试从作为云函数运行的 python 进程生成运行 gcloud 的进程。你应该做的是使用谷歌的云客户端库来获得你需要的功能。这是支持gcloud projects describe 的相关库:pypi.org/project/google-cloud-resource-manager
  • 感谢 Doug/DazWilkin 的输入。我正在尝试获取项目中定义的项目元数据,例如(键:值)对,但没有看到云资源中提供的任何 API-经理提取此信息。所以我已经使用 gcloud projects describe shell 命令恢复了......我发现提取项目元数据的另一个选项是使用我不想使用的计算引擎 API,因为我没有在我的项目中建立一个计算实例。
  • 对不起...没关系..我能够使用方法:projects.get API 由云资源管理器提供,并且能够检索标签...之前使用的是 fetch_project 方法,但不是提供所有信息。再次感谢。

标签: python google-cloud-functions gcloud


【解决方案1】:

您必须期望您的函数被部署到一个容器中,在您的情况下,该容器包括一个 Python 运行时。您不能假设您的云功能包含安装了 cloud sdk 的 shell 环境。我建议使用Method: projects.get API。如果您想使用 cloud sdk 命令,那么 Google Cloud Run 将是解决方案之一。

输入项目名称,您将收到以下输出:

{
  "projectNumber": "",
  "projectId": "",
  "lifecycleState": "",
  "name": "",
  "createTime": "",
  "parent": {
    "type": "",
    "id": ""
  }
}

【讨论】:

  • 谢谢玛丽安..是的,云运行是我的一个选项...想知道我是否可以让运行我的 python 函数的云函数容器依赖于 Cloud SDK
  • 不,您的云功能不能依赖 Cloud SDK。
【解决方案2】:

正如 DazWilkin 已经提到的,如果您使用专门的库,您的代码将会更加简洁和健壮。

如果您确实需要在您的功能中使用 Cloud SDK,您可以通过以下方式实现。

  1. Download the appropriate archive
  2. 将其解压到函数的文件夹中
  3. 在代码中将 gcloud 命令的路径设置为“./google-cloud-sdk/bin/gcloud”。这可能会有所不同,具体取决于您在函数文件夹中提取 SDK 的位置。
  4. 使用 gcloud 命令部署函数或将其压缩并从控制台部署。

【讨论】:

  • 谢谢你,Emil..会试一试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 2021-08-30
  • 2022-08-19
  • 1970-01-01
  • 2020-03-01
相关资源
最近更新 更多