我正在使用 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
我还没有深入研究 and 的来源go build
,go mod why
但到目前为止,我还没有找到一种方法来说服“go mod why”来理解简单的 glob 扩展/正则表达式和相应的调用点。我也没有在二阶部门(即 M1->SDK)上取得任何进展。