次のコードはLambdaのputItem JAVA関数用です。機能は、client.putItem(itemRequest);
行まで正しく機能しています。この関数は、入力を正しく読み取っています。 JUnit4テスト(合計時間< 2秒)を実行すると、このコード全体が正常に動作しており、データベース内のエントリを確認できます。しかし、putItem行でLambdaコンソールを使ったテストが失敗すると、これは失敗します(5秒後のタイムアウト)。ここでputItem(itemRequest)はJUnitテスト中に動作しますが、AWS Lambdaコンソールのテスト中では動作しません
public class HelloDB implements RequestHandler<UserClass, String> {
AmazonDynamoDBClient client = null;
public HelloDB() throws IOException {
AWSCredentials credentials = new PropertiesCredentials(HelloDB.class
.getResourceAsStream("AwsCredentials.properties"));
client = new AmazonDynamoDBClient(credentials);
System.out.println("Creds created");
}
@Override
public String handleRequest(UserClass input, Context context) {
System.out.println("U: " + input.getUserName() + " p: " + input.getPasswordHash());
System.out.println("UI: " + input.userId + " O: " + input.getOpenIdToken());
String tableName = "User";
Map<String, AttributeValue> item = new HashMap<String, AttributeValue>();
item.put("userName", new AttributeValue().withS(input.getUserName()));
item.put("passwordHash", new AttributeValue().withS(input.getPasswordHash()));
item.put("userId", new AttributeValue().withN(input.getUserId().toString()));
item.put("openIdToken", new AttributeValue().withS(input.getOpenIdToken()));
PutItemRequest itemRequest = new PutItemRequest().withTableName(tableName).withItem(item);
System.out.println("item request");
client.putItem(itemRequest);
System.out.println("client put item request");
item.clear();
return "Success";
}
はエラーメッセージです:
"errorMessage": .... Task timed out after 5.00 seconds"
時間は15秒の代わりに、5秒に増加したとき、私はこのエラーを取得する:
"errorMessage": "Metaspace",
"errorType": "java.lang.OutOfMemoryError"
「失敗します」というのは本当に役立つ説明ではありません。実際に私たちがあなたを助けてくれるようにしたいのであれば、「方法」は非常に重要です。 – GhostCat
タイムアウトです。だから基本的には、それを挿入することができません... – suku
ラムダ関数のVPCアクセスを有効にしましたか? –