查看是否部署在云端
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
我在 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 |