簡體   English   中英

如何在本地調試 AWS SAM Lambda function (Python),它引用了不同 git 存儲庫/項目中存在的層

[英]How to locally debug AWS SAM Lambda function (Python) which references layer that exists on different git repo/project

我的問題總結:

  • 我希望能夠在本地運行我的 AWS SAM lambda (Python) 並使用調試器單步執行 lambda 層中存在的代碼

項目配置:

  • Git 回購 lambda function
  • Git 用於 function 將引用的層的存儲庫

我目前能做的:

  • 使用此處的指南,通過使用 AWS SAM local,我可以僅為 lambda 運行調試器,這工作正常,但我無法進入層中定義的方法

當我嘗試從層進入方法時會發生什么:

  • 使用 vscode 調試器,我被重定向到 Python lambda 引擎(文件:bootstrap.py)中的某個地方,我無法從那里導航到該層

我使用的技術/庫:

  • Python3.8(lambda,層)
  • 調試器:調試
  • IDE:vscode
  • Lambda 框架:AWS SAM

我運行的命令(在通過 vscode 連接到調試會話之前)是:

sam local generate-event apigateway aws-proxy | sam local invoke MyFunction -d 5890 --event inputs/my_event.json

AWS SAM 模板(功能部分)如下所示:

MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub "${Environment}_${Branch}_my_function"
      CodeUri: my_function.zip
      Handler: app.handler
      Timeout: 180
      MemorySize: 512
      Layers: # to be substituted with layer arn
        - <LAYER_ARN>:<LAYER_VERSION>

如果我是正確的,當我從上面運行命令時,會發生以下情況:

  1. Docker 容器從 SAM Docker 映像創建
  2. Docker 容器包含從 AWS 下載的層
  3. SAM 從 my_function.zip 解壓縮內容並將內容安裝到 docker 容器中
  4. Docker 容器暴露了 5890 調試端口,以便我們能夠從 vscode(例如)連接到調試 session

我的理論是,只要從AWS下載層,我在vscode中調試session就看不到那個代碼了? 因此,我正在考慮但不確定是否可能的一件事是,我不是引用 LAYER_ARN,而是引用本地計算機上存在層代碼的特定文件夾。

問題1:如果我的理論是正確的,是否有可能做到這一點以及如何做到這一點? 問題2:如果我的理論不正確,有沒有其他方法可以在這個設置中實現層代碼的調試?

我不確定我們是否可以使用 SAM 調用 lambda 層。 我上次檢查時它不起作用。 但是,您可以像這樣調用 lambda:

sam build "mylambda" && sam local invoke "mylambda"

以上僅適用於 Python。 對於 node.js 你可以做

sam local invoke "mylambda"

如果你想傳遞事件,你可以做

sam build "mylambda" && sam local invoke "mylambda" -e mylambdaevt.json

您甚至可以在另一個 json 文件中傳遞環境變量。

sam build "mylambda" && sam local invoke "mylambda" --env-vars local-env.json -e events/mylambdaevt.json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM