我正在用Python 3.8编写一个lambda函数。该函数使用 boto3 与发电机连接:
db = boto3.resource('dynamodb', region_name='foo', aws_access_key_id='foo', aws_secret_access_key='foo')
这就是我在本地机器上开发时所拥有的,需要测试该功能。但是,当我将其部署到 lambda 时,如果我设置了正确的 IAM 角色和策略,我只需删除凭证,我的函数将连接到 dynamodb。例如,此代码在部署到 lambda 时可以正常工作:
db = boto3.resource('dynamodb', region_name='foo')
问题是,如何在将代码推送到 lambda 方面来管理它?我正在使用 AWS SAM 部署到 AWS。现在我所做的是一旦我完成了我的函数开发,我手动删除aws_access_key_id='foo'
和aws_secret_access_key='foo'
部分,然后使用 SAM 部署函数。
一定有更好的方法吗?我可以将它们嵌入到我的 IDE 中吗?我正在使用PyCharm。这会是更好的方法吗?如果没有,还有什么?
你永远不应该像这样在代码中放置凭据。
在本地运行代码时,使用 AWS CLIaws configure
命令将本地凭证存储在~/.aws/config
文件中。AWS 开发工具包将自动查找该文件以获取凭证。
在 sam 中,您可以使用 sam local invoke 或 sam local start-lambda 在本地调用函数。
它们都采用--profile
参数:
要使用的AWS 凭证配置文件。
这将确保您的本地 lambda 环境使用正确的凭证执行,而无需在代码中对其进行硬编码。随后,您可以测试代码而无需修改,否则在对密钥 ID 和私有密钥进行硬编码时需要修改。
您可以使用环境变量。
环境变量既可以在 pycharm 中配置,也可以在 AWS Lambda 和 AWS SAM 中配置。
如 Lambda 最佳实践中所述:"使用环境变量将操作参数传递给函数。例如,如果您要写入 Amazon S3 存储桶,而不是对要写入的存储桶名称进行硬编码,而是将存储桶名称配置为环境变量。
您还可以使用环境变量来指定正在使用的环境,然后可以使用该变量显式确定是否需要凭据。