【问题标题】:Accessing Google App Engine Python App code in production在生产环境中访问 Google App Engine Python 应用程序代码
【发布时间】:2016-12-21 00:05:11
【问题描述】:

(背景:我是 Google App Engine 新手,熟悉其他云提供商的服务)

我正在寻找类似于 shell 访问生产节点的访问/视图。

使用基于 Python/Django 的 Google App Engine 应用程序,我想查看生产中的代码。

我能找到的一个视图是 StackDriver 'Debug' 视图。 但是,显然 Debug 视图中显示的代码并未反映更新的生产代码(基于生产站点上显示的内容,例如,主页上的文本不同)。

Google App Engine 是否允许我通过 ssh 连接到运行应用程序/代码的 VM? 如果没有,如何检查生产中运行的代码?

谢谢。

【问题讨论】:

  • 答案很大程度上取决于您使用的是标准环境还是柔性环境。你能把这个细节添加到你的问题中吗?

标签: google-app-engine google-app-engine-python


【解决方案1】:

根据Comparing environments 表中的SSH debugging 行,flex 环境应用程序支持 SSH 访问,但标准环境应用程序不支持。

来自Connecting to the instance

如果虚拟机实例处于调试模式,您可以通过以下方式连接到其主机 在控制台中使用 SSH 或使用 gcloud

在控制台中连接一个实例:

  1. 访问您的项目的 Cloud Platform Console 实例页面: Go to the instances page

  2. 点击包含您要访问的实例所在行最右侧的SSH

    这会将实例置于调试模式,并在终端窗口中打开实例的 SSH 会话。

    您还可以从下拉列表中选择不同的选项来启动 SSH 会话。

  3. 此时您位于实例主机中,其中运行了多个containers。有关这些的更多信息,请参阅Understanding common containers next。

  4. 在终端窗口中,列出实例中运行的容器:

    sudo docker ps
    
  5. sudo docker ps 命令的输出按行列出每个容器;找到包含您的项目 ID 的行:这是 运行您的代码的容器。记下这个容器的名称。

  6. (可选)通过调用列出您的应用程序的日志记录信息:

    sudo docker logs [CONTAINER-NAME]
    
  7. 在运行代码的容器中启动一个 shell:

    container_exec [CONTAINER-NAME] /bin/bash
    
  8. 调试完成后,输入exit退出容器,再次exit退出SSH会话。

  9. 为您的实例禁用调试以使其恢复正常运行。

【讨论】:

  • 谢谢丹。通过cloud.google.com/appengine/docs/flexible/python/quickstart,看起来灵活的环境由app.yaml中的'env:flex'标识?在我的情况下,我没有在 app.yaml 中看到任何 'env:' 设置。我猜这排除了 ssh 选项。我正在尝试确定生产中的代码是什么? StackDriver 'Debug' 下显示的代码似乎不是正确的版本。在我的情况下(显然是标准环境),我如何查看生产中的代码,包括 cronjobs 的代码?
  • “download_app”是唯一的选择吗? cloud.google.com/appengine/docs/python/tools/…。不幸的是,就我而言,这不是一个选择,至少现在是这样。这仅适用于上传代码或所有者的人,我两者都不是。根据“IAM”页面,我的角色是“编辑”。
  • app.yaml 中缺少的env: 表示标准环境,因此没有 SSH 访问权限。
  • 我能想到的访问代码的唯一其他方法是联系有权为您下载代码的人。您的组织应该有一个很好的部署程序来解决这个问题 - 有一个有据可查的部署历史记录表明确切的时间和代码版本。
  • 谢谢丹。我想通了,并得到了角色更改来下载代码。
【解决方案2】:

如果您使用的是标准环境,答案是否定的,您无法真正检查或直接查看代码。您提到过通过 Stackdriver Debugger 查看它,这是查看其表示的一种方式。

听起来,如果您有理由查看代码,那么您组织中的某个人应该授予您对源代码管理系统的适当访问级别。我想如果您的部署实践已经成熟,那么他们可能会将代码分支以映射到您部署的版本,您可以在本地进行详细检查。

【讨论】:

  • 谢谢。问题在于在更新 repo 之前将代码更改推送到 prod。理想情况下,应该设置一个代码只能通过 scm 系统推送的设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2015-07-18
  • 2012-04-05
  • 2017-05-09
  • 2017-09-22
  • 2021-01-23
相关资源
最近更新 更多