레이어 준비
./ Layers/Layer_utils/Python/Layer_utils/request_handler.py
layers/ └── layer_utils/ └── python/ ├── layer_utils/ │ ├── __init__.py │ └── request_handler.py │ └── processor.py
이 파일에서는 패키지를 만들려면 SetUptools 패키지가 필요하며 휠 패키지는 코드를 분산 형식으로 포장하는 데 사용됩니다.
첫 번째는 Python이 -m venv와 함께 Venv 모듈을 실행하고 Venv라는 가상 환경을 만듭니다. .
./ Layers/Layer_utils/Python/pyproject.toml
layers/
└── layer_utils/
└── python/
├── layer_utils/
│ ├── __init__.py
│ └── request_handler.py
│ └── processor.py
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)}"
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}
디버깅
좋아, 이제 우리가 이것을 어떻게 디버그 할 것인지 봅시다. 이것은 레이어와 람다를 갖춘 내 폴더 구조입니다.
이것은 내 람다의 코드 <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):
"""
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)}"
</pre> <p>
이를 해결하려면 작업 공간의 Settings.json을 편집 할 수 있습니다. Control/Command Shift P를 수행하고 환경 설정을 입력하십시오 : 작업 공간 설정 (JSON)을 열고 브래킷 내부에 다음을 추가하십시오 (더 많은 엑스트라 경로가있는 경우 경로를 추가하시면) </p>.
<p>
</p>
<ance> 이제 Pylance는 이것을 잘 해결해야합니다. <p>
<img src="https://img.php.cn/upload/article/000/000/000/173816779174617.png" 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):
"""
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}
</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="https://img.php.cn/upload/article/000/000/000/173816779293205.png" 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):
"""
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)}"
</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):
"""
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}
</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 = "layer_utils"
version = "0.1.0"
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
</pre>
<are> 그리고 이제 당신은 로컬 레이어와 람다를 디버깅 할 준비가되었습니다!
<p>
</p></are></inv></need></also></the></add></final></oke></p></inv></ur></to></ance>
위 내용은 코드를 재사용 가능한 AWS Lambda 레이어로 작성, 디버그 및 배포하십시오.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!