Skip to main content

Command Palette

Search for a command to run...

A Step-by-Step Guide to Creating a Hello World LLM with AWS Bedrock and SAM (Lambda and API…

Updated
6 min read
A Step-by-Step Guide to Creating a Hello World LLM with AWS Bedrock and SAM (Lambda and API…

Introduction:

Embarking on the journey of serverless architecture often begins with a simple “Hello World Bedrock” application, providing a foundational understanding of key concepts and SAM framework and AWS Bedrock — Serverless GenAI as a Service.

Whether you’re a newcomer to serverless development or looking to explore the capabilities of AWS Bedrock, this step-by-step demonstration will equip you with the knowledge and confidence to kickstart your serverless projects. Join us as we unravel the intricacies of Bedrock and SAM, uncovering the seamless integration of Lambda functions and API Gateway for a robust serverless architecture. Let’s embark on this hands-on journey together, where “Hello World” becomes the gateway to learning of AWS Bedrock and SAM.

Upgrading / Installing SAM (Serverless Application Model) Framework:

$ brew install aws-sam-cli

$ sam --version
SAM CLI, version 1.105.0

Note: I am using MAC, So I am using Brew — You can follow below documentation to update the MAC : https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/manage-sam-cli-versions.html

Quickstart

You can download from Github and Perform the Sam Deploy.

git clone https://github.com/jayyanar/learning-aws-bedrock/tree/main/blog9/simple-bedrock-lambda-app

Validate and Deploy the SAM Template

# Validate the Code
$ cd simple-bedrock-lambda-app && sam validate

# Build the Template
$ sam build

# Deploy the Template
$ sam deploy

Verify the Deployment from Cloudformation

Update the IAM Role for Bedrock Role Access Policy for Lambda Deployed

Enhance the security of your Bedrock application by updating the IAM Role access policy. A sample policy is provided to serve as a reference, offering insights into best practices for securing your serverless architecture.

→ Create IAM Policy (Inline or Custom Policy) and update to the IAM Role

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:*::foundation-model/amazon.titan-text-lite-v1"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "bedrock:ListModelInvocationJobs",
"Resource": "*"
}
]
}

Verify Via API Gateway for Bedrock Response from Lambda

Step by Step — Instruction.

Create HelloWorld via SAM

Ensure a smooth deployment of your serverless application by verifying the CloudFormation template. This section guides you through the necessary steps to validate your configuration before launching your application to the AWS cloud.

$ sam init

You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.

Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location

→ Select 1 → AWS Quick Start Templates

Choose an AWS Quick Start application template
1 - Hello World Example
2 - Data processing
3 - Hello World Example with Powertools for AWS Lambda
4 - Multi-step workflow
5 - Scheduled task
6 - Standalone function
7 - Serverless API
8 - Infrastructure event management
9 - Lambda Response Streaming
10 - Serverless Connector Hello World Example
11 - Multi-step workflow with Connectors
12 - GraphQLApi Hello World Example
13 - Full Stack
14 - Lambda EFS example
15 - Hello World Example With Powertools for AWS Lambda
16 - DynamoDB Example
17 - Machine Learning
Template:

→ Select 1 → Hello World Example

Use the most popular runtime and package type? (Python and zip) [y/N]:

Which runtime would you like to use?
1 - aot.dotnet7 (provided.al2)
2 - dotnet6
3 - go1.x
4 - go (provided.al2)
5 - go (provided.al2023)
6 - graalvm.java11 (provided.al2)
7 - graalvm.java17 (provided.al2)
8 - java21
9 - java17
10 - java11
11 - java8.al2
12 - java8
13 - nodejs20.x
14 - nodejs18.x
15 - nodejs16.x
16 - python3.9
17 - python3.8
18 - python3.12
19 - python3.11
20 - python3.10
21 - ruby3.2
22 - ruby2.7
23 - rust (provided.al2)
24 - rust (provided.al2023)
Runtime: 18

→ Select 18 → python3.12

What package type would you like to use?
1 - Zip
2 - Image
Package type: 1

→ Select 1 → Zip

Based on your selections, the only dependency manager available is pip. We will proceed copying the template using pip.

Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: n

Would you like to enable monitoring using CloudWatch Application Insights?

For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: n

Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]: y

Structured Logging in JSON format might incur an additional cost. View https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html#monitoring-cloudwatchlogs-pricing for more details

→ Give a Project Name

Project name [sam-app]: simple-bedrock-lambda-app


Generating application:

Name: simple-bedrock-lambda-app
Runtime: python3.12
Architectures: x86_64
Dependency Manager: pip
Application Template: hello-world
Output Directory: .
Configuration file: simple-bedrock-lambda-app/samconfig.toml

Next steps can be found in the README file at simple-bedrock-lambda-app/README.md

Update the requirement.txt for Boto3 Update.

Path: cd ~/simple-bedrock-lambda-app/hello_world/requirements.txt

requests
boto3~=1.33.6
botocore~=1.33.6%

Make Code Changes Needed from VSCode and Sync Using SAM CLI

Path: cd ~/simple-bedrock-lambda-app/hello_world/app.py

import json
import boto3

# Bedrock Runtime client used to invoke and question the models
bedrock_runtime = boto3.client(
service_name='bedrock-runtime',
region_name='us-east-1' # Replace with your desired region
)

def lambda_handler(event, context):

PROVIDE your prompt here

lite_prompt = "2 difference between AWS DynamoDB and AWS Redis"

body = json.dumps({
"inputText": lite_prompt,
"textGenerationConfig": {
"maxTokenCount": 128,
"stopSequences": [],
"temperature": 0,
"topP": 0.9
}
})

The actual call to retrieve a response from the model

response = bedrock_runtime.invoke_model(
body=body,
modelId="amazon.titan-text-lite-v1", # Replace with your model ID
accept='application/json',
contentType='application/json'
)

response_body = json.loads(response.get('body').read())
response_text = response_body.get('results')[0].get('outputText')
parse_text = response_text[response_text.index('\n')+1:]
model_completion = parse_text.strip()

This code will send a respone of Text Completion with stats

return {
'statusCode': 200,
'body': json.dumps(model_completion)
}

Validate and Deploy the SAM Template

Patience is key! Understand the importance of waiting for the deployment process to complete successfully. This section provides insights into monitoring the deployment progress to ensure a seamless and error-free execution.

# Validate the Code
$ cd simple-bedrock-lambda-app && sam validate

# Build the Template
$ sam build

# Deploy the Template
$ sam deploy

Verify the Deployment from Cloudformation

Update the IAM Role for Bedrock Role Access Policy for Lambda Deployed

Enhance the security of your Bedrock application by updating the IAM Role access policy. A sample policy is provided to serve as a reference, offering insights into best practices for securing your serverless architecture.

→ Create IAM Policy (Inline or Custom Policy) and update to the IAM Role

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:*::foundation-model/amazon.titan-text-lite-v1"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "bedrock:ListModelInvocationJobs",
"Resource": "*"
}
]
}

Verify Via API Gateway for Bedrock Response from Lambda

Any Changes Needed from VSCode and Sync Using SAM Code

Explore the integration of Visual Studio Code (VSCode) with SAM, allowing for efficient coding and synchronization. Learn about any additional changes needed within your development environment and how to sync them using SAM code.

$ cd simple-bedrock-lambda-app && sam sync --stack-name simple-bedrock-lambda-app --watch

Check the Bedrock Cloudwatch Dashboard — Invocation

Feel Free to check on Dashboard

Check the Bedrock Cloudwatch Dashboard — Token Count

Log Insights for Cloudwatch Logs Information

→ Go to Log Insights → Select the Cloudwatch Log Group → → Check on my Blog1 for reference → Paste the below Query (You can custom the queries also via “Query Generator”)

fields input.inputBodyJson.inputText,input.inputBodyJson.textGenerationConfig.maxTokenCount,input.inputBodyJson.textGenerationConfig.temperature,input.inputBodyJson.textGenerationConfig.topP,input.inputContentType,input.inputTokenCount,modelId,output.outputBodyJson.results.0.completionReason,output.outputBodyJson.results.0.outputText,output.outputBodyJson.results.0.tokenCount,output.outputTokenCount,region

— Thanks for Reading — Share your comments if you interested on Live Youtube on this Blogs

Please read my previous Blogs

Blog 1: dataopslabs.com/p/aws-bedrock-learning-seri..

Blog 2: dataopslabs.com/p/family-of-titan-text-mode..

Blog 3: dataopslabs.com/p/family-of-titan-text-mode..

Blog 4: https://blog.dataopslabs.com/aws-bedrock-boto3-demo-anthropic-claude

Blog 5: https://blog.dataopslabs.com/aws-bedrock-boto3-demo-ai21-labs

Blog 6: https://blog.dataopslabs.com/aws-bedrock-boto3-cohere-model

Blog 7: https://blog.dataopslabs.com/aws-bedrock-boto3-demo-llama2-model

Blog 8: https://blog.dataopslabs.com/aws-bedrock-boto3-demo-stability-ai

Follow me on

Blog: https://blog.dataopslabs.com/

Newsletters: https://www.dataopslabs.com/

Youtube Channel: https://www.youtube.com/channel/UC5oU2OucjpaPT7OJWpZy49g

Feel free to share your comments and Feedback

14 views

More from this blog

D

DataOps Labs

77 posts

Stay updated on the latest in AI/ML, Cloud, DevOps, MLOps, Generative AI and cutting-edge techniques with this continuous learning free newsletters.