2018年7月22日 星期日

[Java] AWS Lambda 入門

首先修改 build.gradle。

// build.gradle
apply plugin: 'java'
repositories {
    mavenCentral()
}
dependencies {
    compile (
        'com.amazonaws:aws-lambda-java-core:1.1.0',
        'com.amazonaws:aws-lambda-java-events:1.1.0'
    )
}
task buildZip(type: Zip) {
    from compileJava
    from processResources
    into('lib') {
        from configurations.compile.Classpath
    }
}
build.dependsOn buildZip
如果打包有發生錯誤,可以刪除 .Classpath 再重新打包嘗試。

接下來寫一隻簡單的範例。

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class Hello implements RequestHandler<Integer, String> {
    public String myHandler(int myCount, Context context) {
        return String.valueOf(myCount);
    }
    @Override
    public String handleRequest(Integer input, Context context) {
        return "Default " + input.toString();
    }
}

打包後上傳 .jar,"Handler" 改成 "example.Hello::myHandler", 然後在 "Configure test events" 裡面將輸入值改成數字(目前預設是 Json),就可以測試了。

"Handler" 的格式是 "包.類::函數";所以上述可以改成 "example.Hello:: handleRequest" 再測試一次。 另外如果輸入格式是 Json,可以將 Integer 改成 Map<String,String>

備註:Java 預設必須調整記憶體大於 768MB 與 Timeout 5秒,否則都會出現 "Task timed out after 3.00 seconds"。 因為實際執行的日誌顯示最大使用記憶體只達 34MB,推測啟動服務加上載入 .jar 需要這麼多才可以。

參考資料:

系列:

沒有留言:

張貼留言

[Java] Invalid HTTP method: PATCH

最近系統需要使用 Netty4,所以把衝突的 Netty3 拆掉,然後就出現了例外。 pom.xml <dependency> <groupId>com.ning</groupId> <artifactId>as...