Python(Boto 3) Lambda 함수에서 "unknown service", "parameter validation failed", "object has no attribute" 오류가 발생하는 이유는 무엇입니까?

최종 업데이트 날짜: 2019년 9월 26일

Python으로 작성된 AWS Lambda 함수를 실행할 때 "unknown service", "unknown service" 또는 "object has no attribute"와 같은 오류가 발생합니다. 이러한 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

이러한 오류는 Lambda 함수Python용 Lambda 런타임 중 하나를 사용하도록 구성되고 새로운 AWS 서비스 또는 최신 버전의 AWS API를 호출하려고 할 때 발생합니다. Lambda 실행 환경에서 제공되는 Python(Boto 3)용 AWS SDK가 최신 버전이 아닙니다. 일부 AWS 서비스 및 API에 대한 일부 인수가 누락되었을 수 있습니다.

Boto 3의 최신 버전을 사용하는 계층을 생성한 다음 해당 계층을 함수의 구성에 추가합니다.

해결 방법

참고: 이러한 지침은 가이드라인으로 제공되며 새 작업 디렉터리가 있다고 가정합니다. 기존 작업 디렉터리의 경우 Boto 3을 업그레이드하려면 botocore를 업그레이드해야 합니다. 특정 운영 체제 및 Python 구성 시 필요에 따라 수행하는 단계를 조정합니다.

pip 및 AWS CLI 설치

1.    Python 3 패키징용 pip3를 아직 설치하지 않았다면 설치합니다. 이전 버전의 pip가 있는 경우 업그레이드하십시오.

2.    pip3를 사용하여 AWS 명령줄 인터페이스(AWS CLI)를 설치 또는 업그레이드합니다. AWS CLI의 최신 버전에는 Lambda 계층 API 모델이 포함되어 있습니다.

계층을 생성하여 Lambda 함수에 추가

참고: 이 명령은 Linux/Unix/macOS 시스템에 대해서만 유효합니다. 명령에서 boto3-mylayre를 lib 폴더 및 Lambda 계층에 대해 선호하는 이름으로 바꿉니다.

1.    다음 명령을 실행하여 lib 폴더를 생성합니다.

LIB_DIR=boto3-mylayer/python
mkdir -p $LIB_DIR

2.    다음 명령을 실행하여 LIB_DIR에 라이브러리를 설치합니다.

pip3 install boto3 -t $LIB_DIR

3.    다음 명령을 실행하여 모든 종속성을 /tmp/boto3-mylayer.zip으로 압축합니다.

cd boto3-mylayer
zip -r /tmp/boto3-mylayer.zip .

4.    다음 명령을 실행하여 계층을 게시합니다.

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

명령은 다음과 같은 새 계층의 Amazon 리소스 이름(ARN)을 반환합니다.

arn: aws: lambda: region: $ ACC_ID: layer: boto3-mylayer: 1

5.    다음 명령을 실행하여 Lambda 함수의 구성에 계층을 추가합니다.

참고: myfunction을 함수의 이름으로 바꿉니다. arn: aws: lambda: region: ACC_ID: layer: boto3-mylayer: 1을 계층의 ARN으로 바꿉니다.

aws lambda update-function-configuration --function-name myfunction --layers arn:aws:lambda:region:ACC_ID:layer:boto3-mylayer:1

이제 Lambda 함수에서 모든 AWS 서비스 및 인수/키워드 인수를 사용할 수 있습니다.

팁: 함수 코드에서 print(boto3.__version__)print(botocore.__version__)를 사용하여 Boto 3 및 Botocore의 버전을 확인합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?