2016-07-30 1 views
0

J'ai une fonction AWS Lambda qui utilise un cluster ElastiCache Redis. Étant donné que le cluster Redis est «verrouillé» dans un VPC, la fonction Lambda doit également se trouver dans cette zone .AWS Lambda - utilise Kinesis sous VPC

Pour une raison quelconque, si le Lambda est attribué un IP d'un public subnet, qui a une Internet gateway - il ne peut toujours pas faire des liens vers l'extérieur (Internet), rendant ainsi impossible l'utilisation Kinesis.

Pour cela, ils suggèrent d'utiliser une passerelle NAT qui permet au Lambda de se connecter à l'extérieur. Fondamentalement, cela fonctionne pour moi - mais mon problème est l'argent. Cette solution est coûteuse pour une grande quantité de transferts de données et je cherche un moyen de le rendre moins cher.

Pour un petit POC que j'ai fait, j'ai payé ~$10. enter image description here

C'est trop pour ~30GB que mon pipeline de production se déroulera sur des centaines de gigabytes/mois.

Comment suggérez-vous que la fonction Lambda connecte l'extérieur (en particulier Kinesis) sans utiliser de passerelle NAT?

Merci!

+0

Pour que Lambda se connecte à l'extérieur d'Internet à partir d'un VPC avec IGW, vous devez ajouter à la fois les ACL réseau entrantes et sortantes pour autoriser le trafic HTTP. Êtes-vous sûr d'avoir ajouté une liste de contrôle d'accès sortante à Lambda? – error2007s

+1

@ error2007s ce n'est pas tout à fait correct. Il nécessite toujours une passerelle NAT. –

+0

Ou une instance NAT * * @ MarkB. –

Répondre

2

sans utiliser de passerelle NAT?

Utilisez une instance NAT .

Vous devez avoir une de ces deux choses pour n'importe quoi dans VPC pour accéder à Internet à partir d'une adresse IP privée.

Les instances NAT correspondaient exactement à ce qui était toujours fait dans VPC, jusqu'à ce que le service de passerelle NAT relativement nouveau soit déployé.

Vous pouvez également utiliser une passerelle NAT, qui est un service NAT géré offrant une meilleure disponibilité, une bande passante plus élevée et nécessitant moins d'efforts administratifs. Pour les cas d'utilisation courants, nous vous recommandons d'utiliser une passerelle NAT plutôt qu'une instance NAT.

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

Bien sûr, il est plus facile, mais cela coûte plus cher. Beaucoup plus. La différence la plus significative dans ce cas est qu'avec une instance NAT, vous payez un tarif forfaitaire pour l'utilisation du matériel, qui peut être un t2.nano peu coûteux, 5 $/mois. Le service de passerelle NAT est une solution à haute puissance avec une capacité de mise à l'échelle presque infinie, dont le prix est calculé en conséquence. Une instance NAT est seulement aussi bonne que le matériel sur lequel vous avez choisi de l'exécuter, mais je trouve que t2.nano et t2.micro sont tout à fait adéquats pour les charges de travail nécessitant moins de 250 Mbit/s de connectivité Internet.

Utilisez le lien ci-dessus pour en savoir plus.

+0

Que se passe-t-il si l'instance 'NAT' ne peut pas gérer la charge? Sur les temps de sélection, j'ai eu 1200 instances/minute de lambda en cours d'exécution chaque essaie d'envoyer «1 Mo» avec le mécanisme de retry-backoff. Je ne suis pas sûr que 250 Mbit/s soient suffisants, mais je ne sais pas comment estimer la charge. – johni

+0

De plus, on dirait qu'une instance 'NAT' est un point de défaillance unique. Comment gérer un cluster d'instances NAT et équilibrer la charge sur ces instances? Cela ressemble à un peu de mal de tête, êtes-vous d'accord? Je commence à penser que je suis mieux avec la passerelle 'NAT'. – johni

+2

@johni Compte tenu de votre cas d'utilisation, vous seriez certainement mieux avec une passerelle NAT, mais vous avez déclaré qu'une passerelle NAT était trop chère et que vous aviez besoin de quelque chose de moins cher ... Une passerelle NAT gérée va être meilleure pour vous qu'un NAT exemple à tous égards, sauf le coût. –

1

Aucune adresse IP publique ne sera affectée aux instances de la fonction Lambda, quel que soit le type de sous-réseau VPC utilisé. Une passerelle NAT est la seule solution à fournir une fonction Lambda dans un VPC avec accès aux ressources externes. le VPC (comme Kinesis). Si cela ne fonctionne pas pour vous en raison du coût, vous pouvez envisager d'exécuter un serveur Redis sur une instance EC2 avec une adresse IP Elastic, ce qui permettrait à la fonction Lambda de se connecter sans être à l'intérieur du VPC. Une alternative similaire serait d'utiliser RedisLabs au lieu d'ElastiCache.

+0

Je vois ce que vous voulez dire, mais c'est ce qui se passe avec 'AWS', vous pouvez exécuter un cluster' Redis' bien que vous n'ayez aucune idée de ce qu'il faut gérer le cluster. Vous venez de définir le nombre de répliques et AZ multiples pour garantir la haute disponibilité. Je n'ai aucune connaissance en faisant cela tout seul. – johni

+0

@johni C'est pourquoi j'ai aussi recommandé RedisLabs, qui gère aussi bien les choses pour vous qu'ElastiCache. Il semblerait que vous deviez probablement payer pour une passerelle NAT, ou déplacer votre tâche de Lambda vers une instance EC2. –

+0

Je vais examiner l'option RedisLabs. Pour vous dire la vérité, je commence à détester Amazon pour le verrouillage des clusters 'ElastiCache' dans un' VPC'. Savez-vous quelle est la justification pour faire une telle chose? – johni