Python(Boto3) Lambda 함수에서 발생하는 "unknown service", "parameter validation failed" 및 "object has no attribute" 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Python(Boto3) AWS Lambda 함수가 "unknown service", "parameter validation failed" 또는 "object has no attribute"과 같은 오류를 반환합니다.

간단한 설명

최신 버전의 Boto3를 사용하지 않는 Python(Boto3) Lambda 함수는 다음 오류 중 하나를 반환할 수 있습니다.

  • unknown service
  • parameter validation failed
  • object has no attribute

이러한 오류는 함수가 최신 버전의 Boto3가 필요한 AWS 서비스나 AWS API를 호출하려고 할 때 발생합니다.
이 문제를 해결하려면, 최신 버전의 Boto3를 사용하는Lambda 계층을 생성해야 합니다. 이 작업은 수동으로 수행할 수도 있고 Docker를 사용할 수도 있습니다. Docker를 통해 Lambda 계층을 업그레이드하는 것이 더 효율적이며, 이렇게 하면 바이너리가 Lambda 운영 체제에 맞는지 확인할 수 있습니다.

**중요:**다음 절차에서는 사용자가 최신 버전의Botocore(GitHub에서)를 사용하고 있다고 가정합니다. 최신 버전의 Botocore가 없는 경우, 최신 Boto3 버전으로 업그레이드하기 전에 Botocore를 업그레이드해야 합니다. 사용자의 특정 구성 및 Python 구성에 필요한 대로 해결 방법을 구현하세요.

해결 방법

**참고:**AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

사용자 Lambda 런타임의 기반이 되는 같은 운영 체제에 Lambda 계층을 생성하는 것이 가장 좋습니다. 예를 들어, Python 버전 3.8 및 3.9는 Amazon Linux 2 Amazon Machine Image(AMI)를 기반으로 합니다. 하지만, Python 3.7 및 Python 3.6은 Amazon Linux AMI를 기반으로 합니다.

(사전 요구 사항) pip3와 최신 AWS CLI 버전을 설치하세요

1.    아직 설치하지 않았다면, pip 웹 사이트에서 Python 3 패키징용 pip3을 설치하세요.

-또는-

이전 버전의 pip가 있으면, pip 웹 사이트에서업그레이드하세요.

2.    pip3를 사용하여 AWS CLI를 설치하거나 업그레이드합니다.

**참고:**AWS CLI의 최신 버전에는 Lambda Layers API 모델이 포함되어 있습니다.

Docker를 사용하여 최신 Boto3 버전을 사용하는 Lambda 계층을 생성하거나 업데이트하세요

(사전 요구 사항) Docker 설치

사용자의 시스템에 Docker를 설치했고 실행 중인지 확인하세요. 최신 버전의 Docker를 다운로드하려면, Docker 설치를 참조하세요.

사용자 계층 생성 및 적용

1.   계층 파일을 생성할 디렉터리로 이동하세요.

2.    사용자 시스템의 CLI에서 다음 명령을 실행합니다.

docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/python:3.9.2023.03.21.20" /bin/sh -c "mkdir -p /tmp/python && pip3 install boto3 -t /tmp/python && cd /tmp && yum install -y zip && zip -r /var/task/boto3-mylayer.zip ."

참고: public.ecr.aws/lambda/python:3.9.2023.03.21.20Python의 사용자 버전 기본 이미지로 바꾸세요. boto3-mylayer를 패키지의 사용자 지정 이름으로 바꿀 수 있습니다.

3.    명령이 완료될 때까지 기다리세요. 성공적으로 완료되면, 현재 디렉터리에서 사용자의 패키지 이름이 포함된 파일(예: boto3-mylayer.zip)을 볼 수 있습니다.

4.    Lambda 계층을 생성하거나 업데이트하려면, 다음 명령을 실행합니다.

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb://boto3-mylayer.zip --compatible-runtimes python3.9 --region REGION_NAME

참고: boto3-mylayer를 사용자의 패키지 이름으로 바꿉니다. REGION_NAME을 사용자의 AWS 리전으로 바꿉니다. 또한 이전에 지정한 호환되는 런타임도 포함하세요.

최신 Boto3 버전을 사용하는 Lambda 계층을 수동으로 생성하세요

중요: 다음 AWS CLI 명령은 Linux, Unix 및 macOS 운영 체제에서 작동합니다. 각 명령에서, 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 함수 구성에 새 계층을 추가하려면, 다음 명령을 실행합니다.

중요: MY\ _FUNCTION을 사용자의 함수 이름으로 바꾸세요. LAYER\ _ARN을 사용자 계층의 ARN으로 바꿉니다.

aws lambda update-function-configuration --function-name MY_FUNCTION --layers LAYER_ARN

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

**팁:Boto3와 Botocore의 버전을 확인하려면, 사용자의 함수 코드에 있는 print(boto3.__version__)print(botocore.__version__)**를 사용하세요

관련 정보

Python으로 Lambda 함수 빌드하기

Lambda 런타임

.zip file archives를 사용하여 Python Lambda 함수 배포

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

관련 콘텐츠