Дайте Lambda Invoke разрешение ApiGateway с одним развертыванием - PullRequest
1 голос
/ 08 марта 2019

Я написал ресурсы в моем serverless.yml, как показано ниже:

resources:
  Resources:
    RestApi :
      Type : AWS::ApiGateway::RestApi
      Properties :
        Body : ${file(./swagger.yaml)}
    LoginApiToInvokeLambda:
      Type: AWS::Lambda::Permission
      Properties:
        FunctionName: login
        Action: lambda:InvokeFunction
        Principal: apigateway.amazonaws.com

При развертывании sls произошла ошибка ниже:

Произошла ошибка: LoginApiToInvokeLambda - функция не найдена: arn: aws: lambda: ap-northeast-1: xxxxxxxxxxxx: функция: api-dev-login (Сервис: AWSLambda; код состояния: 404; код ошибки: ResourceNotFoundException

В начальном развертывании,Я думал, что разрешения были установлены перед созданием лямбда-функций. Поэтому я закомментировал LoginApiToInvokeLambda в моем serverless.yml. Я снова sls deploy, это успешно. Но ApiGateway не имеет разрешения для вызова лямбда. После этого я восстановил закомментированныечасть, и sls deploy. Наконец-то я смог дать ApiGateway разрешение Lambda invoke.

Есть ли способ сделать это одновременно?

1 Ответ

1 голос
/ 10 марта 2019

Вы можете использовать DependsOn функциональность CloudFormation в разделе resources.

resources:
  Resources:
    # ...
    LoginApiToInvokeLambda:
      Type: AWS::Lambda::Permission
      DependsOn: LoginLambdaFunction
      Properties:
        FunctionName: login
        Action: lambda:InvokeFunction
        Principal: apigateway.amazonaws.com

Я предположил, что ваша лямбда-функция - это login, которая переводится в LoginLambdaFunction. Если нет, обратитесь к документации без сервера на , как ресурсы получают имя .

Короче говоря, без сервера переводит вашу конфигурацию в шаблон CloudFormation, а раздел ресурсов позволяет вам настроить то, что генерируется, поэтому вы можете использовать DependsOn для решения вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...