iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
0
Software Development

從Java進入AWS部署RESTful API的心路歷程系列 第 4

Day04-環境準備(三)Hello Lambda編譯與測試

  • 分享至 

  • xImage
  •  

前言

雖然這篇已經開始有程式碼出現了,但是主要還是先講編譯測試的準備情況喔,之後還會再針對lambda內容進行各方面的解說的。

Hello from Lambda!

首先我們直接使用AWS Toolkit中的New AWS Lambda Java Project...新增專案
命名專案名稱後,將Input Type改選為
Custom
,讓sample code則會有最單純的版本
https://ithelp.ithome.com.tw/upload/images/20190915/20120911QvXLvBZuFS.png

template.yaml (AWS CloudFormation Template)

稍微等待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定義之後另外獨立文章說明)

hellorequest.json

為了方便,我們先新增一個json file充當request內容
新增一個檔案"hellorequest.json"至專案根目錄並包含以下內容

{
	"body": "nothing here"
}

Run As SAM Local

啟動本機運行還需要幾個步驟
在Run As圖示中開啟Run Configurations視窗
對AWS SAM Local右鍵New Configuration
新增一下如下設定
https://ithelp.ithome.com.tw/upload/images/20190915/20120911hKKGHVWjMf.png

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結果如下了
https://ithelp.ithome.com.tw/upload/images/20190915/20120911l3A18ksSCU.png

補充:
每次透過Eclipse啟動SAM Local如果你跟我一樣都會顯示以下錯誤訊息,即使是正確執行,可能Eclipse沒有正確收到SAM Local啟動資訊,目前是沒有影響
https://ithelp.ithome.com.tw/upload/images/20190915/20120911zyMHmUKD6F.png

如果執行時出現找不到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運行測試方式!


上一篇
Day03-環境準備(二)安裝Java8專案開發環境for AWS
下一篇
Day05-概觀(一)Lambda、API Gateway以及Lambda Proxy integration
系列文
從Java進入AWS部署RESTful API的心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言