찾다
백엔드 개발파이썬 튜토리얼코드를 재사용 가능한 AWS Lambda 레이어로 작성, 디버그 및 배포하십시오.

aws 람다 레이어는 다른 람다와 코드를 재사용 할 수있는 좋은 방법입니다. 기존 PIP 패키지에 대한 레이어를 만드는 방법에 대한 많은 튜토리얼을 보았지만 자신의 코드로 수행하는 방법을 설명하고 Lambda와 함께 디버깅 할 수있는 많은 자습서를 보지 못했습니다. 내 시나리오에서는이 레이어를 사용하여 레이어와 여러 람다를 갖고 AWS 환경을 시뮬레이션하는 람다와 레이어의 코드를 디버깅 할 수 있습니다. 나는 당신이 이미 Template.yml로 만든 Lambda 함수를 가지고 있다고 가정합니다. 그렇지 않은 경우 Lambda https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html을 만드는 방법에 대한 다음 기사를 확인하십시오. 작성한 후 ZIP 파일로 다운로드하여 코드와 Template.yml을 추출 할 수 있습니다.

레이어 준비

먼저, 레이어의 폴더 구조를 설정해야합니다. 나는 레이어라는 폴더를 만들고 싶고 각 레이어마다 자체 폴더를 만듭니다. AWS Lambda는 레이어에 대한 특정 폴더 구조가 필요하며 각 계층의 코드는 파이썬/ 폴더에 있습니다. 자세한 내용은 다음 링크를 참조하십시오. https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html 우리의 계층은 layer_utils라고합니다. 그런 다음 Python 폴더 내부에 폴더 Layer_utils를 넣고 내부에 Code와 함께 request_handler.py 및 processor.py 파일을 만듭니다. 또한 Python이 패키지로 인식하는 데 필요한 init 처럼 보이는 방식입니다

request_handler.py는 URL로 요청을 받고 라이브러리 요청을 사용하여 데이터를 가져 와서 반환 할 프로세서를 호출합니다. ./ Layers/Layer_utils/Python/Layer_Utils/Processor.py
./ Layers/Layer_utils/Python/Layer_utils/request_handler.py

layers/
└── layer_utils/
    └── python/
        ├── layer_utils/
        │   ├── __init__.py
        │   └── request_handler.py
        │   └── processor.py

여기서, 프로세서 import process_data 만 대신 layer_utils.processor import process_data에서 호출하여 프로세서 함수를 가져 오는 방법에 유의해야합니다. 절대 경로를 사용하면 나중에 가져 오기 오류를 피할 수 있습니다

레이어 포장

좋아, 이제 우리는 계층 코드를 만들었습니다. 그러나 우리는 아직 끝나지 않았습니다. 우리는 이제 Lambda 코드에서 사용할 수 있도록 PIP로 편집 가능한 패키지를 만들어야합니다. 우리는 PEP 660 스타일을 따라야합니다. 요구 사항 .txt 및 pyproject.toml의 두 파일을 만들어야합니다. 첫 번째에는이 레이어에 필요한 모든 외부 라이브러리가 포함됩니다. 두 번째는 PIP를 사용하여 편집 가능한 패키지를 만들고 모든 종속성이 설치되도록 해야하는 파일입니다. 이렇게하면 끊임없이 다시 포장 할 필요없이 레이어 코드를 편집 할 수 있습니다 (디버그해야합니다). 이것은 나무가 처럼 보이는 방식입니다 pyproject.toml은 PIP에서 우리의 레이어와 함께 패키지를 만드는 데 사용됩니다.
./ Layers/Layer_utils/Python/pyproject.toml

이 파일에서는 패키지를 만들려면 SetUptools 패키지가 필요하며 휠 패키지는 코드를 분산 형식으로 포장하는 데 사용됩니다. 요구 사항 .txt는 계층에 필요한 모든 외부 모듈을 나타냅니다. 우리의 경우 우리는 요청 모듈 만 필요하지만 필요한만큼 추가 할 수 있습니다.

./ Layers/Layer_Utils/Python/reamustry.txt
layers/
└── layer_utils/
    └── python/
        ├── layer_utils/
        │   ├── __init__.py
        │   └── request_handler.py
        │   └── processor.py

나는 AWS에서 직접 AWS Lambda 레이어 리소스를 호출하여 외부 패키지를 가져 오기 때문에 사용중인 패키지 버전을 추적하는 것이 중요하다고 생각합니다. SAM Local Invoke 또는 SAM Local Start-API를 사용하는 대신 Python 환경에서 직접 Lambda를 실행하여 시스템에서 직접 디버깅하는 경우 PIP에 설치된 로컬 패키지가 배포 된 것과 동일해야합니다. 레이어 패키지. 그에 대한 좋은 튜토리얼이 많기 때문에 외부 계층을 만드는 방법을 설명하지 않을 것입니다 (예 : https://www.keyq.cloud/en/blog/creating-an-aws lambda-layer-for- Python-Requests-Module ).

가상 환경 설정

이제 가상 환경을 만들어 봅시다. 이것은 필요하지 않지만 종속성을 분리하고 Python 환경이 Lambda가 사용할 환경과 일치하도록 권장합니다. 이렇게하려면 프로젝트의 콘솔에서 input

첫 번째는 Python이 -m venv와 함께 Venv 모듈을 실행하고 Venv라는 가상 환경을 만듭니다.

두 번째는 가상 환경 활성화 스크립트를 실행하는 내장 명령 소스를 호출하여 가상 환경을 활성화합니다. Visual Studio 코드를 사용하는 경우 가상 환경으로 전환하라는 메시지가 표시됩니다. 네 라고 말하다.
import requests

def process_data(url):
    """
    Fetches data from a URL.

    Args:
        url (str): The URL to fetch data from.

    Returns:
        str: The fetched content or an error message.
    """
    try:
        response = requests.get(url)
        response.raise_for_status()  # Raise an error for bad status codes
        return response.text[:200]  # Return the first 200 characters of the response
    except requests.RequestException as e:
        return f"Error fetching data: {str(e)}"
이 후에, 당신은 당신의 껍질에서 이런 것을 볼 수 있습니다.

.

처음의 (VENV)는 가상 환경에 있음을 나타냅니다.

때때로 SAM 도구 대신 Python 파일을 직접 실행하는 것을 디버깅하는 것을 좋아합니다 (빠르기 때문에). 이렇게하려면 가상 환경에 모든 외부 패키지를 설치하여 개발 및 디버깅을 위해 로컬로 사용할 수 있습니다.

이것은 SAM 도구없이 로컬 및 직접 디버그하는 데만 필요 하므로이 작업을 수행하지 않으면이 단계를 건너 뛸 수 있습니다.
우리는 이제 레이어를 패키지해야하므로 Lambda는 레이어를 파이썬 패키지로 찾을 수 있습니다.

from layer_utils.processor import process_data

def handle_request(request):
    """
    Handles an incoming request and processes it.

    Args:
        request (dict): The input request data.

    Returns:
        dict: The processed result.
    """
    # Example: Extract 'url' from the request and process it
    if "url" not in request:
        return {"error": "Missing 'data' in request"}

    data = request["url"]
    processed_result = process_data(data)
    return {"result": processed_result}
-e 플래그는 이것이 편집 가능한 패키지임을 나타냅니다. 경로는 pyproject.toml 파일의 위치를 ​​가리 킵니다. 이것을 실행하면 새로운 폴더 layer_utils.egg-info가 생성됩니다. 거기서 할 일이없고 그냥 남겨 두십시오.

디버깅

좋아, 이제 우리가 이것을 어떻게 디버그 할 것인지 봅시다. 이것은 레이어와 람다를 갖춘 내 폴더 구조입니다.


이것은 내 람다의 코드 <pre class="brush:php;toolbar:false">layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py </pre>입니다 <p> <br> <the> 파일을 실행할 수 있고 오류없이 유효한 결과를 얻을 수 있습니다. <using> Pylance와 함께 Visual Studio Code를 사용하는 경우 코드가 작동하더라도 레이어 가져 오기가 해결되지 않을 수 있습니다. </using></the></p> <pre class="brush:php;toolbar:false">import requests def process_data(url): &quot;&quot;&quot; Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. &quot;&quot;&quot; try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f&quot;Error fetching data: {str(e)}&quot; </pre> <p> 이를 해결하려면 작업 공간의 Settings.json을 편집 할 수 있습니다. Control/Command Shift P를 수행하고 환경 설정을 입력하십시오 : 작업 공간 설정 (JSON)을 열고 브래킷 내부에 다음을 추가하십시오 (더 많은 엑스트라 경로가있는 경우 경로를 추가하시면) </p>. <p> </p> <ance> 이제 Pylance는 이것을 잘 해결해야합니다. <p> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173816779174617.png?x-oss-process=image/resize,p_40" class="lazy" alt="Pylance complaining on VSCode" loading="lazy" style="max-width:90%" style="max-width:90%"> 스택에 레이어를 추가합니다 </p> <to> 이제 Lambdas Template.yml에 레이어를 설정해야합니다. 우리는 리소스 내부에 다음을 추가해야합니다. 섹션 (프로젝트에 따라 콘텐츠를 적응) <p> ./ lambdas/mylambda/template.yml <br> </p> <pre class="brush:php;toolbar:false">from layer_utils.processor import process_data def handle_request(request): &quot;&quot;&quot; Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. &quot;&quot;&quot; # Example: Extract 'url' from the request and process it if &quot;url&quot; not in request: return {&quot;error&quot;: &quot;Missing 'data' in request&quot;} data = request[&quot;url&quot;] processed_result = process_data(data) return {&quot;result&quot;: processed_result} </pre> <ur> condenturi에서는 레이어 코드가있는 상대 경로를 어떻게 지칭하는지 알 수 있습니다. AWS SAM 시스템이 Python 폴더를 찾을 것이기 때문에 Python 폴더를 가리키지 않는 방법을 확인하십시오. 런타임이 가상 환경과 LAMNBDA에서 사용하는 런타임과 일치하는지 확인하십시오. <p> 또한 파일의 람다 섹션의 레이어를 참조해야합니다. </p> <h2> <the> 템플릿 파일의 레이어 섹션에 이미 AWS에있는 요청 계층도 있습니다. 이것은 레이어를 로컬로 생성하므로 Sam은 읽어야한다는 것을 알게 될 것입니다. 또한 AWS 배포를 호출 할 때 마다이 레이어를 AWS에 배포합니다. </the> </h2> 샘과의 디버깅 <p> <this> 이것을 테스트합시다. 먼저 구축합시다. 템플릿에 소스 코드의 위치에 표시가 있기 때문에 템플릿을 다른 경로에서 구축하는 데 문제가있었습니다. 이를 피하려면 템플릿 파일의 경로에서 직접 빌드하는 것이 좋습니다. </this></p> <p> <all> 이것은 필요한 모든 종속성을 구축합니다. <strong> <inv> 이제 우리는 그것을 호출 할 수 있습니다. 람다를 테스트하기위한 이벤트 파일을 만들었습니다. ./ lambdas/mylambda/events/event.json <br> </inv></strong></all></p> <inv> 이제 디버깅을 위해 파일을 호출 할 수 있습니다. 이를 위해 Docker를 설치하고 실행해야한다는 것을 기억하십시오. 다시 말하지만, 템플릿 파일이있는 곳에서 이것을 호출해야합니다. <pre class="brush:php;toolbar:false">└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt </pre>. <p> <br> <oke> 이것은 template.yml에서 함수를 호출합니다. -D 플래그는 디버그 포트가 5678임을 나타냅니다. -E 플래그는 Lambda에 제출 될 이벤트 파일이 어디에 있는지 나타냅니다. <br><h2> 람다와 레이어를 AWS에 배포하십시오 </h2> <final> 이제 코드를 AWS에 배치하여이를 마무리합시다. <p> <br> </p> <u> -람다를 아직 배치하지 않은 경우 -유도 플래그는 프로세스에 도움이 될 수 있으므로 처음으로 사용할 수 있습니다. 이 작업을 마치면 AWS 콘솔로 가서 레이어를 찾을 수 있습니다. 이제 레이어의 ARN을 사용하여 다른 람다와 함께 레이어를 사용할 수 있습니다. <pre class="brush:php;toolbar:false">layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py </pre> </u><p> </p> <p> VSCODE 설정 디버그 <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173816779293205.png?x-oss-process=image/resize,p_40" class="lazy" alt="The lambda layer on the AWS Console" loading="lazy" style="max-width:90%" style="max-width:90%"> <to> vscode를 사용하여 디버그, 브레이크 포인트 설정 등을 사용하려면 몇 가지 추가 단계를 수행해야합니다. </to></p> <add> 디버그 구성을 추가해야합니다. 이렇게하려면 Control/Command Shift P 및 유형 디버그 : 구성 추가 .... 런치 .JSON 파일이 열립니다. 구성을 추가해야합니다. <h2> </h2> ./. vscode/unker.json <p> </p> <p> <deb> 우리는 Sam Local Invoke에 부착 할 디버시를 사용하고 있으며, 여기서 -D 플래그로 호출 할 때 본 포트 5678을 설정합니다. Lambda 코드가있는 디렉토리를 가리키는지 확인하십시오. 더 많은 구성이있는 경우 구성 내부의 부품을 목록에 추가하십시오. </deb></p> <the> 우리는 디버시 라이브러리가 필요합니다. 먼저 요구 사항에 추가하겠습니다. ./ lambdas/mylambda/reimpings.txt <p> <strong> </strong> <install> 이제 pip 로 설치합시다 <br> </install></p> <also also> 또는 요구 사항을 통해 설치할 수도 있습니다 .txt 파일 <pre class="brush:php;toolbar:false">import requests def process_data(url): &quot;&quot;&quot; Fetches data from a URL. Args: url (str): The URL to fetch data from. Returns: str: The fetched content or an error message. &quot;&quot;&quot; try: response = requests.get(url) response.raise_for_status() # Raise an error for bad status codes return response.text[:200] # Return the first 200 characters of the response except requests.RequestException as e: return f&quot;Error fetching data: {str(e)}&quot; </pre> <p> <create> 우리는 AWS_SAM_LOCAL 환경 변수를 정의 할 수있는 환경 파일을 만들어야합니다. 작업 공간 폴더에서 파일 .env를 만듭니다. </create></p> <p> ./ </p> <p> <ine> 여기서 우리는 AWS_SAM_LOCAL을 정의하여 Lambda는 AWS SAM을 통해 로컬로 실행되고 있음을 알게됩니다. <strong> <to> 우리는 또한 파이썬 환경에 환경 파일의 환경 변수를 사용해야한다고 말해야합니다. 이것이 바로 </to></strong>처럼 보이는 방법입니다 ./. vscode/settings.json </ine></p> <pre class="brush:php;toolbar:false">from layer_utils.processor import process_data def handle_request(request): &quot;&quot;&quot; Handles an incoming request and processes it. Args: request (dict): The input request data. Returns: dict: The processed result. &quot;&quot;&quot; # Example: Extract 'url' from the request and process it if &quot;url&quot; not in request: return {&quot;error&quot;: &quot;Missing 'data' in request&quot;} data = request[&quot;url&quot;] processed_result = process_data(data) return {&quot;result&quot;: processed_result} </pre> <need> 마지막으로 Lambda 코드를 수정하여 로컬로 실행할 때 디버거에 첨부 해야하는 것을 알 수 있습니다. 파일의 시작 부분에서 다음 코드 <p>를 추가합니다. ./ lambdas/mylambda/src/lambda_function.py <br> </p> <pre class="brush:php;toolbar:false">└── layer_utils └── python ├── layer_utils │ ├── __init__.py │ ├── processor.py │ └── request_handler.py ├── pyproject.toml └── requirements.txt </pre> <inv inv> 이제 우리는 함수를 호출합니다 (다시 함수가있는 경로에서) : <p> <br> <ole> 콘솔이 디버거가 첨부 될 때까지 대기하는 것을 보여 주면 ... F5를 누르거나 Python Debugger : Debug를 선택하여 Debug를 선택하십시오. </ole></p> <pre class="brush:php;toolbar:false">[project] name = &quot;layer_utils&quot; version = &quot;0.1.0&quot; [build-system] requires = [&quot;setuptools&quot;, &quot;wheel&quot;] build-backend = &quot;setuptools.build_meta&quot; </pre> <are> 그리고 이제 당신은 로컬 레이어와 람다를 디버깅 할 준비가되었습니다! <p> </p></are></inv></need></also></the></add></final></oke></p></inv></ur></to></ance>

위 내용은 코드를 재사용 가능한 AWS Lambda 레이어로 작성, 디버그 및 배포하십시오.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
파이썬 : 자동화, 스크립팅 및 작업 관리파이썬 : 자동화, 스크립팅 및 작업 관리Apr 16, 2025 am 12:14 AM

파이썬은 자동화, 스크립팅 및 작업 관리가 탁월합니다. 1) 자동화 : 파일 백업은 OS 및 Shutil과 같은 표준 라이브러리를 통해 실현됩니다. 2) 스크립트 쓰기 : PSUTIL 라이브러리를 사용하여 시스템 리소스를 모니터링합니다. 3) 작업 관리 : 일정 라이브러리를 사용하여 작업을 예약하십시오. Python의 사용 편의성과 풍부한 라이브러리 지원으로 인해 이러한 영역에서 선호하는 도구가됩니다.

파이썬과 시간 : 공부 시간을 최대한 활용파이썬과 시간 : 공부 시간을 최대한 활용Apr 14, 2025 am 12:02 AM

제한된 시간에 Python 학습 효율을 극대화하려면 Python의 DateTime, Time 및 Schedule 모듈을 사용할 수 있습니다. 1. DateTime 모듈은 학습 시간을 기록하고 계획하는 데 사용됩니다. 2. 시간 모듈은 학습과 휴식 시간을 설정하는 데 도움이됩니다. 3. 일정 모듈은 주간 학습 작업을 자동으로 배열합니다.

파이썬 : 게임, Guis 등파이썬 : 게임, Guis 등Apr 13, 2025 am 12:14 AM

Python은 게임 및 GUI 개발에서 탁월합니다. 1) 게임 개발은 Pygame을 사용하여 드로잉, 오디오 및 기타 기능을 제공하며 2D 게임을 만드는 데 적합합니다. 2) GUI 개발은 Tkinter 또는 PYQT를 선택할 수 있습니다. Tkinter는 간단하고 사용하기 쉽고 PYQT는 풍부한 기능을 가지고 있으며 전문 개발에 적합합니다.

Python vs. C : 응용 및 사용 사례가 비교되었습니다Python vs. C : 응용 및 사용 사례가 비교되었습니다Apr 12, 2025 am 12:01 AM

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간의 파이썬 계획 : 현실적인 접근2 시간의 파이썬 계획 : 현실적인 접근Apr 11, 2025 am 12:04 AM

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구