python - 如何测试进程是否在 AWS 上“在云中”
问题描述
我有一个 python 应用程序,它应该通过 AWS 管道远程运行并使用机密来获取参数,例如数据库凭证。在本地运行应用程序时,参数是从parameters.json
文件加载的。我的问题是如何测试我远程运行(所以替换IN_CLOUD_TEST
):
import boto3
from json import load
if [IN_CLOUD_TEST]:
params_raw = boto3.client('ssm').get_parameters_by_path(Path='/', Recursive=True)['Parameters']
params = format_params(params)
else:
with open('parameters.txt') as json_file:
params = load(json_file)
我当然可以使用 try/except,但必须有更好的东西。
解决方案
您可以使用 AWS API 进行检查,但一种更简单的替代方法(并且不需要进行 HTTP 调用,帮助您减少一些延迟)是在远程服务器上设置一个环境变量,告诉它它是生产服务器并读取它从代码。
import boto3
from json import load
from os import getenv
if getenv('IS_REMOTE', False):
params_raw = boto3.client('ssm').get_parameters_by_path(Path='/', Recursive=True)['Parameters']
params = format_params(params)
else:
with open('parameters.txt') as json_file:
params = load(json_file)
您也可以应用相同的逻辑,但在您的服务器应该是测试服务器时定义一个等于true的变量,并将其设置在本地测试机器上。
推荐阅读
- php - PHP preg_match_all 在二进制数据上失败
- awk - 如何从linux中的两个文件中选择匹配的数据?
- angular6 - Angular flex布局如何有条件地添加fxLayoutAlign
- bash - 使用 pid 杀死正在运行的 sh 脚本
- unity3d - 产量返回新的 WaitForSeconds 不起作用
- node.js - Mogoose findOneAndUpdate 回调不是函数
- c# - 在 Windows 服务中使用 TPL 进行并行处理
- python - 跳过拆分字符
- java - 为什么 Spring Data MongoDB 拒绝聚合管道中包含 $ 的字段名称?
- python - 如何使用 random.choice 将用户输入随机加入存储在数组中的字符串