Skip to content

Commit 180e294

Browse files
authored
Update Lambda sample app - switch to native http client +switch to ListBuckets API call (#1003)
Related to #1002, we want to use native Java Http Client instead of OkHttp in the sample app. Also, I noticed that the other language sample apps ([Python](https://github.com/aws-observability/aws-otel-python-instrumentation/blob/main/lambda-layer/sample-apps/function/lambda_function.py#L15)) does a `ListBuckets` call whereas this sample app is doing `ListBucket` call. So updating that to be consistent with others. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent e7870fb commit 180e294

File tree

3 files changed

+27
-31
lines changed

3 files changed

+27
-31
lines changed

sample-apps/apigateway-lambda/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ java {
1515

1616
dependencies {
1717
implementation("com.amazonaws:aws-lambda-java-core:1.2.2")
18-
implementation("com.squareup.okhttp3:okhttp:4.11.0")
1918
implementation("software.amazon.awssdk:s3:2.29.23")
2019
implementation("org.json:json:20240303")
2120
implementation("org.slf4j:jcl-over-slf4j:2.0.16")

sample-apps/apigateway-lambda/src/main/java/com/amazon/sampleapp/LambdaHandler.java

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,20 @@
33
import com.amazonaws.services.lambda.runtime.Context;
44
import com.amazonaws.services.lambda.runtime.RequestHandler;
55
import java.io.IOException;
6+
import java.net.URI;
7+
import java.net.http.HttpClient;
8+
import java.net.http.HttpRequest;
9+
import java.net.http.HttpResponse;
10+
import java.util.HashMap;
611
import java.util.Map;
7-
import okhttp3.OkHttpClient;
8-
import okhttp3.Request;
9-
import okhttp3.Response;
1012
import org.json.JSONObject;
1113
import software.amazon.awssdk.services.s3.S3Client;
12-
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
14+
import software.amazon.awssdk.services.s3.model.ListBucketsResponse;
1315
import software.amazon.awssdk.services.s3.model.S3Exception;
1416

1517
public class LambdaHandler implements RequestHandler<Object, Map<String, Object>> {
1618

17-
private final OkHttpClient client = new OkHttpClient();
19+
HttpClient client = HttpClient.newHttpClient();
1820
private final S3Client s3Client = S3Client.create();
1921

2022
@Override
@@ -36,35 +38,30 @@ public Map<String, Object> handleRequest(Object input, Context context) {
3638
responseBody.put("traceId", traceId);
3739

3840
// Make a remote call using OkHttp
39-
System.out.println("Making a remote call using OkHttp");
40-
String url = "https://www.amazon.com";
41-
Request request = new Request.Builder().url(url).build();
42-
43-
try (Response response = client.newCall(request).execute()) {
41+
System.out.println("Making a remote call using Java HttpClient");
42+
String url = "https://aws.amazon.com/";
43+
HttpRequest request = HttpRequest.newBuilder()
44+
.uri(URI.create(url))
45+
.GET()
46+
.build();
47+
try {
48+
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
49+
System.out.println("Response status code: " + response.statusCode());
4450
responseBody.put("httpRequest", "Request successful");
45-
} catch (IOException e) {
46-
context.getLogger().log("Error: " + e.getMessage());
51+
} catch (Exception e) {
52+
System.err.println("Error: " + e.getMessage());
4753
responseBody.put("httpRequest", "Request failed");
4854
}
4955
System.out.println("Remote call done");
5056

51-
// Make a S3 HeadBucket call to check whether the bucket exists
52-
System.out.println("Making a S3 HeadBucket call");
53-
String bucketName = "SomeDummyBucket";
57+
// Make a S3 ListBuckets call to list the S3 buckets in the account
58+
System.out.println("Making a S3 ListBuckets call");
5459
try {
55-
HeadBucketRequest headBucketRequest = HeadBucketRequest.builder().bucket(bucketName).build();
56-
s3Client.headBucket(headBucketRequest);
57-
responseBody.put("s3Request", "Bucket exists and is accessible: " + bucketName);
60+
ListBucketsResponse listBucketsResponse = s3Client.listBuckets();
61+
responseBody.put("s3Request", "ListBuckets successful");
5862
} catch (S3Exception e) {
59-
if (e.statusCode() == 403) {
60-
responseBody.put("s3Request", "Access denied to bucket: " + bucketName);
61-
} else if (e.statusCode() == 404) {
62-
responseBody.put("s3Request", "Bucket does not exist: " + bucketName);
63-
} else {
64-
System.err.println("Error checking bucket: " + e.awsErrorDetails().errorMessage());
65-
responseBody.put(
66-
"s3Request", "Error checking bucket: " + e.awsErrorDetails().errorMessage());
67-
}
63+
System.err.println("Error listing buckets: " + e.awsErrorDetails().errorMessage());
64+
responseBody.put("s3Request", "Error listing buckets: " + e.awsErrorDetails().errorMessage());
6865
}
6966
System.out.println("S3 HeadBucket call done");
7067

sample-apps/apigateway-lambda/terraform/main.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ resource "aws_iam_role" "lambda_role" {
1616
}
1717

1818
resource "aws_iam_policy" "s3_access" {
19-
name = "S3ListBucketPolicy"
20-
description = "Allow Lambda to check a given S3 bucket exists"
19+
name = "S3ListBucketsPolicy"
20+
description = "Allow Lambda to list buckets"
2121
policy = jsonencode({
2222
Version = "2012-10-17",
2323
Statement = [{
2424
Effect = "Allow",
25-
Action = ["s3:ListBucket"],
25+
Action = ["s3:ListAllMyBuckets"],
2626
Resource = "*"
2727
}]
2828
})

0 commit comments

Comments
 (0)