【发布时间】:2021-01-28 19:38:50
【问题描述】:
我有这样的代码
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?
编辑:
问题陈述:
尝试对 aws lambda 函数进行 docker 化。为此,我需要 在本地测试 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 build 中的秘密。 我认为这是由于我在本地没有 aws 可能存在的一些奇怪的配置问题,因此我想从使用 docker 中的本地数据库开始,并使用 get_local_secrets 方法 获取秘密。
有什么想法吗?
【问题讨论】:
-
AWS 也有 windows 机器......但也许你应该展示一下 Mac 或 Unix 之间具体需要做什么不同的事情?或者为什么你需要 Docker 在 AWS 中运行时将其视为 Mac?
-
如上所述,容器内的平台始终是 Linux。如果您希望能够在本地运行该容器并知道它正在本地运行,为什么不使用命令行参数或环境变量,您可以签入您的代码?所以你会运行
docker run my_container --local_test之类的东西。 -
你能确切地展示你想要做什么吗?这听起来像XY Problem
-
更新了您实际要求的标题,但如果您需要模拟 AWS secretsmanager,这可能会有所帮助github.com/localstack/localstack
-
另一种解决方案可能是围绕 boto-client 进行 try-except,然后回退到一些环境变量