我正在使用Go编写许多AWS Lambda函数。常用功能分为模块,例如,我有一个模块(M1),该模块根据DynamoDB提供与后备存储的接口实现(因此依赖于AWS Go SDK)。
在一个Lambda函数(F1)中,我导入M1,因此代码路径的依赖关系图如下所示:
F1 -> M1 -> SDK -> dynamodb.DynamoDB.PutItem
要成为AWS,我需要编写相应的IAM策略以允许F1执行PutItem
。
此刻,我将手动识别AWS开发工具包调用,并修复CloudWatch中记录的所有错误。
我的目标是确定是否有一种方法可以获取Go工具链,以识别从给定模块/导入中调用了哪些函数。
到目前为止,我可以尝试以下几种方法:
# this doesn't return much as most of my code lives within directories
# under main
go mod why "github.com/aws/aws-sdk-go"
# github.com/aws/aws-sdk-go
(main module does not need package github.com/aws/aws-sdk-go)
# this only identifies a single F1 {-> ...} -> SDK invocation
# but not all of them
grep -r github.com/aws/aws-sdk-go --include="*.go" \
| cut -f2 -d'"' \
| sort -u \
| xargs go mod why
我还没有介绍go build
和go mod why
的源代码,但是到目前为止,我还没有找到说服“为什么要去理解”简单的glob扩展/正则表达式以及相应的调用点。在二阶部门(即M1-> SDK)上,我也没有取得任何进展。