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