AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

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 계층을 생성해야 합니다. Lambda 계층은 수동으로 또는 Docker를 사용하여 생성할 수 있습니다. Docker를 통해 Lambda 계층을 업그레이드하여 바이너리가 Lambda 운영 체제에 맞는지 확인하는 것이 모범 사례입니다.

중요: 다음 절차에서는 최신 버전의 Botocore를 사용하고 있다고 가정합니다. 최신 버전의 Botocore가 없는 경우, 최신 Boto3 버전으로 업그레이드하기 전에 Botocore를 업그레이드해야 합니다. 자세한 내용은 GitHub 웹 사이트의 botocore를 참조하십시오.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 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를 기반으로 합니다.

사전 요구 사항:

  • Python 3용 pip3 패키지를 설치합니다. 또는 이전 버전의 pip가 있는 경우 업그레이드합니다. 자세한 내용을 보려면 pip 웹 사이트의 설치를 참조하십시오.
  • pip3을 사용하여 AWS CLI를 설치 또는 업데이트합니다.

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

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

사전 요구 사항: 시스템에 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를 패키지의 사용자 지정 이름으로 바꾸십시오.
    명령이 성공적으로 완료된 후에, 현재 디렉터리에서 사용자의 패키지 이름이 포함된 파일(예: boto3-mylayer.zip)을 볼 수 있습니다.

  3. 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/pythonmkdir
  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

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

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

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

참고: MY\ _FUNCTION을 함수 이름으로 바꾸십시오. LAYER\ _ARN을 계층의 ARN으로 바꾸십시오.

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

Boto3와 Botocore의 버전을 확인하려면, 함수 코드에 있는 print(boto3.__version__) 및 **print(botocore.__version__)**를 사용합니다.

관련 정보

Python으로 Lambda 함수 빌드

Python Lambda 함수용 .zip 파일 아카이브 사용

AWS 공식
AWS 공식업데이트됨 16일 전