Кросс-стека лямбда и разрешения шлюза API с AWS-CDK - PullRequest
1 голос
/ 29 апреля 2019

У меня есть две базы кода.Один определяет сервис (Сервис A), который включает в себя лямбда-AWS, который запрашивает таблицу динамо-базы данных.

Другой определяет агрегирующий шлюз API, который должен вызывать лямбда-запросы нескольких служб.

Импорт шлюза APIлямбда, определенная в службе A с использованием перекрестной ссылки, и создает для нее лямбда-интеграцию:

    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 не были предоставлены разрешения на вызов.

В проекте aws-cdk для Service AIдобавить следующее:

queryTracksFunction.grantInvoke(new ServicePrincipal('apigateway.amazonaws.com'))

Когда я пытаюсь развернуть службу, я получаю эту ошибку:

Ошибка: невозможно использовать токены в идентификаторе конструкции: Invoke {"Service": ["$ {Token [TOKEN.139]}"]}

1 Ответ

1 голос
/ 29 апреля 2019

Это ошибка.В качестве обходного пути в вашей Службе A вы можете сделать:

queryTracksFunction.addPermission('APIGateway', {
  principal: new iam.ServicePrincipal('apigateway.amazonaws.com')
});
...