Шлюз AWS API и функция Lambda, развернутые через terraform - Ошибка выполнения из-за ошибки конфигурации: неверные разрешения для функции Lambda - PullRequest
0 голосов
/ 23 февраля 2019

Я развертываю шлюз API и функцию Lambda вместе через Terraform, и функция Lambda предназначена для запуска шлюзом API.После успешного развертывания ресурсов я тестирую шлюз API и получаю ответ:

{"message": "Внутренняя ошибка сервера"}.

Фактические журналышлюз API говорит:

Выполнение не выполнено из-за ошибки конфигурации: недопустимые разрешения для функции Lambda

Я могу заставить работать фактическую функцию api-lambda, перейдя краздел запроса интеграции шлюза API, повторный выбор моей существующей функции и «сохранение» ее снова с небольшой галочкой, но это нарушает автоматизацию, и я хочу, чтобы это работало без необходимости каждый раз выполнять этот шаг вручную.Не уверен, что это ошибка в Terraform / AWS или я что-то не так делаю.(Обнаружил, что кто-то задает тот же вопрос, но использует SAM, но не отвечает: Выполнение не выполнено из-за ошибки конфигурации: недопустимые разрешения для функции Lambda )

Моя текущая настройка развертывает API через swagger jsonфайл, и Lambda Invoke ARN используется в качестве URI в разделе интеграции этого файла.Я попытался переключить это между жестко закодированным ARN и переменной безрезультатно.Я также попытался включить ресурсы aws_api_gateway_deployment и aws_api_gateway_integration, но я подумал, что, если я уже использую файл swagger, его использование может конфликтовать с тем, что файл swagger уже создает.

Мой main.tf для моего модуля api_gateway выглядит следующим образом:

resource "aws_api_gateway_rest_api" "post_session" {
    name = "${var.api_gateway_name}"
    body = "${data.template_file.post-session.rendered}"

    endpoint_configuration {
        types = ["PRIVATE"]
    }
}

data "template_file" "post-session" {
    template = "${file("../source/aapt-ual-post-session-v1-swagger-apigateway.json")}"

    vars {
        session_init_arn = "${var.session_init_function_arn}"
    }
}

Мой соответствующий раздел файла сваггера выглядит так:

"x-amazon-apigateway-integration": {
      "uri": "${session_init_arn}",
      "responses": {
        "default": {
          "statusCode": "200"
        }
      },
      "requestTemplates": {
        "application/json":  ....

И мой lambda_permissionСекция триггера / api_gateway моего модуля Lambda выглядит следующим образом:

resource "aws_lambda_permission" "post_session_trigger" {
     statement_id  = "Allow_My_Post_Session_Invoke"
     action        = "lambda:InvokeFunction"
     function_name = "${aws_lambda_function.init_function.function_name}"
     principal     = "apigateway.amazonaws.com"
     source_arn = "arn:aws:execute-api:us-east-1:${var.account_id}:${var.post_session_id}/v1/POST/aa/ual/session"

}

Дайте мне знать, если у вас есть предложения, спасибо!

1 Ответ

0 голосов
/ 25 февраля 2019

В соответствии с предложением Дениса Веерасири , я проверил права доступа Lambda после повторного выбора имени функции Lambda в разделе интеграции шлюза API и добавил еще одну политику.Мне нужно было изменить v1 на * в source_arn в ресурсе функции Lambda.Таким образом, новый триггер API-шлюза в моем модуле Lambda выглядит следующим образом:

resource "aws_lambda_permission" "post_session_trigger" {
     statement_id  = "Allow_My_Post_Session_Invoke"
     action        = "lambda:InvokeFunction"
     function_name = "${aws_lambda_function.init_function.function_name}"
     principal     = "apigateway.amazonaws.com"
     source_arn = "arn:aws:execute-api:us-east-1:${var.account_id}:${var.post_session_id}/*/POST/aa/ual/session"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...