雖然這篇已經開始有程式碼出現了,但是主要還是先講編譯測試的準備情況喔,之後還會再針對lambda內容進行各方面的解說的。
首先我們直接使用AWS Toolkit中的New AWS Lambda Java Project...新增專案
命名專案名稱後,將Input Type改選為Custom,讓sample code則會有最單純的版本
稍微等待Maven下載完所需的plugins後,接下來會需要一個AWS CloudFormation Template file。AWS CloudFormation是AWS服務的定義描述文件,應該可以定義部署絕大部分的AWS服務內容。在AWS project預設以Amazon CloudFormation Template Editor開啟*.template及*.json檔案,前者為yaml格式、後者為json格式,接下來則以yaml定義方式示範。
但是呢.......在aws的editor我目前為止使用從第一行就報錯解決不了,而且還確認過完整定義檔是可以正常透過AWS CloudFormation CLI部署的內容...
所以我是新增檔案命名為template.yaml然後推薦使用自己喜歡的yaml editor而不用aws的(笑)
(我自己是用CodeMix 3 CI來編輯)
連SAM Local github上的說明文件都沒有在用aws editor的..
所以,建立一個普通檔案在專案根目錄底下(方便如果想使用AWS CLI的話在根目錄比較好找)
我命名為"template.yaml"
並輸入以下內容(請注意CodeUrl應為正確的jar檔名)
AWSTemplateFormatVersion: 2010-09-09
Transform: "AWS::Serverless-2016-10-31"
Description: Lambda example
Resources:
HelloLambda:
Type: 'AWS::Serverless::Function'
Properties:
Runtime: java8
Handler: com.amazonaws.lambda.demo.LambdaFunctionHandler::handleRequest
CodeUri: ./target/demo-1.0.0.jar
Events:
HelloLambdaApi:
Type: Api
Properties:
Path: /hello
Method: ANY
(詳細template定義之後另外獨立文章說明)
為了方便,我們先新增一個json file充當request內容
新增一個檔案"hellorequest.json"至專案根目錄並包含以下內容
{
"body": "nothing here"
}
啟動本機運行還需要幾個步驟
在Run As圖示中開啟Run Configurations視窗
對AWS SAM Local右鍵New Configuration
新增一下如下設定
Template: 指定專案中的template.yaml檔案
Run as:
SAM Local 有兩種執行模式,一個是Lambda Function與API Gateway
目前先使用Lambda Function簡單進行測試
SAM Local Command Configuration區域中指定選擇method名稱
以及選擇剛剛建立的hellorequest.json檔案
儲存後,就可以在Run As中執行該設定,就會自動先執行maven build以及啟動SAM Local結果如下了
補充:
每次透過Eclipse啟動SAM Local如果你跟我一樣都會顯示以下錯誤訊息,即使是正確執行,可能Eclipse沒有正確收到SAM Local啟動資訊,目前是沒有影響
如果執行時出現找不到sam執行檔,應該是因為未設定sam exec location,請參照Day03-環境準備(二)安裝Java8專案開發環境for AWS 中的補充:設定SAM Local位置
如果執行時SAM Local出現訊息找不到Docker,應該是Docker未將使用者加入docker group或未重新啟動以讓設定生效,請參照Day02-環境準備(一)安裝AWS CLI、Docker、AWS SAM CLI
當中的Docker補充部分
看到這裡,你有沒有注意到一件事情呢?如果你有仔細看template file內容的話,你會發現裡面其實定義了API、path等資訊,但是其實目前並沒有用到喔,因為Lambda Function模式並未用到這些,但是template file仍然是必要參數,所以我們先寫好而已,之後將會另外說明完整的API運行測試方式!