From 2c9d16525912d1498e6576b2c1b2567e158b019e Mon Sep 17 00:00:00 2001 From: kozub Date: Mon, 27 Nov 2023 15:29:38 +0100 Subject: [PATCH 1/7] Add a pattern from ApiGateway-Lambda-Bedrock using AWS SDK for Java --- apigw-lambda-bedrock-cdk-java/README.md | 96 ++++++++++++++++++ .../example-pattern.json | 56 ++++++++++ .../images/architecture.png | Bin 0 -> 161446 bytes .../infrastructure/.gitignore | 13 +++ .../infrastructure/cdk.json | 5 + .../infrastructure/deploy.sh | 6 ++ .../infrastructure/pom.xml | 61 +++++++++++ .../java/com/example/InfrastructureApp.java | 13 +++ .../java/com/example/InfrastructureStack.java | 54 ++++++++++ .../com/example/InfrastructureStackTest.java | 27 +++++ .../software/pom.xml | 71 +++++++++++++ .../main/java/com/example/BedrockClient.java | 64 ++++++++++++ .../src/main/java/com/example/Body.java | 37 +++++++ 13 files changed, 503 insertions(+) create mode 100644 apigw-lambda-bedrock-cdk-java/README.md create mode 100644 apigw-lambda-bedrock-cdk-java/example-pattern.json create mode 100644 apigw-lambda-bedrock-cdk-java/images/architecture.png create mode 100644 apigw-lambda-bedrock-cdk-java/infrastructure/.gitignore create mode 100644 apigw-lambda-bedrock-cdk-java/infrastructure/cdk.json create mode 100755 apigw-lambda-bedrock-cdk-java/infrastructure/deploy.sh create mode 100644 apigw-lambda-bedrock-cdk-java/infrastructure/pom.xml create mode 100644 apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureApp.java create mode 100644 apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java create mode 100644 apigw-lambda-bedrock-cdk-java/infrastructure/src/test/java/com/example/InfrastructureStackTest.java create mode 100644 apigw-lambda-bedrock-cdk-java/software/pom.xml create mode 100644 apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/BedrockClient.java create mode 100644 apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/Body.java diff --git a/apigw-lambda-bedrock-cdk-java/README.md b/apigw-lambda-bedrock-cdk-java/README.md new file mode 100644 index 000000000..10fbeb75e --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/README.md @@ -0,0 +1,96 @@ +# Amazon API Gateway to AWS Lambda to Amazon Bedrock using AWS SDK for Java and CDK + +This sample project deploys an Amazon API Gateway REST API with an AWS Lambda integration. The Lambda function is written in Java, calls the Amazon Bedrock API for Anthropic Claude-v2 model and returns a response containing the generated content. + +Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/apigw-lambda-bedrock-cdk-java + +Important: this application uses various AWS services and there are costs associated with these services after the Free Tier usage - please see the [AWS Pricing page](https://aws.amazon.com/pricing/) for details. You are responsible for any AWS costs incurred. No warranty is implied in this example. + +## Requirements + +- [Create an AWS account](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html) if you do not already have one and log in. The IAM user that you use must have sufficient permissions to make necessary AWS service calls and manage AWS resources. +- [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) installed and configured +- [Git Installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +- [Java 21](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/downloads-list.html) installed + +- [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) (AWS CDK) installed + + +## Prerequisite +Amazon Bedrock users need to request access to models before they are available for use. If you want to add additional models for text, chat, and image generation, you need to request access to models in Amazon Bedrock. Please refer to the link below for instruction: +[Model access](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html). + +## Deployment Instructions + +1. Create a new directory, navigate to that directory in a terminal and clone the GitHub repository: + ```bash + git clone https://github.com/aws-samples/serverless-patterns + ``` +2. Change directory to the pattern directory: + ```bash + cd apigw-lambda-bedrock-cdk-java/infrastructure + ``` + +3. From the command line, configure AWS CDK: + ```bash + cdk bootstrap ACCOUNT-NUMBER/REGION # e.g. + cdk bootstrap 1111111111/us-east-1 + cdk bootstrap --profile test 1111111111/us-east-1 + ``` +4. From the command line, use AWS CDK to deploy the AWS resources for the pattern as specified in the `lib/cdk-stack.ts` file: + ```bash + deploy.sh + ``` + +3. From the command line, use AWS SAM to deploy the AWS resources for the pattern as specified in the template.yml file: + ```bash + sam deploy --guided + ``` + +## How it works + +This CDK project uses Amazon Bedrock API for Anthropic Claude-v2 model to generate content based on given prompt. This is exposed through a serverless REST API. Please refer to the architecture diagram below: +![End to End Architecture](images/architecture.png) + + +Here's a breakdown of the steps: + +1. **Amazon API Gateway**: Receives the HTTP POST request containing the prompt. + +2. **AWS Lambda**: Triggered by the API Gateway, this function forwards the prompt to Amazon Bedrock API using Bedrock SDK. It uses Anthropic Claude-v2 model and sets other required parameters to fixed values for simplicity. + +3. **Amazon Bedrock**: Based on the given prompt, using Anthropic Claude-v2 model generates the content and returns the response to Lambda. + +4. **Response**: Lambda processes the Bedrock output and sends it back to the user via the API Gateway. + +## Testing + +Test the deployed content generation API by providing a prompt. You can use [curl](https://curl.se/) to send a HTTP POST request to the API. Make sure to replace `BedrockRestApi` with the provided by CDK output which name starts with `ApiGatewayLambdaBedrockStack.LambdaBedrockAPIEncpoind` : + +```bash +curl -d '{"prompt": "Please calculate with step-by-step explanation: 2+2*2"}' -H 'Content-Type: application/json' +``` + +The API returns a response with generated content. Such as (Your output may vary): + +``` +{ + "response": " Okay, let's solve this step-by-step:\n2 + 2 * 2\nStep 1) Perform the multiplication first: 2 * 2 = 4\nStep 2) Now perform the addition: 2 + 4 = 6\n\nTherefore, the final answer is:\n2 + 2 * 2 = 6" +} +``` + + +## Cleanup + +1. To delete the resources deployed to your AWS account via AWS CDK, run the following command: + +```bash +cdk destroy +``` + + +--- + +Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. + +SPDX-License-Identifier: MIT-0 diff --git a/apigw-lambda-bedrock-cdk-java/example-pattern.json b/apigw-lambda-bedrock-cdk-java/example-pattern.json new file mode 100644 index 000000000..bb9c7aaaf --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/example-pattern.json @@ -0,0 +1,56 @@ +{ + "title": "Amazon API Gateway to AWS Lambda to Amazon Bedrock", + "description": "Make a request to Bedrock via API Gateway using Java and CDK", + "language": "Java", + "level": "200", + "framework": "CDK", + "introBox": { + "headline": "How it works", + "text": [ + "Amazon API Gateway receives the HTTP POST request containing the prompt.", + "AWS Lambda is triggered by the API Gateway, this function forwards the prompt to Amazon Bedrock API using AWS SDK for Java. It uses Anthropic Claude-v2 model and sets other required parameters to fixed values for simplicity.", + "Based on the given prompt, using Anthropic Claude-v2 model, Amazon Bedrock generates the content and returns the response to Lambda.", + "Lambda processes the Bedrock output and sends it back to the user via the API Gateway." + ] + }, + "gitHub": { + "template": { + "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/apigw-lambda-bedrock-cdk-java", + "templateURL": "serverless-patterns/apigw-lambda-bedrock-cdk-java", + "projectFolder": "apigw-lambda-bedrock-cdk-java", + "templateFile": "apigw-lambda-bedrock-cdk-java/template.yaml" + } + }, + "resources": { + "bullets": [ + { + "text": "Amazon Bedrock Model Access", + "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html" + } + ] + }, + "deploy": { + "text": [ + "cdk deploy" + ] + }, + "testing": { + "text": [ + "See the GitHub repo for detailed testing instructions." + ] + }, + "cleanup": { + "text": [ + "Delete the stack: cdk delete." + ] + }, + "authors": [ + { + "name": "Grzegorz Kozub", + "image": "https://drive.google.com/file/d/1eo1_Zx4gIgmQO1cupdfUJbkxjEpC7NYJ/view?usp=sharing", + "bio": "Cloud Application Architect working at AWS Professional Services.", + "linkedin": "kozubgrzegorz", + "twitter": "kozubg" + } + ] +} diff --git a/apigw-lambda-bedrock-cdk-java/images/architecture.png b/apigw-lambda-bedrock-cdk-java/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..db28cfe46005cd16edee8bc185d69f7060d7ba73 GIT binary patch literal 161446 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%0Dek%4lRNVQG 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 P00000NkvXXu0mjfTw%p- literal 0 HcmV?d00001 diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/.gitignore b/apigw-lambda-bedrock-cdk-java/infrastructure/.gitignore new file mode 100644 index 000000000..1db21f162 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/.gitignore @@ -0,0 +1,13 @@ +.classpath.txt +target +.classpath +.project +.idea +.settings +.vscode +*.iml + +# CDK asset staging directory +.cdk.staging +cdk.out + diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/cdk.json b/apigw-lambda-bedrock-cdk-java/infrastructure/cdk.json new file mode 100644 index 000000000..5bf1bc04f --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/cdk.json @@ -0,0 +1,5 @@ +{ + "app": "mvn -e -q compile exec:java", + "context": { + } +} diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/deploy.sh b/apigw-lambda-bedrock-cdk-java/infrastructure/deploy.sh new file mode 100755 index 000000000..155b56430 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/deploy.sh @@ -0,0 +1,6 @@ +cd ../software/ +mvn clean package +cd ../infrastructure +mvn clean compile +cdk synth +cdk deploy \ No newline at end of file diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/pom.xml b/apigw-lambda-bedrock-cdk-java/infrastructure/pom.xml new file mode 100644 index 000000000..cab0276f7 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + com.example + infrastructure + 0.1 + + UTF-8 + 2.110.0 + 5.9.1 + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + 21 + 21 + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + com.example.InfrastructureApp + + + + + + + + software.amazon.awscdk + aws-cdk-lib + ${cdk.version} + + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.assertj + assertj-core + 3.23.1 + test + + + diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureApp.java b/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureApp.java new file mode 100644 index 000000000..180f3d9de --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureApp.java @@ -0,0 +1,13 @@ +package com.example; + +import software.amazon.awscdk.App; + +public final class InfrastructureApp { + public static void main(final String[] args) { + App app = new App(); + + new InfrastructureStack(app, "ApiGatewayLambdaBedrockStack"); + + app.synth(); + } +} diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java b/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java new file mode 100644 index 000000000..7c943fae2 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java @@ -0,0 +1,54 @@ +package com.example; + +import software.amazon.awscdk.App; +import software.amazon.awscdk.Duration; +import software.amazon.awscdk.Stack; +import software.amazon.awscdk.StackProps; +import software.amazon.awscdk.services.apigateway.LambdaIntegration; +import software.amazon.awscdk.services.apigateway.RestApi; +import software.amazon.awscdk.services.iam.PolicyStatement; +import software.amazon.awscdk.services.iam.PolicyStatementProps; +import software.amazon.awscdk.services.lambda.Code; +import software.amazon.awscdk.services.lambda.Function; +import software.amazon.awscdk.services.lambda.Runtime; +import software.constructs.Construct; + +import java.util.List; + +public class InfrastructureStack extends Stack { + public InfrastructureStack(final App parent, final String id) { + this(parent, id, null); + } + + public InfrastructureStack(final Construct parent, final String id, final StackProps props) { + super(parent, id, props); + + // Create policy to allow Lambda call Bedrock + PolicyStatement invokeModelPolicy = new PolicyStatement(PolicyStatementProps.builder() + .actions(List.of("bedrock:InvokeModel")) + .resources(List.of("arn:aws:bedrock:" + getRegion() + "::foundation-model/anthropic.claude-v2")) + .build()); + + + // Create a Lambda function + Function lambdaFunction = Function.Builder.create(this, "LambdaBedrockFunction") + .runtime(Runtime.JAVA_21) + .handler("com.example.BedrockClient::handleRequest") + .code(Code.fromAsset("../software/target/BedrockClient-1.0.jar")) + .timeout(Duration.seconds(60)) + .initialPolicy(List.of(invokeModelPolicy)) + .build(); + + // Create an API Gateway + RestApi api = RestApi.Builder.create(this, "LambdaBedrockAPI") + .restApiName("LambdaBedrockAPI") + .description("The serverless pattern for calling Bedrock using Java SDK") + .build(); + + // Create a Lambda integration and connect it to the root resource + LambdaIntegration lambdaIntegration = LambdaIntegration.Builder.create(lambdaFunction) + .build(); + + api.getRoot().addMethod("POST", lambdaIntegration); + } +} diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/src/test/java/com/example/InfrastructureStackTest.java b/apigw-lambda-bedrock-cdk-java/infrastructure/src/test/java/com/example/InfrastructureStackTest.java new file mode 100644 index 000000000..79a6cad95 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/src/test/java/com/example/InfrastructureStackTest.java @@ -0,0 +1,27 @@ +package com.example; + +import software.amazon.awscdk.App; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import java.io.IOException; + +import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; + +public class InfrastructureStackTest { + private final static ObjectMapper JSON = + new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true); + + @Test + public void testStack() throws IOException { + App app = new App(); + InfrastructureStack stack = new InfrastructureStack(app, "test"); + + JsonNode actual = JSON.valueToTree(app.synth().getStackArtifact(stack.getArtifactId()).getTemplate()); + + assertThat(actual.toString()) + .contains("AWS::ApiGatewayV2::Api") + .contains("AWS::Lambda::Function"); + } +} diff --git a/apigw-lambda-bedrock-cdk-java/software/pom.xml b/apigw-lambda-bedrock-cdk-java/software/pom.xml new file mode 100644 index 000000000..f70c5e809 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/software/pom.xml @@ -0,0 +1,71 @@ + + 4.0.0 + com.example + BedrockClient + 1.0 + jar + Lambda function for calling Bedrock. + + 21 + 21 + + + + + com.amazonaws + aws-lambda-java-core + 1.2.3 + + + com.amazonaws + aws-lambda-java-events + 3.11.3 + + + + software.amazon.lambda + powertools-serialization + 1.18.0 + + + + software.amazon.awssdk + bedrock + 2.21.19 + + + + software.amazon.awssdk + bedrockruntime + 2.21.19 + + + + org.json + json + 20231013 + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + + + package + + shade + + + + + + + diff --git a/apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/BedrockClient.java b/apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/BedrockClient.java new file mode 100644 index 000000000..d0eea8ab5 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/BedrockClient.java @@ -0,0 +1,64 @@ +package com.example; + +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent; +import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPResponse; +import org.json.JSONObject; +import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; +import software.amazon.awssdk.core.SdkBytes; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient; +import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelRequest; +import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelResponse; +import software.amazon.lambda.powertools.utilities.EventDeserializer; + +import java.nio.charset.Charset; +import java.text.MessageFormat; + +import static software.amazon.lambda.powertools.utilities.EventDeserializer.extractDataFrom; + + +public class BedrockClient implements RequestHandler { + + private final static String MODEL = "anthropic.claude-v2"; + private final BedrockRuntimeClient bedrockClient; + + record Request(String prompt) { } + + public BedrockClient() { + bedrockClient = BedrockRuntimeClient.builder().build(); + } + + public APIGatewayV2HTTPResponse handleRequest(final APIGatewayV2HTTPEvent event, final Context context) { + LambdaLogger logger = context.getLogger(); + logger.log("Processing request for: " + event.getBody()); + + Request content = extractDataFrom(event).as(Request.class); + String response = sendRequest(content.prompt); + + logger.log("Response: " + response); + return APIGatewayV2HTTPResponse.builder() + .withStatusCode(200) + .withBody(toJson(response)) + .build(); + } + + private String sendRequest(String prompt) { + Body body = new Body(prompt); + InvokeModelRequest request = InvokeModelRequest.builder() + .modelId(MODEL) + .body(SdkBytes.fromString(body.toJson(), Charset.defaultCharset())) + .build(); + + InvokeModelResponse invokeModelResponse = bedrockClient.invokeModel(request); + + JSONObject responseAsJson = new JSONObject(invokeModelResponse.body().asUtf8String()); + return String.valueOf(responseAsJson.get("completion")); + } + + private static String toJson(String response) { + return new JSONObject().put("response", response).toString(); + } +} \ No newline at end of file diff --git a/apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/Body.java b/apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/Body.java new file mode 100644 index 000000000..7f4bafef2 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/software/src/main/java/com/example/Body.java @@ -0,0 +1,37 @@ +package com.example; + +import org.json.JSONObject; + +import java.text.MessageFormat; + + +record Body(String prompt, double temperature, int top_k, double top_p, int max_tokens_to_sample, + String[] stop_sequences, String anthropic_version) { + + + public static final String PROMPT_TEMPLATE = "Human: {0} \\n\\nAssistant:"; + + + Body(String promptContent) { + this(MessageFormat.format(PROMPT_TEMPLATE, promptContent), + 0.5, + 250, + 0.999, + 300, + new String[]{"\\n\\nHuman:"}, + "bedrock-2023-05-31"); + } + + String toJson() { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("prompt", prompt); + jsonObject.put("temperature", temperature); + jsonObject.put("top_k", top_k); + jsonObject.put("top_p", top_p); + jsonObject.put("max_tokens_to_sample", max_tokens_to_sample); + jsonObject.put("stop_sequences", stop_sequences); + jsonObject.put("anthropic_version", anthropic_version); + + return jsonObject.toString(); + } +} From 459f7c39950a89b83835f401ea933c789931c40d Mon Sep 17 00:00:00 2001 From: kozub Date: Wed, 6 Dec 2023 13:05:00 +0100 Subject: [PATCH 2/7] Remove project folder value from templateURL --- apigw-lambda-bedrock-cdk-java/example-pattern.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apigw-lambda-bedrock-cdk-java/example-pattern.json b/apigw-lambda-bedrock-cdk-java/example-pattern.json index bb9c7aaaf..0d3d3098a 100644 --- a/apigw-lambda-bedrock-cdk-java/example-pattern.json +++ b/apigw-lambda-bedrock-cdk-java/example-pattern.json @@ -16,7 +16,7 @@ "gitHub": { "template": { "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/apigw-lambda-bedrock-cdk-java", - "templateURL": "serverless-patterns/apigw-lambda-bedrock-cdk-java", + "templateURL": "apigw-lambda-bedrock-cdk-java", "projectFolder": "apigw-lambda-bedrock-cdk-java", "templateFile": "apigw-lambda-bedrock-cdk-java/template.yaml" } From 5d0b1a068fcdb8d96dfab555662a2195b1b2c959 Mon Sep 17 00:00:00 2001 From: kozub Date: Wed, 6 Dec 2023 13:17:22 +0100 Subject: [PATCH 3/7] Update templateFile in example-pattern --- apigw-lambda-bedrock-cdk-java/example-pattern.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apigw-lambda-bedrock-cdk-java/example-pattern.json b/apigw-lambda-bedrock-cdk-java/example-pattern.json index 0d3d3098a..4fedb4416 100644 --- a/apigw-lambda-bedrock-cdk-java/example-pattern.json +++ b/apigw-lambda-bedrock-cdk-java/example-pattern.json @@ -18,7 +18,7 @@ "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/apigw-lambda-bedrock-cdk-java", "templateURL": "apigw-lambda-bedrock-cdk-java", "projectFolder": "apigw-lambda-bedrock-cdk-java", - "templateFile": "apigw-lambda-bedrock-cdk-java/template.yaml" + "templateFile": "infrastructure/src/main/java/com/example/InfrastructureApp.java" } }, "resources": { From f4dbce787b1a4297ad7e071fc08ee1381001feee Mon Sep 17 00:00:00 2001 From: kozub Date: Thu, 4 Jan 2024 17:01:27 +0100 Subject: [PATCH 4/7] Apply code review suggestions --- .../java/com/example/InfrastructureStack.java | 10 +++++++ .../software/dependency-reduced-pom.xml | 29 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 apigw-lambda-bedrock-cdk-java/software/dependency-reduced-pom.xml diff --git a/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java b/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java index 7c943fae2..8afa06ecb 100644 --- a/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java +++ b/apigw-lambda-bedrock-cdk-java/infrastructure/src/main/java/com/example/InfrastructureStack.java @@ -2,6 +2,7 @@ import software.amazon.awscdk.App; import software.amazon.awscdk.Duration; +import software.amazon.awscdk.RemovalPolicy; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.services.apigateway.LambdaIntegration; @@ -11,6 +12,8 @@ import software.amazon.awscdk.services.lambda.Code; import software.amazon.awscdk.services.lambda.Function; import software.amazon.awscdk.services.lambda.Runtime; +import software.amazon.awscdk.services.logs.LogGroup; +import software.amazon.awscdk.services.logs.RetentionDays; import software.constructs.Construct; import java.util.List; @@ -29,6 +32,12 @@ public InfrastructureStack(final Construct parent, final String id, final StackP .resources(List.of("arn:aws:bedrock:" + getRegion() + "::foundation-model/anthropic.claude-v2")) .build()); + // Create CloudWatch log group for storing Lambda logs + LogGroup functionLogGroup = LogGroup.Builder.create(this, "server-log-group") + .retention(RetentionDays.THREE_DAYS) + .logGroupName("/aws/lambda/LambdaBedrockFunction") + .removalPolicy(RemovalPolicy.DESTROY) + .build(); // Create a Lambda function Function lambdaFunction = Function.Builder.create(this, "LambdaBedrockFunction") @@ -37,6 +46,7 @@ public InfrastructureStack(final Construct parent, final String id, final StackP .code(Code.fromAsset("../software/target/BedrockClient-1.0.jar")) .timeout(Duration.seconds(60)) .initialPolicy(List.of(invokeModelPolicy)) + .logGroup(functionLogGroup) .build(); // Create an API Gateway diff --git a/apigw-lambda-bedrock-cdk-java/software/dependency-reduced-pom.xml b/apigw-lambda-bedrock-cdk-java/software/dependency-reduced-pom.xml new file mode 100644 index 000000000..e114f2651 --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/software/dependency-reduced-pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + com.example + BedrockClient + Lambda function for calling Bedrock. + 1.0 + + + + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + + + + + 21 + 21 + + From 615bc4736db461a04dd1e9e83d19172316d75a64 Mon Sep 17 00:00:00 2001 From: kozub Date: Thu, 4 Jan 2024 17:08:58 +0100 Subject: [PATCH 5/7] Apply code review suggestons for README --- apigw-lambda-bedrock-cdk-java/README.md | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/apigw-lambda-bedrock-cdk-java/README.md b/apigw-lambda-bedrock-cdk-java/README.md index 10fbeb75e..6db089a2e 100644 --- a/apigw-lambda-bedrock-cdk-java/README.md +++ b/apigw-lambda-bedrock-cdk-java/README.md @@ -10,14 +10,14 @@ Important: this application uses various AWS services and there are costs associ - [Create an AWS account](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html) if you do not already have one and log in. The IAM user that you use must have sufficient permissions to make necessary AWS service calls and manage AWS resources. - [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) installed and configured -- [Git Installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) -- [Java 21](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/downloads-list.html) installed - -- [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) (AWS CDK) installed +- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +- [Java 21](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/downloads-list.html) +- [Maven 3](https://maven.apache.org/) +- [AWS Cloud Development Kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) (AWS CDK) ## Prerequisite -Amazon Bedrock users need to request access to models before they are available for use. If you want to add additional models for text, chat, and image generation, you need to request access to models in Amazon Bedrock. Please refer to the link below for instruction: +This pattern uses `Anthropic Claude` fundamental model provided by Amazon Bedrock. It is required to request access to the model before starting using the pattern. Please refer to the link below for an instruction: [Model access](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html). ## Deployment Instructions @@ -41,15 +41,10 @@ Amazon Bedrock users need to request access to models before they are available ```bash deploy.sh ``` - -3. From the command line, use AWS SAM to deploy the AWS resources for the pattern as specified in the template.yml file: - ```bash - sam deploy --guided - ``` ## How it works -This CDK project uses Amazon Bedrock API for Anthropic Claude-v2 model to generate content based on given prompt. This is exposed through a serverless REST API. Please refer to the architecture diagram below: +This CDK project uses the Amazon Bedrock API for Anthropic Claude-v2 model to generate content based on given prompt. This is exposed through a serverless REST API. Please refer to the architecture diagram below: ![End to End Architecture](images/architecture.png) @@ -65,13 +60,13 @@ Here's a breakdown of the steps: ## Testing -Test the deployed content generation API by providing a prompt. You can use [curl](https://curl.se/) to send a HTTP POST request to the API. Make sure to replace `BedrockRestApi` with the provided by CDK output which name starts with `ApiGatewayLambdaBedrockStack.LambdaBedrockAPIEncpoind` : +Test the deployed content generation API by providing a prompt. You can use [curl](https://curl.se/) to send a HTTP POST request to the API. Replace `BedrockRestApi` with the API URL in the CDK output, which has a name beginning with `ApiGatewayLambdaBedrockStack.LambdaBedrockAPIEncpoind` : ```bash curl -d '{"prompt": "Please calculate with step-by-step explanation: 2+2*2"}' -H 'Content-Type: application/json' ``` -The API returns a response with generated content. Such as (Your output may vary): +The API returns a response with generated content. Your output may vary: ``` { From f0c85c37540cd9f6fda2d2834c5f95cfb3204fe5 Mon Sep 17 00:00:00 2001 From: kozub Date: Thu, 4 Jan 2024 17:16:12 +0100 Subject: [PATCH 6/7] Add fundamental model to requirements --- apigw-lambda-bedrock-cdk-java/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apigw-lambda-bedrock-cdk-java/README.md b/apigw-lambda-bedrock-cdk-java/README.md index 6db089a2e..1e263ed32 100644 --- a/apigw-lambda-bedrock-cdk-java/README.md +++ b/apigw-lambda-bedrock-cdk-java/README.md @@ -9,6 +9,7 @@ Important: this application uses various AWS services and there are costs associ ## Requirements - [Create an AWS account](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html) if you do not already have one and log in. The IAM user that you use must have sufficient permissions to make necessary AWS service calls and manage AWS resources. +- `Anthropic Claude` fundamental model access requested (check [Prerequisite](#Prerequisite) to see details). - [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) installed and configured - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - [Java 21](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/downloads-list.html) From 93de3ce263e9fc1dc7a90b1e90c50924dc9b9b6a Mon Sep 17 00:00:00 2001 From: ellisms <114107920+ellisms@users.noreply.github.com> Date: Thu, 4 Jan 2024 13:27:02 -0500 Subject: [PATCH 7/7] Create apigw-lambda-bedrock-java.json json file for publishing. --- .../apigw-lambda-bedrock-java.json | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 apigw-lambda-bedrock-cdk-java/apigw-lambda-bedrock-java.json diff --git a/apigw-lambda-bedrock-cdk-java/apigw-lambda-bedrock-java.json b/apigw-lambda-bedrock-cdk-java/apigw-lambda-bedrock-java.json new file mode 100644 index 000000000..ec7655c6b --- /dev/null +++ b/apigw-lambda-bedrock-cdk-java/apigw-lambda-bedrock-java.json @@ -0,0 +1,84 @@ +{ + "title": "Amazon API Gateway to AWS Lambda to Amazon Bedrock", + "description": "Make a request to Bedrock via API Gateway using Java and CDK", + "language": "Java", + "level": "200", + "framework": "CDK", + "introBox": { + "headline": "How it works", + "text": [ + "Amazon API Gateway receives the HTTP POST request containing the prompt.", + "AWS Lambda is triggered by the API Gateway, this function forwards the prompt to Amazon Bedrock API using AWS SDK for Java. It uses Anthropic Claude-v2 model and sets other required parameters to fixed values for simplicity.", + "Based on the given prompt, using Anthropic Claude-v2 model, Amazon Bedrock generates the content and returns the response to Lambda.", + "Lambda processes the Bedrock output and sends it back to the user via the API Gateway." + ] + }, + "gitHub": { + "template": { + "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/apigw-lambda-bedrock-cdk-java", + "templateURL": "apigw-lambda-bedrock-cdk-java", + "projectFolder": "apigw-lambda-bedrock-cdk-java", + "templateFile": "infrastructure/src/main/java/com/example/InfrastructureApp.java" + } + }, + "resources": { + "bullets": [ + { + "text": "Amazon Bedrock Model Access", + "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html" + } + ] + }, + "deploy": { + "text": [ + "cdk deploy" + ] + }, + "testing": { + "text": [ + "See the GitHub repo for detailed testing instructions." + ] + }, + "cleanup": { + "text": [ + "Delete the stack: cdk delete." + ] + }, + "authors": [ + { + "name": "Grzegorz Kozub", + "image": "https://drive.google.com/file/d/1eo1_Zx4gIgmQO1cupdfUJbkxjEpC7NYJ/view?usp=sharing", + "bio": "Cloud Application Architect working at AWS Professional Services.", + "linkedin": "kozubgrzegorz", + "twitter": "kozubg" + } + ], + "patternArch": { + "icon1": { + "x": 20, + "y": 50, + "service": "apigw", + "label": "API Gateway REST API" + }, + "icon2": { + "x": 50, + "y": 50, + "service": "lambda", + "label": "AWS Lambda" + }, + "icon3": { + "x": 80, + "y": 50, + "service": "bedrock", + "label": "Amazon Bedrock" + }, + "line1": { + "from": "icon1", + "to": "icon2" + }, + "line2": { + "from": "icon2", + "to": "icon3" + } + } +}