使用工具組 AWS 處理 AWS 無伺服器應用程式 - AWS Cloud9

AWS Cloud9 不再提供給新客戶。的現有客戶 AWS Cloud9 可繼續正常使用此服務。了解更多」

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用工具組 AWS 處理 AWS 無伺服器應用程式

此工 AWS 具組為無伺服器應用程式提供支援。使用 AWS Toolkit,您可以建立包含AWS Lambda函數的無伺服器應用程式,然後將應用程式部署到 AWS CloudFormation 堆疊。

建立無伺服器應用程式

此範例顯示如何使用 AWS Toolkit 建立無伺服器應用程式。如需了解如何執行與除錯無伺服器應用程式,請參閱 執行與除錯無伺服器應用程式

建立無伺服器應用程式的必要先決條件包括AWS SAM CLI和. AWS CLI 這些都包含在中 AWS Cloud9。如果 AWS SAM CLI未安裝,或已過期,則可能需要執行安裝或升級。如需有關如何安裝的指示 AWS SAM CLI,請參閱安裝 AWS SAM CLI和以取得有關如何升級的指示 AWS SAM CLI,請參閱級 AWS SAM CLI.

使用 AWS Toolkit 建立無伺服器應用程式

此範例顯示如何使用 AWS Serverless Application Model (AWS SAM) 使用 AWS Toolkit 建立無伺服器應用程式。

  1. AWS 檔案總管中,開啟 Lambda 節點的內容 (按一下滑鼠右鍵) 功能表,然後選擇 [建立 Lambda SAM 應用程式]。

    注意

    或者,您也可以從「檔案總管」標題選取對面的AWS功能表圖示,然後選擇「建立 Lambda SAM 應用程式」。

  2. 選擇SAM應用程式的執行階段。在此範例中,請選擇 nodejs12.x

    注意

    如果您選取了包含「(Image)」的執行時間,您的應用程式就是 Image 套件類型。如果您選取了不包含「(Image)」的執行時間,您的應用程式就是 Zip 類型。如需詳細了解 ImageZip 套件類型的差異,請參閱 AWS Lambda 開發人員指南中的 Lambda 部署套件

  3. 為您的無伺服器應用程式選擇下列其中一個範本:

    • AWS SAM 你好世界:具有 Lambda 函數的基本模板,該模板返回經典的「Hello World」消息。

    • AWS Step Functions 示例應用程序:運行股票交易工作流程的示例應用程序。Step Functions 會協調 Lambda 函數有參與的互動。

  4. 您可以選擇新專案的位置。若已存在,您可以選取現有的工作空間資料夾。否則,請瀏覽其他資料夾。如果選擇 Select a different folder (選取其他資料夾),畫面會顯示一個對話方塊,您可以從中選取資料夾位置。

  5. 輸入新應用程式的名稱。在此範例中,使用 my-sam-app-nodejs。按 Enter 鍵之後,「 AWS 工具組」會花一些時間來建立專案。

建立專案時,您可以在「Environment」(環境) 視窗中檢視應用程式的檔案。列於 Explorer 視窗中。

顯示SAM應用程式可用執行階段的螢幕截圖。

執行與除錯無伺服器應用程式

您可以使用 AWS Toolkit 來設定如何偵錯無伺服器應用程式,並在開發環境中在本機執行這些應用程式。您可以偵錯由 AWS Serverless Application Model (AWS SAM) 範本定義的無伺服器應用程式。此範本使用簡單的YAML語法來描述組成無伺服器應用程式的資源,例如函數、資料庫和事件來源對映。APIs

如需詳細瞭解 AWS SAM 範本,請參閱AWS Serverless Application Model 開發人員指南中的AWS SAM 範本結構

或者,您也可以快速偵錯尚未認可至SAM範本的無伺服器應用程式。

您可以使用內嵌動作來識別合格 AWS Lambda 函數,開始設定偵錯行為。若要使用SAM範本定義的基礎結構,請在相關YAML格式化檔案中使用內嵌動作。若要在不使用範本的情況下直接測試函數,請使用應用程式檔案中 Lambda 處理常式的內容感知連結。

注意

在此範例中,我們正在偵錯使用 JavaScript. 但是您可以使用 AWS Toolkit 中提供的除錯功能,搭配下列語言和執行階段:

  • JavaScript — Node.js 10. 、十二 、十四 x

  • Python — 3.7、3.8、3.9、3.10 (Python 2.7 和 3.6 無伺服器應用程式可以執行,但無法由工具組進行除錯。) AWS

您的語言選擇也會在內容感知連結指出符合資格的 Lambda 處理常式時產生影響。如需詳細資訊,請參閱 直接從程式碼執行和除錯無伺服器函數

使用SAM範本執行和偵錯無伺服器應用程式

對於使用SAM範本執行和偵錯的應用程式,YAML格式化的檔案會說明應用程式的行為及其使用的資源。如果您使用 AWS Toolkit 建立無伺服器應用程式,系統會自動template.yaml為您的專案產生名為的檔案。

在此程序中,請使用建立於 建立無伺服器應用程式 的範例應用程式。

使用SAM範本執行和偵錯無伺服器應用程式

  1. 若要檢視無伺服器應用程式內含的應用程式檔案,請前往 Environment (環境) 視窗。

  2. 從應用程式資料夾 (例如,my-sample-app) 開啟template.yaml檔案。

  3. 針對 template.yaml,選取 Edit Launch Configuration (編輯啟動組態)。

    新的編輯器會顯示 launch.json 檔案,該檔案提供的除錯組態採用預設屬性。

  4. 編輯或確認下列組態屬性的值:

    • "name" – 輸入方便識讀的名稱,讓它顯示在 Run (執行) 檢視的 Configuration (組態) 下拉式欄位中。

    • "target" – 確保該值是 "template"。如此一來,SAM範本就是偵錯工作階段的進入點。

    • "templatePath" – 輸入 template.yaml 檔案的相對或絕對路徑。

    • "logicalId"— 確定名稱與SAM範本的 [資源] 區段中指定的名稱相符。在此例中,此名稱為 AWS::Serverless::Function 類型的 HelloWorldFunction

    如需詳細了解 launch.json 檔案中的上述與其他項目,請參閱 除錯無伺服器應用程式的組態選項

  5. 如果您認為除錯組態沒有問題,請儲存 launch.json。然後,選擇綠色的「播放」按鈕旁邊RUN開始調試。

    注意

    如果您的SAM應用程序無法運行,請檢查「輸出」窗口以查看錯誤是否由 Docker 映像未構建引起。您可能需要釋放環境中的磁碟空間。

    如需詳細資訊,請參閱 在 AWS Toolkit 本機執行 SAM 應用程式時發生錯誤,因為 AWS Cloud9 環境沒有足夠的磁碟空間

    偵錯工作階段啟動時,面DEBUGCONSOLE板會顯示除錯輸出,並顯示 Lambda 函數傳回的任何值。偵錯SAM應用程式時,會在「出」面板中選取「AWS 工具組」作為「輸出」通道。

    注意

    如果 Windows 使用者在此程序中遇到 Docker 掛載問題,您可能需要重新整理自己的共用磁碟機的憑證 (在 Docker 設定中)。Docker 掛載錯誤類似如下。

    Fetching lambci/lambda:nodejs10.x Docker container image...... 2019-07-12 13:36:58 Mounting C:\Users\<username>\AppData\Local\Temp\ ... as /var/task:ro,delegated inside runtime container Traceback (most recent call last): ...requests.exceptions.HTTPError: 500 Server Error: Internal Server Error ...

直接從程式碼執行和除錯無伺服器函數

測試 AWS SAM 應用程式時,您可以選擇只執行和偵錯 Lambda 函數。排除SAM範本所定義的其他資源。這種方法必須使用內嵌動作,在可以直接叫用的來源程式碼中識別 Lambda 函數處理常式。

內容感知連結偵測到的 Lambda 處理常式取決於您用於應用程式的語言和執行時間。

語言/執行時間 內容感知連結識別 Lambda 函數的條件

JavaScript (Node.js 十、十二及十四倍)

函式具備以下特性:
  • 它是經過匯出的函式,最多有三個參數。

  • 它在工作空間資料夾中的父項資料夾有一個 package.json 檔案。

Python(三、三、三、三)

函式具備以下特性:
  • 它是最上層函數。

  • 它在工作空間資料夾中的父項資料夾有一個 requirements.txt 檔案。

如何從應用程式程式碼直接執行與除錯無伺服器應用程式

  1. 若要檢視無伺服器應用程式檔案,請選擇編輯器旁邊的資料夾圖示,導覽至應用程式資料夾。

  2. 從應用程式資料夾 (例如 my-sample-app),展開函數資料夾 (在此範例中為 hello-world),然後app.js開啟檔案。

  3. 在用於識別符合資格的 Lambda 處理常式函數的內嵌動作中,選擇 Add Debug Configuration。如未顯示新增除錯組態選項,您必須啟用程式碼濾鏡。若要啟用程式碼濾鏡,請參閱 啟用 AWS 工具包代碼鏡頭

    在內嵌動作中,針對 Lambda 函式處理常式存取 Add Debug Configuration (新增除錯組態) 選項。
  4. 選取應用程式執行所在的SAM執行環境。

  5. launch.json 檔案的編輯器中編輯或確認下列組態屬性的值:

    • "name" – 輸入方便識讀的名稱。

    • "target" – 確認值為 "code",以便直接叫用 Lambda 函式處理常式。

    • "lambdaHandler" – 輸入程式碼中所用方法的名稱,Lambda 會呼叫此程式碼來叫用您的函數。例如,對於中的應用程式 JavaScript,預設值為app.lambdaHandler

    • "projectRoot" – 為包含 Lambda 函式的應用程式輸入檔案路徑。

    • "runtime" – 輸入或確認 Lambda 執行環境的有效執行時間 (例如 "nodejs.12x")。

    • "payload" – 選擇下列其中一個選項來定義您想要提供給 Lambda 函式作為輸入的事件酬載:

      • "json": 定義事件有效負載的JSON格式化鍵值對。

      • "path":作為事件酬載的檔案的路徑。

  6. 如果您對調試配置感到滿意,請選擇旁邊的綠色播放箭頭RUN以開始調試。

    偵錯工作階段啟動時,面DEBUGCONSOLE板會顯示除錯輸出,並顯示 Lambda 函數傳回的任何值。偵錯SAM應用程式時,會在「出」面板中選取「AWS 工具組」作為「輸出」通道。

    注意

    如果錯誤訊息提及 Docker,請參閱本注意事項

執行和偵錯本機 Amazon API 閘道資源

您可以執行或偵錯中指定的 AWS SAM API閘道本機資源template.yaml。透過使type=aws-sam用執行的 AWS Cloud9 啟動組態來執行此操作invokeTarget.target=api

注意

API閘道支援兩種類型的APIs. 他們是REST和HTTPAPIs。但是,具有 AWS 工具包的API網關功能僅支持RESTAPIs。HTTPAPIs有時稱為「API閘道 V2」APIs。

若要執行和偵錯本機API閘道資源
  1. 選擇下列其中一種方法來建立 AWS SAM API閘道資源的啟動設定:

    • 選項 1:前往您 AWS SAM 的處理常式來源程式碼 (尤其是.js、.cs 或 .py 檔案) 專案,將游標懸浮在 Lambda 處理常式上,然後選擇 Add Debug Configuration (新增除錯組態)。如果未顯示新增除錯組態選項,請啟用程式碼濾鏡。若要啟用程式碼濾鏡,請參閱 啟用 AWS 工具包代碼鏡頭 。然後,在菜單中,選擇標記為API事件的項目。

    • 選項 2:編輯 launch.json,並使用以下語法建立新的啟動組態。

      { "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} } }, "sam": {}, "aws": {} }
  2. Run (執行) 按鈕旁邊的下拉式選單中,選擇啟動組態 (在上面的範例中名稱為 myConfig)。

  3. (選用) 在 Lambda 專案程式碼中新增中斷點。

  4. 選擇綠色「播放」按鈕旁邊的 Run (執行) 按鈕。

  5. 在輸出窗格中檢視結果。

組態

如果您使用 invokeTarget.target 屬性值 api,Toolkit 會變更啟動組態驗證和行為,以便支援 api 欄位。

{ "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} }, "querystring": "abc=def&qrs=tuv", "headers": { "cookie": "name=value; name2=value2; name3=value3" } }, "sam": {}, "aws": {} }

將範例中的值更換為如下所示:

invokeTarget.logicalId

資API源。

路徑

啟動設定要求的API路徑 (例如,"path": "/hello")。

必須是由指定的解析template.yaml的有效API路徑invokeTarget.templatePath

httpMethod

使用以下其中一個動詞:「delete」、「get」、「head」、「options」、「patch」、「post」、「put」。

payload

要在要求中傳送的有JSON效負載 (HTTP主體),其結構和規則與 lambda.payload 欄位相同。

payload.path指向包含有JSON效負載的檔案。

payload.json指定內聯JSON有效載荷。

標頭

選用的名稱/值組對應。使用它來指定要包含在請求中的HTTP標頭。

"headers": { "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5", "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", "cookie": "name=value; name2=value2; name3=value3", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", }
querystring

(選用) 使用此字串來設定請求中的 querystring (例如 "querystring": "abc=def&ghi=jkl")。

aws

如何提供 AWS 連線資訊。如需詳細資訊,請參閱 除錯無伺服器應用程式的組態選項 中的 AWS 連線 (aws) 屬性 資料表。

sam

如何構 AWS SAM CLI建應用程序。如需詳細資訊,請參閱中的 AWS SAM CLI(」sam「) 屬性除錯無伺服器應用程式的組態選項

同步無伺服器應用程式

此範例顯示如何將上一個主題 (建立無伺服器應用程式) 中建立的無伺服器應用程式同步到 AWS 使用 AWS Toolkit for Visual Studio Code.

必要條件

  • 請務必選擇全域唯一的 Amazon S3 儲存貯體名稱。

  • 確保您在中設定的登入資料包含對下列服務的適當讀取/寫入存取權限:Amazon S3 AWS CloudFormation AWS Lambda、和 Amazon API 閘道。

  • 對於具有部署類型的應用程式Image,請確保您具有全球唯一的 Amazon S3 儲存貯體名稱和用URI於部署的 Amazon ECR 儲存庫。

同步無伺服器應用程式

  1. AWS 檔案總管視窗中,開啟 Lambda 節點的內容 (按一下滑鼠右鍵) 功能表,然後選取同步SAM應用程式

  2. 選擇 AWS 區域 要部署到的目的地。

  3. 選擇要用於部署的 template.yaml 檔案。

  4. 輸入此部署可以使用的 Amazon S3 儲存貯體名稱。儲存貯體必須位於您要部署檔案的 區域。

    警告

    在現有的所有 Amazon S3 儲存貯體名稱中,該 Amazon S3 儲存貯體名稱必須為全域唯一。將唯一識別符新增至在以下範例中指定的名稱,或選擇不同的名稱。

  5. 如果您的無伺服器應用程式包含套件類型的函數Image,請輸入此部署可使用的 Amazon ECR 儲存庫名稱。儲存庫必須位於您要部署檔案的區域。

  6. 輸入部署之堆疊的名稱,即新堆疊的名稱或現有堆疊的名稱。

  7. Console (主控台)AWS Toolkit 索引標籤上確認部署成功。

    如果發生錯誤,右下角會顯示彈出式訊息。

    如果發生這種情況,請查看 AWS Toolkit 索引標籤中的文字了解詳情。以下是錯誤詳細資訊的範例。

    Error with child process: Unable to upload artifact HelloWorldFunction referenced by CodeUri parameter of HelloWorldFunction resource. S3 Bucket does not exist. Execute the command to create a new bucket aws s3 mb s3://pbart-my-sam-app-bucket An error occurred while deploying a SAM Application. Check the logs for more information by running the "View AWS Toolkit Logs" command from the Command Palette.

    在此範例中,由於 Amazon S3 儲存貯體不存在,因此發生錯誤。

部署完成時,您將看到應用程式在 AWS Explorer 中列出。若要了解如何叫用 Lambda 函式 (該函數是做為應用程式的一部分而建立),請參閱 叫用遠端 Lambda 函式

啟用 AWS 工具包代碼鏡頭

  1. 從選單列選擇 AWS Cloud9、然後選擇Preferences (偏好設定)。

  2. Preferences (偏好設定) 標籤的側邊欄中,選擇 AWS Toolkit

  3. 若要啟用程式碼濾鏡,請選擇 Enable Code Lenses (啟用程式碼濾鏡)。

從 AWS 雲端刪除無伺服器應用程式

刪除無伺服器應用程式需要刪除先前部署到 AWS 雲端的 AWS CloudFormation 堆疊。請注意,此程序不會從本機主機刪除應用程式目錄。

  1. 開啟 AWS Explorer

  2. AWS Explorer 視窗中,展開您要刪除的已部署應用程式所在的區域,然後展開 AWS CloudFormation

  3. 開啟與您要刪除之無伺服器應用程式對應之 AWS CloudFormation 堆疊名稱的內容 (按一下滑鼠右鍵) 功能表。然後,選擇「刪除 CloudFormation 堆疊」。

  4. 如要確認刪除所選堆疊,請選擇 Delete (刪除)。

如果堆疊刪除成功,「 AWS 工具組」會從AWS 檔案總管的 AWS CloudFormation 清單中移除堆疊名稱。