如何管理本地开发的 AWS 密钥

How to manage AWS Secret Keys for local development

我正在 Python 3.8 中编写 lambda 函数。该函数使用 boto3:

与 dynamodb 连接
db = boto3.resource('dynamodb', region_name='foo', aws_access_key_id='foo', aws_secret_access_key='foo')

这就是我在本地机器上开发并需要测试功能时所拥有的。但是,当我将它部署到 lambda 时,我只需删除凭据,我的函数就会连接到 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。那会是更好的方法吗?如果不是,还有什么?

您可以使用环境变量。

环境变量都可以配置, as well as in AWS Lambda and AWS SAM.

Lambda best practices 中所述:"Use environment variables to pass operational parameters to your function. For example, if you are writing to an Amazon S3 bucket, instead of hard-coding the bucket name you are writing to, configure the bucket name as an environment variable."

您还可以使用环境变量来指定正在使用的环境,然后可以使用它来明确确定是否需要凭据。

在 sam 中,您可以使用 sam local invoke or sam local start-lambda 在本地调用您的函数。

两者都带--profile参数:

The AWS credentials profile to use.

这将确保您的本地 lambda 环境使用正确的凭据 执行,而无需在您的代码中对其进行硬编码。随后,您可以在不进行修改的情况下测试您的代码,否则在对密钥 ID 和密钥进行硬编码时将需要进行修改。

你应该永远不要像这样在代码中输入凭据。

当 运行 本地代码时,使用 AWS CLI aws configure 命令将本地凭证存储在 ~/.aws/config 文件中。 AWS SDK 将自动查找该文件以获取凭证。