aws-lambda - 如何授权 Lambda 函数发布到 BigQuery?
问题描述
在过去的两天里,我一直被这个问题困扰。我想使用 Lambda 作为 Cron 操作从我的数据库中获取数据并将其发布到 BigQuery。
我想知道如何使用我的 Lambda 函数中的服务帐户文件授权对 BigQuery 的访问。
语境
我正在使用以下内容:
- 用于部署我的 Lambda的无服务器存储库。
- BigQuery SDK @google-cloud/bigquery
尝试
- 在我的本地使用中一切正常
sls invoke local --function main
。我已经GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
在我的.env
. 但是,显然/path/to/key.json
是本地路径。 - 作为测试,我尝试将我的服务帐户文件放入项目的根目录并设置
GOOGLE_APPLICATION_CREDENTIALS=./key.json
(注意我使用了相对路径)。这在本地或云中不起作用。是的,我知道这不是好的做法——我只是想让它发挥作用。我相信这可能是 WebPack 的事情,尽管我对如何使用 WebPack 一无所知。 - 我还考虑过可能使用 AWS KMS 加密 json 并将其作为键值对存储在参数存储中(这是我最终想要使用它的方式)。但是,我注意到 BigQuery 需要接受文件路径而不是秘密本身,请参见此处。
问题
所以这是我的问题:
- 是否可以使用无服务器框架使用文件路径和文件连接到 BigQuery
.env
? - 为什么 Google 不允许您使用访问密钥连接到 BigQuery?相反,我必须指定我的文件的路径。
- 有没有办法在 KMS 中存储文件并在部署到 Lambda 时对其进行解密?
解决方案
我知道这很旧,但我是怎么做到的:
我使用 cred.json 文件创建了一个lambda 层,并将 lambda 层附加到在我的 serverless.yml 中使用 gcp 大查询的特定函数。
我在 .yml 之外创建它,因为我不希望我的 cred.json 成为我在 github 中的团队存储库的一部分(安全问题)。
使用 lambda 层,在每个 lambda 启动时,该文件将在本地机器的路径中可用:'/opt/cred.json'
将以下内容添加到 serverless.yml 中的功能块中:
layers:
- arn:aws:lambda:{$region}:{$account):layer:lambda-layer-gcp-bigquery-keyfile:1
推荐阅读
- python - __getitem__ 返回阻止算术运算符重载的继承数据帧访问器
- sql - 在 SQL 中使用游标迭代更新有什么好处?
- jwk - 如何将 JWK 与 spring 一起使用?
- r - 如何从另外两个准备第三个 data.frame
- laravel-8 - 如何使用 Laravel 查询生成器编写此查询?(我可以使用 Laravel eloquent 得到相同的结果。)
- firebase - 参数类型“用户?” 不能分配给参数类型“未来”
- c++ - 使另一个函数可以访问本地结构实例 (C++)
- apache-spark - 使用 spark-redis 加载数据集的问题
- node.js - Mongoose countDocuments 未按预期返回
- firebase - 后台推送通知 iOS Firebase