【发布时间】:2019-04-29 17:53:26
【问题描述】:
我有两个代码库。其中一个定义了一项服务(服务 A),其中包含一个查询 dynamoDB 表的 AWS lambda。
另一个,定义了一个需要调用多个服务 lambda 的聚合 API 网关。
API 网关使用跨堆栈引用导入服务 A 中定义的 lambda 并为其创建 Lambda 集成:
const queryTrackFunction = lambda.Function.import(this, 'TrackQueryServiceQueryTrackFunction', {
functionArn: cdk.Fn.importValue('TrackQueryServiceStack:QueryTrackFunctionArn')
})
const customerApi = new api.RestApi(this, 'CustomerAPI')
const tracks = customerApi.root.addResource('tracks')
tracks.addMethod('GET', new api.LambdaIntegration(queryTrackFunction))
调用 API 时会失败,可能是因为 apigateway 服务没有被授予调用权限。
在服务 A 的 aws-cdk 项目中,我添加以下内容:
queryTracksFunction.grantInvoke(new ServicePrincipal('apigateway.amazonaws.com'))
当我尝试部署服务时出现此错误:
错误:无法在构造 ID 中使用标记:Invoke{"Service":["${Token[TOKEN.139]}"]}
【问题讨论】:
标签: amazon-web-services amazon-cloudformation aws-api-gateway aws-cdk