2017-11-14 5 views
6

프록시가있는 내부 웹 사이트에 연결해야하는 AWS 람다 함수가 있습니다. 내 코드에서 나는 다음과 같은 일을 오전 :AWS의 Python 요청 람다가 프록시 뒤의 사이트에 연결할 수 없습니다.

from botocore.vendored import requests 

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

이를 실행하면 나에게 다음과 같은 오류 메시지를 제공합니다 :

HTTPSConnectionPool을 (호스트 = 'myproxyhost', 포트 = 443) : 최대가 URL과 초과 재시도 : myURL이 있습니다. json (프록시에 연결할 수 없습니다. ', gaierror (-2,'이름 또는 서비스를 알 수 없음 ')))

프록시 된 URL을 google.com으로 바꿔서 연결할 수 있는지 확인하려고했습니다. 다른 사이트 (프록시없이).

람다가 실행하는 주소 공간이 프록시에 의해 차단되는 것처럼 보입니다.

요청을 받고 람다가 작동하도록 설정해야 할 다른 것이 있습니까?

+2

람다 함수에 환경 변수로 https_proxy를 추가 할 수 있습니다. 그것은 당신을 위해 일해야합니다. –

+0

은 VPC 내에서 실행되는 내부 웹 사이트입니다. 그렇다면 동일한 VPC 내에서 실행되도록 람다를 구성하고 내부 이름을 해결할 수 있습니다. – toske

+0

연결하려는 프록시 된 웹 사이트가 VPC의 일부가 아닙니다 –

답변

1

람다 환경 변수를 사용할 수 있으며 https_proxy를 람다 함수에 환경 변수로 추가 할 수 있습니다. 람다 함수가 프록시를 통해 웹 사이트에 액세스 할 수 있습니다.

+0

이것은 키 - 값 쌍을 설정할 수 없습니다 코드에서 인식 되었습니까? 다른 이점이 있습니까? –

+0

실행중인 내보내기 http_proxy 과 동일하며 코드 사용 여부와 상관없이 사용할 수 있습니다. 코드에서 명시 적으로 다시 읽고 설정할 필요는 없습니다. –

1

그들 중 두 명이 security groupssubnets입니다. 보안 그룹을 제공하여 람다가 프록시의 서브넷에 액세스하도록 허용해야합니다. Here 단계 튜토리얼에 의해 단계 ...

+0

자습서는 람다 함수가 VPC의 무언가에 연결할 필요가있는 것처럼 보이지만 연결해야하는 사이트는 VPC가 아니지만 프록시가 필요합니다. 람다와 동일한 역할을하는 EC2가있을 때 EC2는 curl 명령과 연결하려는 사이트에 대한 링크를 사용하여 람다에 도달 할 수 있습니다. –

+0

'aws lambda outbound connection' 메시지가 누락되었습니다. 예를 들어이 자습서는 https://medium.com/@philippholly/aws-lambda-enable-outgoing-internet-access-within-vpc-8dd250e11e12 –

1

편집입니다 : 질문을 읽고 나면 다시 나는 오류가 이름 확인 (-2, 'Name or service not known') 때문이다 것을 깨달았다. VPC에 내부 Route53을 사용하는 경우 람다 함수가 VPC의 DNS 서버를 사용하므로 아래의 솔루션이 계속 작동해야합니다.

람다 함수가 프록시 인스턴스의 동일한 서브넷에서 실행되고 있지 않거나 보안 그룹이 연결을 차단하고있는 것 같습니다. 이 문제를 해결하려면 다음

  • 이 서브넷 내에서 실행되는 것을 보안 그룹을 사용하도록 람다 함수를 업데이트 람다 함수는 프록시 호스트
  • 에 포트 443에 연결할 수 있도록 보안 그룹을 만듭니다

이 스크립트를 수행해야합니다

#!/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 

그런 다음 생성 된 보안 그룹을 당신의 기능에 할당 tance.

희망 하시겠습니까?

+0

정보를 주셔서 감사합니다 ... 지금 실험 해보십시오. –

+1

이것이 정확한 방향으로 나를 가리키고 있기 때문에 대답에 대한 신뢰를 제공합니다. 다른 VPC에서 프록시 된 URL에 연결할 수 있었기 때문에 보안 그룹 구성이 잘못되어있는 VPC를 믿을 수있었습니다. –