내용으로 건너뛰기

최신 AI 모델에 액세스하기 위해 Lambda에서 boto3 및 botocore를 어떻게 업그레이드합니까?

2분 분량
0

Amazon Bedrock의 최신 AI 모델에 액세스하기 위해 AWS Lambda에 boto3 및 botocore 최신 버전을 설치하려고 합니다.

간략한 설명

Python과 함께 Lambda 함수를 사용하여 Amazon Bedrock 모델을 호출하는 경우, "Error: "errorMessage": "Unknown service: 'bedrock'" 오류 메시지가 표시될 수 있습니다. 이 문제를 해결하려면 Lambda에서 boto3 및 botocore 라이브러리를 최신 버전으로 업그레이드하십시오.

참고: Amazon Bedrock 파운데이션 모델을 사용할 때는 판매자의 요금 약관을 준수해야 합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오. 다음 AWS CLI 명령은 Linux, Unix 및 macOS 운영 체제에서 작동합니다.

전제 조건:Amazon Bedrock 파운데이션 모델에 액세스할 수 있어야 합니다.

boto3 및 botocore를 업그레이드하려면 다음 단계를 완료하십시오.

  1. 다음 명령을 실행하여 임시 폴더를 만듭니다.

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

    참고: boto3-mylayer를 임시 폴더 이름으로 바꾸십시오.

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

    pip3 install boto3==1.42.44 -t $LIB_DIR
    pip3 install botocore==1.42.44 -t $LIB_DIR
  3. 다음 명령을 실행하여 모든 종속성을 /tmp/boto3-mylayer.zip으로 압축합니다.

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

    참고: boto3-mylayer를 임시 폴더 이름으로 바꾸십시오.

  4. 계층을 게시하려면 publish-layer-version AWS CLI 명령을 실행합니다.

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

    참고: layer-name을 Lambda 계층 이름으로 바꾸고 boto3-mylayer를 임시 폴더 이름으로 바꾸십시오. 출력에서 계층의 Amazon 리소스 이름(ARN)을 기록해 둡니다.

  5. Lambda 함수를 만듭니다.

  6. 앞서 만든 계층을 Lambda 함수에 연결하려면 다음 update-function-configuration 명령을 실행합니다.

    aws lambda update-function-configuration --function-name MY_FUNCTION --layer_ARN

    참고: layer_ARN을 계층 ARN으로 바꾸십시오. 자세한 정보는 함수에 계층 추가를 참조하십시오.

  7. 업데이트를 테스트하려면 다음 코드를 실행하여 Anthropic Claude Opus 4.6을 호출합니다.

    import boto3
    import botocore
    import json
    
    def lambda_handler(event, context):
      print("Boto3 version:", boto3.__version__)
      print("Botocore version:", botocore.__version__)
      bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name='us-east-1', endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com')
    
      # event = {
      #       "anthropic_version": "bedrock-2023-05-31",
      #       "max_tokens": 4000,
      #       "top_k": 250,
      #       "top_p": 1,
      #       "messages": [
      #           {
      #               "role": "user",
      #               "content": "Why is the sky blue?"
      #           }
      #       ],
      #       "stop_sequences": ["Command:"]
      #   }
      print(f"EVENT: {event}")
      bedrock_str = json.dumps(event)
      print(f"BEDROCK_STR: {bedrock_str}")
      modelId = 'global.anthropic.claude-opus-4-5-20251101-v1:0'
    
      bodyprompt = {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": 4000,
            "top_k": 250,
            "top_p": 1,
            "messages": [
                {
                    "role": "user",
                    "content": "Why is the sky blue?"
                }
            ],
            "stop_sequences": ["Command:"]
        }
      response = bedrock_runtime.invoke_model(body=bedrock_str, modelId=modelId, accept='application/json', contentType='application/json')
    #   response = bedrock_runtime.invoke_model(body= json.dumps(bodyprompt), modelId=modelId, accept='application/json', contentType='application/json')
      response_body = json.loads(response.get('body').read())
      print(response_body)
    
      return {'statusCode': 200, 'body': json.dumps(response_body)}

    참고: region_name을 AWS 리전으로, endpoint_url을 Amazon Bedrock의 엔드포인트로 바꾸십시오.

댓글 없음