Мы разрабатываем локально, используя SAM Local для вызова Lambda в API-шлюзе. SAM Local делает это с помощью контейнера Docker (максимально приближенного к среде выполнения узла Lambda). Мы хотим, чтобы эта лямбда имела доступ к некоторым данным в службе имитации API в форме некоторых серверов Node Express, работающих в другом контейнере (при необходимости это также можно было бы запускать локально). Оба контейнера находятся в созданной пользователем сети моста Docker, созданной следующим образом:
docker network create sam-demo
Служба имитации API запускается и добавляется в мостовую сеть:
docker run --network sam-demo --name mock -d -P mock:latest
Лямбда вызывается в режиме отладки и добавляется в мостовую сеть:
sam local start-api -t template.json -d 9229 --docker-network sam-demo
Проверка сети моста показывает, что есть локальная лямбда SAM (wizardly_knuth) и фиктивные элементы:
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"5ebfa4295a56e4df840676a2e214891543fd4e8cb271ed70ddd67946ab451119": {
"Name": "wizardly_knuth",
"EndpointID": "xxx",
"MacAddress": "02:42:ac:14:00:03",
"IPv4Address": "172.20.0.3/16",
"IPv6Address": ""
},
"d735c9aa840e4ce7180444cf168cd6b68451c9ca29ba87b7cb23edff11abea7b": {
"Name": "mock",
"EndpointID": "xxx",
"MacAddress": "02:42:ac:14:00:02",
"IPv4Address": "172.20.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
Теперь, каким должен быть URL-адрес, по которому лямбда-функция ударит имитацию? Согласно документам Docker, это должен быть IPv4Address фиктивного контейнера, т.е. http://172.20.0.2, но я не уверен, какой порт или как найти какой порт?
Я могу запустить макет и успешно проверить связь с локальным контейнером SAM, НО я не могу сделать то же самое с локальным контейнером SAM, поскольку в оболочке нет установленных команд ping, curl, nc или чего-либо еще.
Я не могу попасть в контейнер Mock прямо со своего компьютера, так как это Mac, и я считаю, что с этим есть проблемы.
Мы очень ценим любые советы или следующие шаги.
Большое спасибо,
Сэм