Ihs*_*kal 5 java amazon-s3 amazon-cloudwatch apache-httpclient-4.x aws-lambda
我正在尝试使用Lambda在我的存储桶中触发对象级别API调用(上传,下载等)的情况下,向AWS外部的服务器发送S3事件日志,但是当我运行它时,它返回超时,但未提及任何错误。我怀疑可能是因为它无法使用HttpClient将其发送到我的服务器,但不能完全确定。
这是我的Lambda函数:
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.event.S3EventNotification;
import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord;
public class S3EventProcessor implements RequestHandler<S3Event, String> {
public String handleRequest(S3Event s3event, Context context) {
S3EventNotificationRecord record = s3event.getRecords().get(0);
String event = record.toString();
String url = "http://myexampleserver.com";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
StringEntity entity = null;
try {
entity = new StringEntity(event);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
entity.setContentType("text/plain");
post.setEntity(entity);
context.getLogger().log("Setting up post request");
HttpResponse response = null;
try {
response = client.execute(post);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
context.getLogger().log(Integer.toString(response.getStatusLine().getStatusCode()));
String a = "Event: " + s3event.getRecords().get(0).getRequestParameters().getSourceIPAddress();
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
我的Lambda函数正确吗?
这是我的日志和错误消息:
START RequestId: bea1b956-3f9b-11e7-93c8-5503fb925252 Version: $LATEST
Setting up post requestEND RequestId: bea1b956-3f9b-11e7-93c8-5503fb925252
REPORT RequestId: bea1b956-3f9b-11e7-93c8-5503fb925252 Duration: 30001.43 ms Billed Duration: 30000 ms Memory Size: 512 MB Max Memory Used: 73 MB
2017-05-23T09:40:21.181Z bea1b956-3f9b-11e7-93c8-5503fb925252 Task timed out after 30.00 seconds
"errorMessage": "2017-05-23T09:40:21.181Z bea1b956-3f9b-11e7-93c8-5503fb925252 Task timed out after 30.00 seconds"
Run Code Online (Sandbox Code Playgroud)
我不执行你的 lambda 函数。但你的 lambda 函数看起来是正确的。
不仅仅是您无法触发下载对象的事件。
以下事件适用
RRSObjectLost、放置、发布、复制、完成分段上传、删除、已创建删除标记、ObjectCreate(全部)、ObjectDelete(全部)。
通过从 lambda 控制台传递测试数据 S3 put 事件来测试您的 lambda。
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |