Как подключить экземпляр RDS при локальном запуске SAM?

Я использую SAM (модель приложения без сервера) для локального тестирования функций Lambda, которые подключаются к экземпляру Aurora RDS в облаке.

Используя следующую команду:

sam local invoke "lambda function name" --event event.json

Лямбда-функция выполняется, но когда она возвращает результаты SQL, она возвращает ноль в качестве вывода.

Как настроить контейнер Docker для связи с экземпляром RDS?

1 ответ

Как упоминалось в справке для локального вызова sam, вы можете подключить свой контейнер Docker к существующей сети Docker:

▶ sam local invoke --help                
...
  --docker-network TEXT           Specifies the name or id of an existing
                                  docker network to lambda docker containers
                                  should connect to, along with the default
                                  bridge network. If not specified, the Lambda
                                  containers will only connect to the default
                                  bridge docker network.

Итак, для перечисления ваших сетей Docker:

▶ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
25a03c8453a6        bridge              bridge              local
00de89cf09d0        host                host                local
41597d91a389        none                null                local

Затем, чтобы подключить контейнер Docker вашей функции Lambda к сети хоста:

▶ sam local invoke "lambda function name" --event event.json \
    --docker-network 00de89cf09d0

Обратите внимание, что вы также можете использовать переменную окружения SAM_DOCKER_NETWORK:

▶ SAM_DOCKER_NETWORK=00de89cf09d0 sam local invoke "lambda function name" \
    --event event.json

Как уже упоминалось здесь.

Предполагая, что хост-сеть может получить доступ к экземпляру RDS, это должно решить вашу проблему.

Проходить --docker-network host к sam local invoke

sam запускает вашу лямбда /api в контейнере докеров, используя мостовую сеть по умолчанию. Мостовая сеть имеет ограниченный доступ. Вы можете создать настраиваемую докер-сеть, которая имеет доступ к вашему RDS, или использовать "хост-сеть", которая имитирует сеть вашей ОС.

Когда вы устанавливаете докер, он создает сеть с именем host который вы можете назначить любому контейнеру докера и предоставить ему полный доступ ко всем IP/ портам, доступным вашей ОС.

Другие вопросы по тегам