2017-11-14 339 views
6

Bir proxy'nin arkasındaki dahili bir web sitesine bağlanılması gereken bir AWS Lambda işlevim var. Benim kodda aşağıdaki yapıyorum:AWS'deki Python istekleri Lambda proxy'nin arkasındaki siteye bağlanamıyor

from botocore.vendored import requests 

https_proxy = "https://myproxy:myport" 
proxyDict = { 
      "https" : https_proxy 
    } 
request.get("https://myurl.json", proxies=proxyDict) 

bu Koşu bana aşağıdaki hata iletisini verir:

HTTPSConnectionPool (host = 'myproxyhost', liman = 443): Maksimum url ile aşıldı tekrar indirilmesi: myurl. json (ProxyError tarafından neden olunan ('Proxy'ye bağlanılamıyor.', gaierror (-2, 'Ad veya hizmet bilinmiyor')))

Bağlanabileceğimi onaylamak için proxy URL'yi google.com ile değiştirmeyi denedim diğer siteler (proxy olmadan).

Lambda'nın çalıştırdığı adres alanı proxy tarafından engelleniyor gibi görünüyor.

Bunun işe yaraması için isteklerle ve lambda ile ayarlamam gereken başka bir şey var mı?

+2

Lambda işlevinize bir çevre değişkeni olarak https_proxy ekleyebilirsiniz. Senin için çalışmalı. –

+0

, VPC içinde çalışan dahili web sitenizdir. Öyleyse, lambda'yı aynı VPC içinde çalışacak şekilde yapılandırabilir ve iç isimleri çözebilirsiniz .. – toske

+0

Bağlanmaya çalıştığım proxy web sitesi, VPC'nin bir parçası değildir. –

cevap

1

Lambda ortam değişkenlerinden yararlanabilir ve lambda işlevine bir ortam değişkeni olarak https_proxy ekleyebiliriz. lambda fonksiyonunuz web sitesine proxy üzerinden erişebilir.

+0

Bu yalnızca bir anahtar-değer çifti oluşturmaz. kodda tanınan? Başka faydası var mı? –

+0

http_proxy dışa aktarma işlemini çalıştırmakla eşdeğerdir ve kodlu veya kodsuz olarak kullanılabilir. Kodunuzda açıkça okumalı ve tekrar ayarlamamalısınız. –

1

Bunların iki çocuğu var security groups ve subnets. Güvenlik grubunu sağlayarak lambda'nızın proxy'nin alt ağına erişmesine izin vermeniz gerekir. Here adım öğretici adım ...

+0

Bu öğretici, Lambda işlevinin bir VPC'deki bir şeyle bağlantı kurması gerektiğinde, ancak bağlanması gereken sitenin bir VPC'de değil, ancak bir proxy gerektirdiği durumdaymış gibi görünüyor. Lambda ile aynı role sahip bir EC2'ye sahip olduğumda, EC2 bir curl komutu ve bağlanmak istediğim sitenin bağlantısını kullanarak Lambda'ya ulaşabilir. –

+0

noktayı kaçırdığım için üzgünüm - 'aws lambda giden bağlantı '. Örneğin, bu derste https://medium.com/@philippholly/aws-lambda-enable-outgoing-internet-access-within-vpc-8dd250e11e12 –

1

DÜZENLEME geçerli: soruyu okuduktan sonra yine hata ad çözümlemesi (-2, 'Name or service not known') kaynaklandığını fark etti. VPC'niz için dahili Route53 kullanıyorsanız, lambda işlevi VPC'nin DNS sunucularını kullanacağından aşağıdaki çözüm hala çalışmalıdır.

Ya lambda işlevi, proxy örneğinizin aynı alt ağında çalışmıyor veya güvenlik grubu bağlantıyı engelliyor gibi görünüyor. Bunu düzeltmek için:

  • VE senin alt içinde yürütülecek güvenlik grubunu kullanmak için lambda fonksiyonu güncelleyin lamda işlevi proxy ana
  • üzerinde port 443 bağlanmasına izin vermek için bir güvenlik grubu oluşturun:

Bu komut dosyası bunu yapmalıdır:

#!/bin/bash 
# Fill the variables bellow with your vpc and subnet id 
VPC_ID="" 
SUBNET_IDS="" 
FUNCTION_NAME="" 

SEC_GROUP=$(aws ec2 create-security-group --group-name 'lambda-proxy' --vpc-id $VPC_ID --description 'Lambda/proxy communication' --output text) 
aws ec2 authorize-security-group-ingress --group-id ${SEC_GROUP} --protocol tcp --port 443 
aws lambda update-function-configuration --function-name $FUNCTION_NAME --vpc-config SubnetIds=$SUBNET_IDS,SecurityGroupIds=$SEC_GROUP 

Sonra oluşturulan güvenlik grubunu senin ins atamak tance.

Yardım etmek için yardımcı olur um

+0

Bilgi için teşekkürler ... şimdi deneme. –

+1

Yanıtın kredisini size verdiğimden, bu bana doğru yönde işaret ediyor. Farklı bir VPC'den proxy edilen URL ile bağlantı kurabildim ve bu sayede, kaçtığım VPC'nin bir güvenlik grubu yanlış yapılandırması olduğuna inanmamı sağladı. –