Python 在不使用AWS secrets manager的情况下,使用secrets在本地测试Lambda函数

Python 在不使用AWS secrets manager的情况下,使用secrets在本地测试Lambda函数,python,docker,lambda,Python,Docker,Lambda,我有这样的代码 Unix = 'linux' Mac = 'darwin' if sys.platform == Unix do this elif sys.platform == Mac do this 我对sys平台进行了此检查,因为aws基于unix,因此如果sys.platform='Mac' 然后我在本地运行 我在尝试将此应用程序对接时遇到了麻烦,因为对接的构建基于linux, 因此,在这个if-else语句中,构建将运行第一个 即使我在建造码头工人,也是if-else的

我有这样的代码

Unix = 'linux'
Mac = 'darwin'
if sys.platform == Unix
   do this
elif sys.platform == Mac
   do this
我对sys平台进行了此检查,因为aws基于unix,因此如果sys.platform='Mac' 然后我在本地运行

我在尝试将此应用程序对接时遇到了麻烦,因为对接的构建基于linux, 因此,在这个if-else语句中,构建将运行第一个 即使我在建造码头工人,也是if-else的一部分 本地容器

是否可以在dockerfile中设置sys.platform

编辑:

问题陈述:

正在尝试对aws lambda函数进行dockerize。要做到这一点,我需要 本地测试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', '')
        ...
如您所见,如果sys平台是“darwin”, 那么这些秘密就是当地的秘密。 如果sys平台为“linux”,则机密将被提取 来自美国焊接学会

由于某些原因,我无法使用aws连接到数据库 由于tcp/ip错误,我的本地docker构建中存在机密。 我认为这是由于一些奇怪的配置问题,我没有aws可能有的本地配置问题,因此我想从docker中的本地数据库开始,并使用get_local_secrets方法 获取秘密


有什么想法吗?

我会使用环境变量suggestion,通过在运行时设置一些值在本地运行:

导入操作系统
如果os.environ.get('LOCAL_TEST','false')。lower().strip()=='true':
机密=本地机密()
其他:
#使用aws机密
并运行您的容器,如:

docker run-e LOCAL_TEST=为您的_映像设置真实值

AWS也有windows机器。。。但也许您应该说明Mac和Unix之间具体需要做哪些不同的工作?或者,当Docker在AWS中运行时,为什么需要Docker认为它是Mac?如上所述,容器中的平台始终是Linux。如果您希望能够在本地运行该容器,并且知道它正在本地运行,为什么不使用命令行参数或环境变量,您可以签入代码?所以您可以运行类似于
docker run my_container--local_test
之类的程序。您能准确地显示您正在尝试做什么吗?这听起来像是对您实际要求的标题进行了更新,但如果您需要模拟AWS secretsmanager,这可能有助于尝试另一种解决方案,除了boto客户端之外,然后回退到一些环境变量。如果bool(os.environ.get('LOCAL_TEST'))@onecricketer当然,这是可行的。我认为在配置中将其设置为某个bool-ish变量可能更具可读性,但这就是主观原因为什么要降低并去除?@coderboi,以防它读取换行符或有人意外地将
设置为True
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()