我正在使用无服务器框架,并且我正在一次构建所有资源。我在 AWS cloudfront 查看器请求端有 lambda@edge 函数,该函数需要访问 cognito 用户池 ID。由于我无法将环境变量传递给 lambda@edge 函数,我别无选择,只能在 lambda@edge 函数中硬编码用户池 ID,这至少可以说是非常烦人的。但事情变得更糟,我无法获取用户池 ID,直到我部署所有内容然后选择用户池 ID 并将其硬编码到函数中,然后重新部署。这一切有更好的解决方案吗?
问问题
1772 次
2 回答
1
您可以将AWS Parameter Store中的敏感信息外部化。
与环境变量的主要区别在于它只能通过 API 调用使用。另一方面,它确实为您提供了很大的灵活性,可以根据需要在 Parameter Store 上更改值,并且保持 Lambda 函数不变。您还可以使用 IAM 角色控制对 Parameter Store 的访问,这为您提供了额外的安全层。
您可以查看本教程以了解如何从 AWS Parameter Store 存储/检索数据。
于 2019-04-11T13:41:57.910 回答
0
我在这里找到了一个很好的解决方案,使用 terraform,但是例如使用的方法是相同的:https ://transcend.io/blog/lambda-edge-functions-in-terraform
- 使用 terraform(或您选择的工具)创建一个包含您的配置的 JSON 文件(类似于 .env 文件)
- 从您的处理程序函数中读取它
- 使用 terraform 部署文件和函数(通过选择它作为目录)
import { readFileSync } from 'fs';
const config = JSON.parse(readFileSync('./config.json'));
作者使用了一个特殊的 terraform 模块,但您也可以手动执行此操作,甚至在每个环境中使用一个固定文件。
plaintext_params = {
userpool_id = var.userpool_id
client_id = var.client_id
userpool_region = var.userpool_region
ui_subdomain = var.ui_subdomain
scopes = join(" ", var.scopes)
client_secret_param_name = var.ssm_client_secret_param_name
}
我使用不同的 terraform模块来部署我的 Lambda@Edge 函数。
于 2021-11-24T09:23:25.357 回答