我有这样的代码
Unix = 'linux'
Mac = 'darwin'
if sys.platform == Unix
do this
elif sys.platform == Mac
do this
我对 sys 平台进行了此检查,因为 aws 是基于 unix 的,因此如果 sys.platform = 'Mac' 然后我在本地运行。
当我尝试对这个应用程序进行 dockerize 时遇到了麻烦,因为 dockerized 版本是基于 linux 的, 所以在这个 if-else 语句中,构建将运行第一个 即使我正在构建 docker,也是 if-else 的一部分 本地容器。
是否可以在 dockerfile 中设置 sys.platform?
编辑:
问题陈述:
尝试 dockerize 一个 aws lambda 函数。为此,我需要 在本地测试 lambda 函数。
我的 Lamba 函数组合如下所示:
app
lambda_function1
database.py
helper.py
functions
lambda_function1.py
这个lambda函数的主要目的是读取数据 从生产数据库,然后预测一些值 基于数据。
database.py
import helper
...
class DB:
def __init__(self):
self.secrets = helper.get_secrets()
self.db_name = self.secrets.get('DB', '')
self.db_host = self.secrets.get('Host', '')
self.db_password = self.secrets.get('Password', '')
...
helper.py
import sys
import boto3
....
def get_secrets():
secrets = {}
if sys.platform == constants.MAC_PLATFORM:
secrets = local_secrets()
return secrets
session = boto3.session.Session()
client = session.client(service_name='secretsmanager',
region_name='us-west-2')
secrets = get_aws_secrets()
如您所见,如果 sys 平台是 'darwin', 那么秘密将是本地秘密。 如果 sys 平台是 'linux',那么机密将被拉取 来自 aws。
由于某种原因,我无法使用 aws 连接到数据库 由于 tcp/ip 错误,我本地 docker 构建中的秘密。 我认为这是由于我在本地没有 aws 可能有的一些奇怪的配置问题,因此我想首先使用 docker 中的本地数据库,并使用 get_local_secrets 方法 获取秘密。
有什么想法吗?
答案 0 :(得分:1)
我会使用环境变量建议并通过在运行时设置一些值在本地运行:
import os
if os.environ.get('LOCAL_TEST', 'false').lower().strip() == 'true':
secrets = local_secrets()
else:
# use aws secrets
然后像这样运行你的容器:
docker run -e LOCAL_TEST=true your_image