diff --git a/sample-apps/apigateway-lambda/build.gradle.kts b/sample-apps/apigateway-lambda/build.gradle.kts index 66992540ab..25b47e9e44 100644 --- a/sample-apps/apigateway-lambda/build.gradle.kts +++ b/sample-apps/apigateway-lambda/build.gradle.kts @@ -15,7 +15,6 @@ java { dependencies { implementation("com.amazonaws:aws-lambda-java-core:1.2.2") - implementation("com.squareup.okhttp3:okhttp:4.11.0") implementation("software.amazon.awssdk:s3:2.29.23") implementation("org.json:json:20240303") implementation("org.slf4j:jcl-over-slf4j:2.0.16") diff --git a/sample-apps/apigateway-lambda/src/main/java/com/amazon/sampleapp/LambdaHandler.java b/sample-apps/apigateway-lambda/src/main/java/com/amazon/sampleapp/LambdaHandler.java index f3e11bc38d..bc8a7543ac 100644 --- a/sample-apps/apigateway-lambda/src/main/java/com/amazon/sampleapp/LambdaHandler.java +++ b/sample-apps/apigateway-lambda/src/main/java/com/amazon/sampleapp/LambdaHandler.java @@ -3,18 +3,20 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.HashMap; import java.util.Map; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; import org.json.JSONObject; import software.amazon.awssdk.services.s3.S3Client; -import software.amazon.awssdk.services.s3.model.HeadBucketRequest; +import software.amazon.awssdk.services.s3.model.ListBucketsResponse; import software.amazon.awssdk.services.s3.model.S3Exception; public class LambdaHandler implements RequestHandler> { - private final OkHttpClient client = new OkHttpClient(); + HttpClient client = HttpClient.newHttpClient(); private final S3Client s3Client = S3Client.create(); @Override @@ -36,35 +38,30 @@ public Map handleRequest(Object input, Context context) { responseBody.put("traceId", traceId); // Make a remote call using OkHttp - System.out.println("Making a remote call using OkHttp"); - String url = "https://www.amazon.com"; - Request request = new Request.Builder().url(url).build(); - - try (Response response = client.newCall(request).execute()) { + System.out.println("Making a remote call using Java HttpClient"); + String url = "https://aws.amazon.com/"; + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .GET() + .build(); + try { + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + System.out.println("Response status code: " + response.statusCode()); responseBody.put("httpRequest", "Request successful"); - } catch (IOException e) { - context.getLogger().log("Error: " + e.getMessage()); + } catch (Exception e) { + System.err.println("Error: " + e.getMessage()); responseBody.put("httpRequest", "Request failed"); } System.out.println("Remote call done"); - // Make a S3 HeadBucket call to check whether the bucket exists - System.out.println("Making a S3 HeadBucket call"); - String bucketName = "SomeDummyBucket"; + // Make a S3 ListBuckets call to list the S3 buckets in the account + System.out.println("Making a S3 ListBuckets call"); try { - HeadBucketRequest headBucketRequest = HeadBucketRequest.builder().bucket(bucketName).build(); - s3Client.headBucket(headBucketRequest); - responseBody.put("s3Request", "Bucket exists and is accessible: " + bucketName); + ListBucketsResponse listBucketsResponse = s3Client.listBuckets(); + responseBody.put("s3Request", "ListBuckets successful"); } catch (S3Exception e) { - if (e.statusCode() == 403) { - responseBody.put("s3Request", "Access denied to bucket: " + bucketName); - } else if (e.statusCode() == 404) { - responseBody.put("s3Request", "Bucket does not exist: " + bucketName); - } else { - System.err.println("Error checking bucket: " + e.awsErrorDetails().errorMessage()); - responseBody.put( - "s3Request", "Error checking bucket: " + e.awsErrorDetails().errorMessage()); - } + System.err.println("Error listing buckets: " + e.awsErrorDetails().errorMessage()); + responseBody.put("s3Request", "Error listing buckets: " + e.awsErrorDetails().errorMessage()); } System.out.println("S3 HeadBucket call done"); diff --git a/sample-apps/apigateway-lambda/terraform/main.tf b/sample-apps/apigateway-lambda/terraform/main.tf index 6881f0e1ce..0e37647ed0 100644 --- a/sample-apps/apigateway-lambda/terraform/main.tf +++ b/sample-apps/apigateway-lambda/terraform/main.tf @@ -16,13 +16,13 @@ resource "aws_iam_role" "lambda_role" { } resource "aws_iam_policy" "s3_access" { - name = "S3ListBucketPolicy" - description = "Allow Lambda to check a given S3 bucket exists" + name = "S3ListBucketsPolicy" + description = "Allow Lambda to list buckets" policy = jsonencode({ Version = "2012-10-17", Statement = [{ Effect = "Allow", - Action = ["s3:ListBucket"], + Action = ["s3:ListAllMyBuckets"], Resource = "*" }] })