Как подключить экземпляр 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/ портам, доступным вашей ОС.