Python(Boto 3) Lambda 함수에서 '알 수 없는 서비스', '파라미터 검증 실패', '객체에 속성이 없음' 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 11월 29일

Python(Boto 3) AWS Lambda 함수가 '알 수 없는 서비스', '파라미터 검증 실패' 또는 '객체에 속성이 없음' 오류를 반환합니다. 함수가 이러한 오류를 반환하는 이유는 무엇이며, 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

Python(Boto 3) Lambda 함수가 최신 버전이 아니라면 다음 오류 중 어느 것이든지 반환할 수 있습니다.

  • 알 수 없는 서비스
  • 파라미터 검증 실패
  • 객체에 속성이 없음

이러한 오류는 함수가 최신 버전의 Boto 3가 필요한 AWS 서비스 또는 AWS API를 호출하려고 할 때 발생합니다.

이 문제를 해결하려면 최신 버전의 Boto 3를 사용하는 Lambda 계층을 생성합니다. 그런 다음 함수의 구성에 계층을 추가합니다.

중요: 다음 절차에서는 최신 버전의 Botocore를 사용하고 있다고 가정합니다. 최신 버전의 Botocore를 사용하지 않는 경우 Botocore를 업그레이드해야 최신 버전의 Boto 3로 업그레이드할 수 있습니다. 특정 운영 체제 및 Python 구성에 적합하게 필요에 따라 수행하는 단계를 조정합니다.

해결 방법

참고: AWS CLI(AWS Command Line Interface) 명령을 실행할 때 오류 메시지가 표시되는 경우 AWS CLI 최신 버전을 사용 중인지 확인하세요.

Lambda 런타임이 기반으로 하는 운영 체제에서 Lambda 계층을 생성하는 것이 가장 좋습니다. 예를 들어, Python 3.8은 Amazon Linux 2 Amazon Machine Image(AMI)를 기반으로 합니다. 그러나 Python 3.7과 Python 3.6은 Amazon Linux AMI를 기반으로 합니다.

(사전 요구 사항) pip3 및 최신 버전의 AWS CLI를 설치합니다.

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

2.    pip3를 사용하여 AWS CLI를 설치하거나 업그레이드합니다. 참고: AWS CLI의 최신 버전에는 Lambda 계층 API 모델이 포함되어 있습니다.

최신 Boto 3 버전을 사용하는 Lambda 계층 생성

참고: 다음 AWS CLI 명령은 Linux, Unix, Mac 운영 체제에서만 작동합니다. 각 명령에서 boto3-mylayerlib 폴더 및 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)을 반환합니다.

Lambda 계층 ARN 예제

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

Lambda 함수의 구성에 새 계층 추가

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

중요: myfunction을 함수의 이름으로 바꿉니다. <layer ARN>을 계층의 ARN으로 바꿉니다.

aws lambda update-function-configuration --function-name myfunction --layers <layer ARN>

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

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