Вызовите лямбда-функцию с интеграцией прокси из другой лямбда-функции без прохождения через шлюз Api - PullRequest
0 голосов
/ 28 июня 2019

Я развернул две лямбда-функции с интеграцией прокси в AWS.На каждую из них ссылаются из соответствующей записи API Gateway с использованием подстановочного знака прокси:

enter image description here

Идея состоит в том, чтобы иметь два API, по одному на функцию, давайтеПредположим, это то, что они предлагают:

API 1 -> Lambda 1 -> ms-user

GET /users
GET /users/{userId}
POST /user

API 2 -> Lambda 2 ->ms-департаменты

GET /departments
POST /departments

Некоторые операции из Lambda 2 должны вызывать Lambda 1, например: GET /departments необходимо получить информацию о пользователе, GET /users/{userId}.

Я мог бы заставить Lambda 2 вызывать API Lambda 1, но мне интересно, есть ли способ вызвать эту лямбду напрямую с помощью AWS Java SDK без повторного прохождения через шлюз.В таком случае, как я могу указать конечную точку целевой лямбды?

API 2 -> Lambda 2 -> Lambda 1

вместо

API 2 -> Lambda 2 -> API 1 -> Lambda 1

1 Ответ

0 голосов
/ 28 июня 2019

Ключом для достижения этого является передача запроса, содержащего определенные ожидаемые поля, например:

{
    "path": "/users/1234D",
    "httpMethod": "GET",
    "headers":  null,
    "multiValueHeaders": {
        "Host": [
            "xxxx.execute-api.eu-west-1.amazonaws.com"
        ]
    }
}

Код Java / Kotlin будет:

        val region = Regions.fromName("eu-west-1")
        val builder = AWSLambdaClientBuilder.standard().withRegion(region)
        val client = builder.build()
        val req = InvokeRequest().withFunctionName("ms-user")
                .withPayload("""{
                                      "path": "/users/${req.userId}",
                                      "httpMethod": "GET",
                                      "headers":  null,
                                      "multiValueHeaders": {
                                        "Host": [
                                          "xxx.execute-api.eu-west-3.amazonaws.com"
                                        ]
                                      }
                                    }""")
        val result = client.invoke(req)
...