Python - AWS SAM Lambda Example - onlinetutorialspoint

PROGRAMMINGJava ExamplesC Examples
Java Examples
C Examples
C Tutorials
aws
JAVAEXCEPTIONSCOLLECTIONSSWINGJDBC
EXCEPTIONS
COLLECTIONS
SWING
JDBC
JAVA 8
SPRING
SPRING BOOT
HIBERNATE
PYTHON
PHP
JQUERY
PROGRAMMINGJava ExamplesC Examples
Java Examples
C Examples
C Tutorials
aws
Here we are going to see the basic Python AWS Lambda Hello World example using SAM (Serverless Application Model)
AWS Account
Python
AWS CLI
SAM CLI
SAM uses AWS-CLI so its required to install AWS CLI to work with SAM, after all the above installations, we have to set up the AWS credentials, it varies based on your OS type we have an exclusive article for this or you can configure the credentials directly like below.
I am working on the below versions:
$ sam --version
SAM CLI, version 1.23.0

$ aws --version
aws-cli/2.0.30 Python/3.7.4 Darwin/19.6.0 botocore/2.0.0dev34

The AWS configure command is used to map the AWS Account with the installed AWS CLI, that way the CLI can get access with your AWS Account.
$ aws configure
AWS Access Key ID [****************OE7N]: your_aws_access_key
AWS Secret Access Key [****************7qwh]: your_aws_secret_access_key
Default region name [None]: us-west-2
Default output format [None]: 

sam init command is used to generate the SAM project structure. For this example, I have generated the Sam project with python3.8 however, when implementing the code, we can change it to various versions of Python3x, .NET, Go, Node.js, Java or Ruby.
$ sam init --runtime python3.8
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1
What package type would you like to use?
        1 - Zip (artifact is a zip uploaded to S3)      
        2 - Image (artifact is an image uploaded to an ECR image repository)
Package type: 1

Project name [sam-app]: hello-world-sam

Cloning app templates from https://github.com/aws/aws-sam-cli-app-templates

AWS quick start application templates:
        1 - Hello World Example
        2 - EventBridge Hello World
        3 - EventBridge App from scratch (100+ Event Schemas)
        4 - Step Functions Sample App (Stock Trader)
        5 - Elastic File System Sample App
Template selection: 1

    -----------------------
    Generating application:
    -----------------------
    Name: hello-world-sam
    Runtime: python3.8
    Dependency Manager: pip
    Application Template: hello-world
    Output Directory: .
    
    Next steps can be found in the README file at ./hello-world-sam/README.md

hello-world-sam $ 
.
├── README.md
├── __init__.py
├── events
│   └── event.json
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── template.yaml
└── tests
    ├── __init__.py
    ├── integration
    │   ├── __init__.py
    │   └── test_api_gateway.py
    ├── requirements.txt
    └── unit
        ├── __init__.py
        └── test_handler.py

Among all of the above files the most important file that we need to work on is app.py, it is the python lambda function.
The template.yaml is the one that has the SAM template.
The event.json has the sample event for testing.
The requirement.txt specifies the lambda function dependencies.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  hello-world-sam

  Sample SAM Template for hello-world-sam

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.8
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get

Outputs:
  # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function
  # Find out more about other implicit resources you can reference within SAM
  # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"
  HelloWorldFunction:
    Description: "Hello World Lambda Function ARN"
    Value: !GetAtt HelloWorldFunction.Arn
  HelloWorldFunctionIamRole:
    Description: "Implicit IAM Role created for Hello World function"
    Value: !GetAtt HelloWorldFunctionRole.Arn

The above simple template file used to build the AWS Lambda using SAM
import json

def lambda_handler(event, context):
    """Sample pure Lambda function

    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "hello world",
            # "location": ip.text.replace("\n", "")
        }),
    }

Build the application
hello-world-sam $ sam build
Building codeuri: /hello-world-sam/hello_world runtime: python3.8 metadata: {} functions: ['HelloWorldFunction']
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Deploy: sam deploy --guided

deploy the application
$ sam deploy --guided
Configuring SAM deploy
======================
Looking for config file [samconfig.toml] :  Not found
Setting default arguments for 'sam deploy'
=========================================
Stack Name [sam-app]: hello-world-sam-application
AWS Region [us-west-2]: us-west-2
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]: y
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: y
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: y
SAM configuration file [samconfig.toml]: 
SAM configuration environment [default]: dev
Looking for resources needed for deployment: Found!
Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-vlxz3w3to6ye
A different default S3 bucket can be set in samconfig.toml
Saved arguments to config file
Running 'sam deploy' for future deployments will use the parameters saved above.
The above parameters can be changed by modifying samconfig.toml
Learn more about samconfig.toml syntax at 
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
Uploading to hello-world-sam-application/58ec98812dacd95efee12c7e720890f1  585177 / 585177  (100.00%)
Deploying with following values
===============================
Stack name                   : hello-world-sam-application
Region                       : us-west-2
Confirm changeset            : True
Deployment s3 bucket         : aws-sam-cli-managed-default-samclisourcebucket-vlxz3w3to6ye
Capabilities                 : ["CAPABILITY_IAM"]
Parameter overrides          : {}
Signing Profiles             : {}
Initiating deployment
=====================
Uploading to hello-world-sam-application/b78c4ab547b82834a429f1f54a09b62f.template  1125 / 1125  (100.00%)
Waiting for changeset to be created..
CloudFormation stack changeset
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Operation                                                     LogicalResourceId                                             ResourceType                                                  Replacement                                                 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ Add                                                         HelloWorldFunctionHelloWorldPermissionProd                    AWS::Lambda::Permission                                       N/A                                                         
+ Add                                                         HelloWorldFunctionRole                                        AWS::IAM::Role                                                N/A                                                         
+ Add                                                         HelloWorldFunction                                            AWS::Lambda::Function                                         N/A                                                         
+ Add                                                         ServerlessRestApiDeployment47fc2d5f9d                         AWS::ApiGateway::Deployment                                   N/A                                                         
+ Add                                                         ServerlessRestApiProdStage                                    AWS::ApiGateway::Stage                                        N/A                                                         
+ Add                                                         ServerlessRestApi                                             AWS::ApiGateway::RestApi                                      N/A                                                         
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Changeset created successfully. arn:aws:cloudformation:us-west-2:816569674899:changeSet/samcli-deploy1622384684/659cd0b5-e7fb-4767-a161-df496376c15e
Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]: y
2021-05-30 19:55:02 - Waiting for stack create/update to complete
CloudFormation events from changeset
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                                                ResourceType                                                  LogicalResourceId                                             ResourceStatusReason                                        
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS                                            AWS::IAM::Role                                                HelloWorldFunctionRole                                        Resource creation Initiated                                 
CREATE_IN_PROGRESS                                            AWS::IAM::Role                                                HelloWorldFunctionRole                                        -                                                           
CREATE_COMPLETE                                               AWS::IAM::Role                                                HelloWorldFunctionRole                                        -                                                           
CREATE_IN_PROGRESS                                            AWS::Lambda::Function                                         HelloWorldFunction                                            -                                                           
CREATE_COMPLETE                                               AWS::Lambda::Function                                         HelloWorldFunction                                            -                                                           
CREATE_IN_PROGRESS                                            AWS::Lambda::Function                                         HelloWorldFunction                                            Resource creation Initiated                                 
CREATE_IN_PROGRESS                                            AWS::ApiGateway::RestApi                                      ServerlessRestApi                                             -                                                           
CREATE_IN_PROGRESS                                            AWS::ApiGateway::RestApi                                      ServerlessRestApi                                             Resource creation Initiated                                 
CREATE_COMPLETE                                               AWS::ApiGateway::RestApi                                      ServerlessRestApi                                             -                                                           
CREATE_IN_PROGRESS                                            AWS::ApiGateway::Deployment                                   ServerlessRestApiDeployment47fc2d5f9d                         Resource creation Initiated                                 
CREATE_IN_PROGRESS                                            AWS::Lambda::Permission                                       HelloWorldFunctionHelloWorldPermissionProd                    Resource creation Initiated                                 
CREATE_IN_PROGRESS                                            AWS::Lambda::Permission                                       HelloWorldFunctionHelloWorldPermissionProd                    -                                                           
CREATE_IN_PROGRESS                                            AWS::ApiGateway::Deployment                                   ServerlessRestApiDeployment47fc2d5f9d                         -                                                           
CREATE_COMPLETE                                               AWS::ApiGateway::Deployment                                   ServerlessRestApiDeployment47fc2d5f9d                         -                                                           
CREATE_IN_PROGRESS                                            AWS::ApiGateway::Stage                                        ServerlessRestApiProdStage                                    Resource creation Initiated                                 
CREATE_IN_PROGRESS                                            AWS::ApiGateway::Stage                                        ServerlessRestApiProdStage                                    -                                                           
CREATE_COMPLETE                                               AWS::ApiGateway::Stage                                        ServerlessRestApiProdStage                                    -                                                           
CREATE_COMPLETE                                               AWS::Lambda::Permission                                       HelloWorldFunctionHelloWorldPermissionProd                    -                                                           
CREATE_COMPLETE                                               AWS::CloudFormation::Stack                                    hello-world-sam-application                                   -                                                           
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CloudFormation outputs from deployed stack
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Outputs                                                                                                                                                                                                                                                
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole                                                                                                                                                                                                          
Description         Implicit IAM Role created for Hello World function                                                                                                                                                                                 
Value               arn:aws:iam::816569674899:role/hello-world-sam-application-HelloWorldFunctionRole-NAYYRTABIVUF                                                                                                                                     
Key                 HelloWorldApi                                                                                                                                                                                                                      
Description         API Gateway endpoint URL for Prod stage for Hello World function                                                                                                                                                                   
Value               https://6v73c82ade.execute-api.us-west-2.amazonaws.com/Prod/hello/                                                                                                                                                                 
Key                 HelloWorldFunction                                                                                                                                                                                                                 
Description         Hello World Lambda Function ARN                                                                                                                                                                                                    
Value               arn:aws:lambda:us-west-2:816569674899:function:hello-world-sam-application-HelloWorldFunction-dAjHSaNEq6pl                                                                                                                         
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Successfully created/updated stack - hello-world-sam-application in us-west-2

If everything went well you can see the above success message.
Login to your AWS account-> Switch to Lambda-> Select the lambda-> Code Source-> Run
Export AWS credentials
More on AWS SAM
Happy Learning 🙂

How to install AWS CLI on Windows 10
How set AWS Access Keys in Windows or Mac Environment
How to Copy Local Files to AWS EC2 instance Manually ?
How to connect AWS EC2 Instance using PuTTY
Lambda Expressions in Java
What are Lambda Expressions in Java 8
Different ways to use Lambdas in Python
AngularJs Directive Example Tutorials
How add files to S3 Bucket using Shell Script
Python Django Helloworld Example
What are the different ways to Sort Objects in Python ?
Angularjs Services Example Tutorials
How to use *args and **kwargs in Python
What are the List of Python Keywords
Angularjs Custom Filter Example

How to install AWS CLI on Windows 10
How set AWS Access Keys in Windows or Mac Environment
How to Copy Local Files to AWS EC2 instance Manually ?
How to connect AWS EC2 Instance using PuTTY
Lambda Expressions in Java
What are Lambda Expressions in Java 8
Different ways to use Lambdas in Python
AngularJs Directive Example Tutorials
How add files to S3 Bucket using Shell Script
Python Django Helloworld Example
What are the different ways to Sort Objects in Python ?
Angularjs Services Example Tutorials
How to use *args and **kwargs in Python
What are the List of Python Keywords
Angularjs Custom Filter Example
 


Δ
 Install Java on Mac OS
 Install AWS CLI on Windows
 Install Minikube on Windows
 Install Docker Toolbox on Windows
 Install SOAPUI on Windows
 Install Gradle on Windows
 Install RabbitMQ on Windows
 Install PuTTY on windows
 Install Mysql on Windows
 Install Hibernate Tools in Eclipse
 Install Elasticsearch on Windows
 Install Maven on Windows
 Install Maven on Ubuntu
 Install Maven on Windows Command
 Add OJDBC jar to Maven Repository
 Install Ant on Windows
 Install RabbitMQ on Windows
 Install Apache Kafka on Ubuntu
 Install Apache Kafka on Windows