2016-07-30 2 views
0

У меня есть функция AWS Lambda, которая использует кластер ElastiCache Redis. Поскольку кластер Redis «заблокирован» в VPC, функция Lambda должна также находиться в этом VPC.AWS Lambda - использование Kinesis под VPC

По какой-то причине, если Lambda выделяется в IP из в public subnet, который имеет Internet gateway - это до сих пор не может сделать подключение к внешней (Интернет), что делает невозможным использование Kinesis.

Для этого они предлагают использовать шлюз NAT, который позволяет подключить Lambda к внешней стороне.

В принципе, это работает для меня - но моя проблема - это деньги. Это решение является дорогостоящим для большого объема передачи данных, и я ищу способ сделать его более дешевым.

Для небольшого POC, который я сделал, я заплатил ~$10. enter image description here

Это слишком много для ~30GB как мой производственный трубопровод будет работать сотни gigabytes/месяц.

Как вы предлагаете, чтобы функция Lambda подключалась наружу (в частности, Kinesis) без использования шлюза NAT?

Спасибо!

+0

Чтобы Lambda мог установить соединение с внешней стороной интернета от VPC с помощью IGW, вы добавили как входящие, так и исходящие сетевые списки ACL, чтобы разрешить HTTP-трафик. Вы уверены, что добавили Outbound ACL в Lambda? – error2007s

+1

@ error2007s это не совсем правильно. Он по-прежнему требует шлюза NAT. –

+0

Или экземпляр NAT * * @MarkB. –

ответ

2

без использования шлюза NAT?

Использовать NAT пример.

У вас должна быть одна из этих двух вещей для чего-либо в VPC для доступа к Интернету с частного IP-адреса.

Ячейки NAT были точно такими, как это всегда делалось в VPC, пока не была развернута относительно новая услуга NAT Gateway.

Вы также можете использовать NAT-шлюз, который является управляемой услугой NAT, которая обеспечивает лучшую доступность, большую пропускную способность и требует меньших административных усилий. Для случаев общего использования мы рекомендуем использовать NAT-шлюз, а не экземпляр NAT.

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html

Конечно, это легче, но это стоит дороже. Гораздо больше. Самым существенным отличием в этом случае является то, что с помощью экземпляра NAT вы платите фиксированную ставку за использование аппаратного обеспечения, что может быть недорогим t2.nano, $ 5/mo.

Служба NAT Gateway - это высокопроизводительное решение с почти бесконечной масштабируемостью и соответствующим образом оценено. Экземпляр NAT такой же хорошо, как и аппаратное обеспечение, на котором вы его запускаете, но я нахожу t2.nano и t2.micro достаточно адекватными для рабочих нагрузок, требующих менее 250 Мбит/с подключения к Интернету.

Используйте приведенную выше ссылку, чтобы узнать больше.

+0

Что произойдет, если экземпляр 'NAT' не сможет обработать нагрузку? Во время выборки у меня было 1200 экземпляров в минуту лямбда, каждый из которых пытается отправить «1MB» с механизмом повторного возврата. Я не уверен, что 250 Мбит/с достаточно, но я не знаю, как оценить нагрузку. – johni

+0

Более того, выглядит как 1 экземпляр 'NAT' - это одноточечный отказ. Как управлять кластером экземпляров «NAT» и балансировать нагрузку на них? Похоже на головную боль, согласитесь ли вы? Я начинаю думать, что лучше с помощью шлюза «NAT». – johni

+2

@johni Учитывая ваш прецедент, вам определенно будет лучше с NAT-шлюзом, однако вы заявили, что шлюз NAT был слишком дорогим, и вам нужно было что-то дешевле ... Управляемый шлюз NAT будет лучше для вас, чем NAT экземпляр во всех отношениях, кроме стоимости. –

1

экземплярам функции Lambda никогда не будет присвоен публичный IP-адрес, независимо от типа подсети VPC, в которую вы их размещаете. Шлюз NAT - единственное решение для обеспечения функции Lambda внутри VPC с доступом к ресурсам, которые находятся за пределами VPC (например, Kinesis).

Если это не будет работать для вас из-за стоимости, вы можете запустить запуск сервера Redis в экземпляре EC2 с помощью Elastic IP, который позволит подключать функцию Lambda, не находясь внутри VPC. Аналогичной альтернативой будет использование RedisLabs вместо ElastiCache.

+0

Я вижу вашу точку зрения, но это что-то вроде «AWS», вы можете запустить кластер Redis, хотя вы и не представляете, как управлять кластером. Вы просто установите количество реплик и мульти-AZ, чтобы гарантировать высокую доступность. Я не знаю, как это сделать сам. – johni

+0

@johni, поэтому я также рекомендовал RedisLabs, который будет управлять вещами для вас так же хорошо, как ElastiCache. Похоже, что вам, вероятно, придется заплатить за NAT-шлюз, или переместите свою задачу из Lambda и на экземпляр EC2. –

+0

Я рассмотрю вариант RedisLabs. По правде говоря, я начинаю ненавидеть Amazon за блокировку кластеров ElastiCache внутри 'VPC'. Знаете ли вы, какое оправдание для этого? – johni

Смежные вопросы