我正在开发使用go SDK的基于AWS Lambda的应用程序。
我有多个函数可以调用DynamoDB API。
当前,我正在创建会话的每个函数中。
我正在考虑,如果我不能创建可以创建会话的通用方法,那么我会考虑。此会话可由其他功能使用。
代码段如下-
func GetDynamoDbConnection(customerId string) *dynamodb.DynamoDB {
roleArn := constants.IAM_ROLE_ARN_PREFIX + constants.AWS_ACCOUNT_ID + ":" + constants.IAM_ROLE_STR + constants.IAM_CUST_ROLE_PREFIX + "-" + customerId
sess := session.Must(session.NewSession())
creds := stscreds.NewCredentials(sess, roleArn)
dynamoDbSession := dynamodb.New(sess, &aws.Config{Credentials: creds})
return dynamoDbSession
}
我称这个函数如下-
dbInfo := utils.GetDynamoDbConnection(customerId)
但是当我使用此会话进行DynamoDb调用时,它不起作用。 我收到一个错误-访问被拒绝。
但是,如果我在使用会话的同一函数中创建会话,那么它将起作用。
有指针吗?
答案 0 :(得分:1)
代码似乎很好。确保在 GetDynamoDbConnection 内部的函数调用获取apt参数并返回期望的数据。
在此处,错误访问被拒绝可能暗示 stscreds.NewCredentials 函数中可能未正确配置角色ARN 。因此,请检查 RoleARN 字符串是否具有适当的值。