Lambda 함수를 사용하여 URI 연결 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon VPC 기반 AWS Lambda 함수에 연결 문제가 발생하여 오류가 발생했습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

원격 엔드포인트 또는 서비스를 대상으로 Amazon Virtual Private Cloud(VPC) Lambda 함수를 실행하려고 하면 연결 관련 오류가 발생합니다. 오류 메시지를 생성하는 네트워크 연결 문제 때문일 수 있습니다. 예를 들어 DynamoDB 테이블을 생성하려고 했지만, 작업 시간이 초과되었습니다.

해결 방법

테스트하려는 대상 함수의 네트워크 구성을 복제하는 테스트 함수를 생성합니다. 이는 대상 함수를 편집하여 문제 해결 로직을 추가할 수 없는 경우에 유용합니다. VPC 액세스를 위해 Lambda를 구성하는 방법에 대한 자세한 내용은 VPC의 리소스에 액세스하도록 Lambda 함수 구성을 참조하십시오.

다음은 정의된 테스트 함수의 예입니다.

import socket

def connect_tcp(event, context):
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  sock.settimeout(8)
  hostname = "www.amazon.com"
  port = 443
  server_address = (hostname, port) # Server address and port
  try:
    IPAddr = socket.gethostbyname(hostname)
    print("Hostname: " + hostname)
    print("Host IP:" + IPAddr)
    print("Attempting to connect ..")
    sock.connect(server_address)
    sock.shutdown(socket.SHUT_RDWR)
    print("connected")
  except Exception as e:
    print("-- Error --")
    print(e)
  finally:
    sock.close()

이 예제에서 소켓 시간 초과는 8초로 설정되어 있으며, 이 경우 해당 시간 내에 연결이 설정되어야 하고 그렇지 않으면 연결에 실패합니다. 필요한 경우 이 값을 조정할 수 있습니다.

소켓 라이브러리는 기본적으로 Python 런타임과 함께 번들로 제공되지 않는 런타임 종속성입니다. 이를 배포 패키지의 일부로 포함시키거나, 함수와 연결된 계층에 포함시킵니다. zip 아카이브를 사용하여 종속성을 배포하는 방법에 대한 자세한 내용은 .zip 파일 아카이브를 사용하여 Python Lambda 함수 배포를 참조하십시오. 종속성을 계층으로 배포하는 방법에 대한 자세한 내용은 Lambda 함수와 함께 레이어 사용을 참조하십시오.

참고: 대상 함수의 런타임을 복제하는 것이 가장 좋습니다. 테스트 함수는 Python으로 작성되었지만, 다른 런타임으로 포팅할 수 있습니다.

테스트 기능이 있는 상태에서 다음 단계를 사용하여 문제를 해결하십시오.

  1. 대상 함수가 연결을 설정하려는 변수와 일치하도록, 호스트 이름 및 포트 변수를 설정합니다.
  2. 대상 기능의 네트워크 구성(서브넷 및 보안 그룹)을 미러링합니다.
  3. 오버헤드를 수용할 수 있도록 함수 타임아웃 값을 설정합니다. 연결을 허용하려면 함수 시간 초과가 소켓 연결 시간 제한보다 높은지 확인하는 것이 가장 좋습니다.
  4. 테스트를 실행합니다.

테스트가 실패한다면, 조사해야 하는 연결 문제가 발생했을 수 있습니다. 테스트가 성공하면 Lambda Amazon VPC 환경(보안 그룹 포함)과 엔드포인트가 연결되어 있을 가능성이 높습니다. 이 경우 대상 함수와 해당 종속성에 문제가 있을 수 있습니다.

참고: 테스트 기능은 여러 개의 라우팅 프로파일을 갖춘 복수의 서브넷이 포함된 실패 대상 함수와 유사한 서브넷에서 시작하는 편이 가장 좋습니다.

장애가 발생한 서브넷을 알 수 없는 경우, 다음 단계에 따라 서브넷을 순환시켜 장애가 발생한 서브넷을 식별합니다.

  1. 첫 번째 서브넷을 지정하고, 실행 플랫폼에 배포하지 않으므로 가용성 경고를 무시하십시오.
  2. 함수를 테스트합니다.
  3. 다음 서브넷을 지정하고 다시 테스트합니다.
  4. 모든 서브넷을 확인할 때까지 이전 단계를 반복합니다.

AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠