查看是否部署在云端

Check whether deployed in cloud

我在 Docker 容器中有一个 python 程序 运行。我的身份验证方法取决于容器是否部署在 GCP 中。理想情况下,我会有这样的功能:

def deployment_environment():
    # return 'local' if [some test] else 'cloud'
    pass

最常用的检查方法是什么?我的直觉是使用名为 [APP_NAME]_DEPLOYMENT_ENVIRONMENT 的环境,它可以通过任何一种方式设置——但要确保设置正确有太多活动部件。是否有 GCP package/tool 可以帮我检查?

我得出了两个解决方案:

有环境

部署时设置一个env var,像这样:

gcloud functions deploy [function-name] --set-env-vars ENV_GCP=1

然后,在您的代码中:

import socket


def deployment_environment():
    return 'cloud' if ('ENV_GCP' in os.environ) else 'local'
Pros Cons
intent is clear, both setting and using env more involved
idiomatic relies on user setting env correctly

通过 Python,使用套接字

import socket


def deployment_environment():
    try:
        socket.getaddrinfo('metadata.google.internal', 80)
        return 'cloud'
    except socket.gaierror:
        return 'local'
Pros Cons
more succinct makes improper use of try/catch
doesn't rely on an extra step of setting env dependency on socket package & GCP runtime contract