承上文 [Java] AWS Lambda 入門, 這次添加存取 DynamoDB。
首先建立一個 DynamoDB 表單 "Employee",同時建立一筆資料。
接下來進入 IAM 建立一個 Role,這裡直接選擇 "AWS service",
在 "Choose the service that will use this role" 選擇 "Lambda",
然後就可以點擊按鈕 "Next: Permissions";
在 "Attach permissions policies" 裡面,
勾選 "AmazonDynamoDBFullAccess","AWSLambdaDynamoDBExecutionRole",
然後點擊按鈕 "Next: Review";
輸入 Role name,就可以建立一個 Role 了。
接下來回到之前建立的 Lambda,往下拉到 "Execution role",選取剛剛建立的 Role 就成功了。
可以參考官方文件用 node 簡單測試一下,
// Load the AWS SDK for Node.js var AWS = require('aws-sdk'); // Set the region AWS.config.update({region: 'ap-northeast-1'}); exports.handler = (event, context, callback) => { // Create the DynamoDB service object ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'}); var params = { TableName: 'Employee', Key: { 'EmpId' : {S: '1000'} } //, ProjectionExpression: 'EmpId' }; // Call DynamoDB to read the item from the table ddb.getItem(params, function(err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.Item); callback(null, data); } }); };
回到之前的 Java Project,修改一下:
package example; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.document.DynamoDB; import com.amazonaws.services.dynamodbv2.document.Item; import com.amazonaws.services.dynamodbv2.document.Table; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class Hello implements RequestHandler{ @Override public String handleRequest(Integer input, Context context) { AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); DynamoDB dynamoDB = new DynamoDB(client); Table table = dynamoDB.getTable("Employee"); Item item = table.getItem("EmpId", "10000"); System.out.println(item.toJSONPretty()); return item.toJSON(); } }
另外 Lambda 也提供直接轉換物件的方式,我們不用再去處理 Json 映射物件的問題。
package example; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import lombok.Data; public class Hello implements RequestHandler{ @Override public String handleRequest(Integer input, Context context) { AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient(); DynamoDBMapper dynamodbMapper = new DynamoDBMapper(client); Employee result = dynamodbMapper.load(Employee.class, "10000"); System.out.println(result); return result.toString(); } @Data @DynamoDBTable(tableName = "Employee") class Employee { @DynamoDBHashKey(attributeName = "EmpId") private String id; @DynamoDBAttribute(attributeName = "Name") private String name; } }
系列:
- [Java] AWS Lambda 入門
- [Java] AWS Lambda + DynamoDB
- AWS Lambda + API Gateway
- [Java] JAX-RS on AWS Lambda
- [Java] JUnit with DynamoDBLocal
Good explanation,thanks for writing,it is useful for so many developers
回覆刪除AWS Online Training